2013-07-07 2 views
1

У меня возникают проблемы с jquery 2.0.2 и получение его для определения кода статуса HTTP 403 при вызове моего API (размещенного на той же машине, как и статическая веб-страница вызова прибывает из). Из javascript веб-страницы я делаю $ .ajax GET против маршрута/сеансов, чтобы проверить, установлен ли файл cookie пользователя, ожидая 403, если такой файл cookie не существует или он недействителен.jQuery возвращает код состояния 404 вместо 403

Аякс будет установка загодя следующий вызов:

setupAjax: -> 
    $.ajaxSetup(
     dataType: 'json' 
     xhrFields: 
     withCredentials: true) 

АНИ (Nginx обратного бревнами прокси ниже) правильно возвращает 403 для неаутентифицированного пользователя:

127.0.0.1 - - [06/Jul/2013:22:48:25 -0700] "GET /1/sessions HTTP/1.1" 403 33 "https://foo.localhost.com/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0" 

Firefox соглашается:

enter image description here

Однако когда вызывается обработчик ошибок xhr jQuery, код xhr.status по какой-то причине всегда 404, что полностью исключает логику. Например, скажем, что я использую вызов CoffeeScript ниже, когда-либо вызывается только обработчик 404, как если бы я дал ему правильный маршрут или даже несуществующий маршрут (который правильно возвращает 404 в обоих журналах сервера и Firefox)

checkSessionCookie: -> 
    $.ajax(
     url: "#{@baseUrl}/sessions" 
     type: 'GET' 
     statusCode: 
     403: -> console.log "I'm a 403" 
     404: -> console.log "I'm a 404") 

(сброс объекта XHR в консоли):

Object { readyState=4, status=404, statusText="error"} 

Что здесь происходит? Я неправильно сконфигурировал jQuery, или я неправильно его использую? Здесь есть трюк?

+0

Что это за сценарий, точно? Это не похоже на javascript для меня; вы должны добавить правильный тег к своему вопросу. – Daedalus

+0

В нем упоминается сценарий кофе? – Owen

+0

Проверить разрешения? Правило для правильных разрешений: Папки: 755 Статическое содержимое: 644 Динамический контент: 700 –

ответ

0

Основываясь на некоторых экспериментах, кажется, что Firefox, возможно, поглотил исключения CORS, вызывая неправильный статус. Chrome всегда сообщал о вызове CORS, поэтому я тестировал это с помощью Firefox.

Настройка заголовков CORS на сервере заставила Firefox вернуть 403 правильно.

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