Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / CORS / 14 сообщений из 14, страница 1 из 1
09.11.2014, 18:01
    #38799944
anc32
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
Пробую загрузить страницу с поддомена с помощью XMLHttpRequest. Добавляю необходимые заголовки для CORS, но всё равно firebug пишет, что GET запрос к сайту Aborted и предлагает использовать только 1 домен или включить CORS. Вот как добавляю заголовки: HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
HttpContext.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
HttpContext.Response.AppendHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");
HttpContext.Response.AppendHeader("Access-Control-Allow-Headers", "origin, content-type, accept, x-requested-with, sid, mycustom, smuser,x-powered-by,cache-control,content-encoding,content-length,date,expires,pragma,server,vary,x-aspnet-version,x-aspnetmvc-version,accept-encoding,accept-language,dnt,host,origin,referer,user-agent");
...
Рейтинг: 0 / 0
09.11.2014, 18:18
    #38799957
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
anc32Пробую загрузить страницу с поддомена с помощью XMLHttpRequest. Добавляю необходимые заголовки для CORS, но всё равно firebug пишет, что GET запрос к сайту Aborted и предлагает использовать только 1 домен или включить CORS. Вот как добавляю заголовки: HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
HttpContext.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
HttpContext.Response.AppendHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");
HttpContext.Response.AppendHeader("Access-Control-Allow-Headers", "origin, content-type, accept, x-requested-with, sid, mycustom, smuser,x-powered-by,cache-control,content-encoding,content-length,date,expires,pragma,server,vary,x-aspnet-version,x-aspnetmvc-version,accept-encoding,accept-language,dnt,host,origin,referer,user-agent");Это Вы так на так называемый preflight request отвечаете? А он точно прилетает на сервер?

Попробуйте всё тоже самое в Web.config прописать:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0"?>
<!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 -->
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Headers" value="Content-Type"/>
        <add name="Access-Control-Allow-Methods" value="POST, GET, PUT, DELETE, OPTIONS"/>
        <add name="Access-Control-Allow-Origin" value="*"/>
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>
...
Рейтинг: 0 / 0
09.11.2014, 18:19
    #38799959
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
anc32, и покажите как Вы сам запрос отправляете.
...
Рейтинг: 0 / 0
10.11.2014, 09:18
    #38800274
anc32
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
Попробовал в конфиге - то же самое.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
var cache = {};
var sites = ["http://example.com", "http://sub1.example.com", "http://sub2.example.com"];
function xhrStart(url) {
    xmlhttp.open('GET', url, true);
    xmlhttp.send();
}

function isOkXhr() {
    return (xmlhttp.readyState == 4 &&
        (xmlhttp.status >= 200 && xmlhttp.status < 300));
}

function reload()
{
    var len = sites.length;
    var i;
    for(i = z;i < len;i ++)
    {
        var url = sites[i];
        xhrStart(url);
        if(isOkXhr ())
            cache = xmlhttp.responseText;        
    }
}

reload();
setInterval(reload(), 5000);
...
Рейтинг: 0 / 0
10.11.2014, 10:48
    #38800397
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
anc32, а в каком браузере, какой версии не работает?
...
Рейтинг: 0 / 0
10.11.2014, 10:57
    #38800417
anc32
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
Вроде во всех, но вывод в консоли отладчика смотрел только в firefox 33.
...
Рейтинг: 0 / 0
10.11.2014, 10:59
    #38800419
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
anc32, а приведите оригинальный текст вывода.
...
Рейтинг: 0 / 0
10.11.2014, 12:58
    #38800671
anc32
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
...
Рейтинг: 0 / 0
10.11.2014, 13:06
    #38800685
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
anc32, аааа, Вы используете Credentials, в этом случае wild card не подходит:

HTTP access control (CORS) - Requests with credentials
Important notewhen responding to a credentialed request, server must specify a domain, and cannot use wild carding. The above example would fail if the header was wildcarded as: Access-Control-Allow-Origin: *. Since the Access-Control-Allow-Origin explicitly mentions http://foo.example , the credential-cognizant content is returned to the invoking web content. Note that in line 22, a further cookie is set.
...
Рейтинг: 0 / 0
10.11.2014, 16:54
    #38801090
anc32
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
Благодарю. Прочёл статью, добавил withCredentials=true к запросам, но сайты по-прежнему Aborted.
...
Рейтинг: 0 / 0
10.11.2014, 23:26
    #38801370
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
anc32, а то, что идёт после выделенного слова must, Вы прочитали?
...
Рейтинг: 0 / 0
11.11.2014, 05:07
    #38801453
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
Если прочитать что было после must, то как-то так -

Код: c#
1.
HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "http://site.com");



где http://site.com заменяете на свой домен
...
Рейтинг: 0 / 0
19.11.2014, 16:22
    #38810936
anc32
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
Я исправил это, но по-прежнему Aborted. Причём хостер не видит у себя проблем. Прямо заговор производителей браузеров какой-то.
...
Рейтинг: 0 / 0
20.11.2014, 07:52
    #38811384
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CORS
Смотрите в профилировщике два клиентских запроса друг за другом - первый пустой OPTIONS, второй с данными GET/POST и сверяйте какие заголовки выставлены неверно.

Первый запрос с OPTIONS:

запрос клиента -

автор...
Access-Control-Request-Headers:x-requested-with, content-type
Access-Control-Request-Method:POST
Origin: http://site.com
...


ответ сервера -

автор...
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type, X-Requested-With
Access-Control-Allow-Methods:GET, POST, OPTIONS
Access-Control-Allow-Origin: http://site.com
Content-Length:0
...


Второй GET/POST такой же (с клиента только без Access-Control-Request) и уже с данными.

На сервере при OPTIONS (if (Request.HttpMethod == "OPTIONS")) никакого контента не возвращаете?
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / CORS / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]