2013-07-07 74 views
1

我在jquery 2.0.2中遇到問題,並在調用我的API時讓它識別HTTP 403狀態碼(託管在同一臺機器上,就像靜態網頁呼叫一樣來自)。從一個網頁的JavaScript,我做了一個$ .ajax GET反對/會議路線來檢查用戶的cookie是否目前設置,期待403如果沒有這樣的cookie存在,或者如果它是無效的。jQuery返回狀態代碼404而不是403

Ajax是用下面的呼叫的時間提前被加以設定:

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

的API(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" 

火狐同意:

enter image description here

但是當jQuery的xhr錯誤處理程序被調用時,xhr.status代碼由於某種原因始終是404,從而將邏輯完全拋出。例如,假如我在下面使用CoffeeScript調用,則只有404處理程序會被調用,如果我給它一個正確的路由或者甚至不存在的路由(它在服務器日誌和Firefox中正確返回404)

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。

相關問題