2014-01-20 3 views
1

Прежде всего позвольте мне сказать, что я прошел через все похожие должности, но ничто не решает мою проблему. Я также исключил, что серверная сторона не виновата, так как я получаю правильные заголовки ответов, по крайней мере, как показано в Fiddler и в инструментах Chrome Dev.Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Поэтому исходный URL-адрес вызова не разрешен.

Я использую Thinktecture.IdentityModel и сделал проверку подлинности на стороне клиента с помощью JQuery, как это:

$.ajax({ 
     url: tokenEndpoint, 
     type: 'GET', 
     // jsonp is not an option and it does not work anyway with my server setup 
     dataType: "json", // including this does not help 
     crossDomain: true, // including this does not help 
     beforeSend: function (xhr) { 
      xhr.setRequestHeader('Authorization', 'Basic xxxxx'); 
     }, 
     success: function() { 
      alert('success!'); 
     }, 
     error: function(xhr, errorType, exception) { 
     } 
    }); 

Вот след, который я получил:

* предполетной запрос CORS *

OPTIONS http://HOST_DOMAIN/tokenEndPoint HTTP/1.1 
Host: HOST_DOMAIN 
Connection: keep-alive 
Access-Control-Request-Method: GET 
Origin: http://ORIGIN_DOMAIN 
Access-Control-Request-Headers: accept, authorization 
Accept: */* 
Referer: http://ORIGIN_DOMAIN/login 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 

предполетный ответ

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
Access-Control-Allow-Origin: http://ORIGIN_DOMAIN 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Headers: accept,authorization 
Content-Length: 15 

{"status":"ok"} 

фактический запрос AJAX

GET http://HOST_DOMAIN/tokenEndPoint HTTP/1.1 
Host: HOST_DOMAIN 
Connection: keep-alive 
Accept: */* 
Origin: http://ORIGIN_DOMAIN 
Authorization: Basic xxxxx 
Referer: http://ORIGIN_DOMAIN/login 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 

AJAX ответ

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Length: 560 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
Set-Cookie: xxxxx 


{ 
    "access_token": "xxxxx", 
    "expires_in": xxx 
} 

Обратите внимание на последнюю строку трассы, которая исходит из TextView на вкладке Скрипач, что указывает на то, вызов сервера был успешным. Я могу подтвердить, что вызов сервера был успешным, когда я отлаживал код на стороне сервера, и код, который возвращает этот вывод, был достигнут и не выдавал никаких ошибок. Любые идеи, как заставить его работать?

+0

Я бы установил, что ваши домены разрешены к DNS-именам, которые вы ожидаете. –

ответ

1

Как указано в сообщении об ошибке в заголовке вопроса, в ответе отсутствует заголовок Access-Control-Allow-Origin. Согласно содержанию ответа, которое вы отправили в конце вашего вопроса, сервер не включает этот заголовок. Итак, проблема связана с вашим сервером. Вам нужно будет включить этот заголовок в свой ответ.

Смежные вопросы