2012-01-10 2 views
3

Я пытаюсь настроить API с поддержкой CORS, с которым я могу получить доступ через JavaScript.Браузер и ответ AJAX Заголовки CORS отличаются

код, я использую, чтобы проверить это:

$(function(){ 
get = function(url_fragment) 
{ 
    $.ajax({ 
     url:  'my_api', 
     dataType: 'json', 
     cache:  false, 
     success: function(data) 
     { 
      alert('success'); 
     }, 
     error:  function(data) 
     { 
      alert('failure'); 
     } 
    }) 
} 
get(''); 
}); 

Это довольно простой запрос AJAX.

Я включил CORS в моем Nginx конфигурации

add_header Access-Control-Allow-Origin *; 

И при посещении API в моем браузере, поджигатель показывает ожидаемые заголовки

Access-Control-Allow-Origin * 
Connection   keep-alive 
Content-Length  59 
Content-Type  application/json;charset=utf-8 
Server    nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack) 
Status    200 
X-Frame-Options  sameorigin 
X-Powered-By  Phusion Passenger (mod_rails/mod_rack) 3.0.11 
X-XSS-Protection 1; mode=block 

При просмотре запроса XHR в поджигатель в Заголовок CORS отсутствует:

Connection   keep-alive 
Content-Encoding gzip 
Content-Type  text/plain 
Server    nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack) 
Status    403 
Transfer-Encoding chunked 
X-Frame-Options  sameorigin 
X-Powered-By  Phusion Passenger (mod_rails/mod_rack) 3.0.11 

Я получаю правильные заголовки, когда usin г curl

$ curl -i my_api 
HTTP/1.1   200 OK 
Content-Type:  application/json;charset=utf-8 
Connection:   keep-alive 
Status:    200 
X-Powered-By:  Phusion Passenger (mod_rails/mod_rack) 3.0.11 
X-Frame-Options: sameorigin 
X-XSS-Protection: 1; mode=block 
Content-Length:  61 
Server:    nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack) 
Access-Control-Allow-Origin: * 

Излишне говорить, что я запутался, почему это не работает, какие-либо идеи?

ответ

4

add_header работает только с новыми кодами состояния (200, 204, 301, 302 или 304). Ответ, отсутствующий в заголовке, равен 403, поэтому add_header не будет работать. Модуль третьей стороны headers more более гибкий и может добавлять заголовки для любого кода состояния.

+0

Правильно, так что объясняет разницу в заголовках, однако я был в предположении, что причина его возвращения 403 состояла в том, что место происхождения не было разрешено? – djlumley

+0

Я не уверен, почему он возвращает 403, но заголовок X-Powered-By заставляет меня думать, что это происходит из приложения ruby. – kolbyjack