我建立一個基於Backbone.js的應用程序,並面臨一個奇怪的問題。爲什麼一個OPTIONS請求失敗,當答案跟進請求是204?
在某一點的應用程序請求集合資源和Chrome內(和Safari)我得到這樣一個錯誤:
XMLHttpRequest cannot load http://api.mydomain.net/v1/foos/00000d/bars/000014/boots Origin http://localhost:3501 is not allowed by Access-Control-Allow-Origin.
好吧,CORS的問題,我想和我的指責API。然後通過捲曲請求這個非常的資源:
curl -i -H'Accept: application/json' -H'X-Auth-Token: pAWp5hrCmXA83GgFzgHC' -XOPTIONS 'http://api.mydomain.net/v1/foos/00000d/bars/000014/boots'
HTTP/1.1 200 OK
Status: 200
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Auth-Token
Content-Length: 0
看起來不錯,現在GET:
curl -i -H'Accept: application/json' -H'X-Auth-Token: pAWp5hrCmXA83GgFzgHC' -XGET 'http://api.mydomain.net/v1/foos/00000d/bars/000014/boots'
HTTP/1.1 204 No Content
Status: 204
Cache-Control: no-cache
Content-Length: 0
Content-Type: text/plain
如果我要求靴子的集合,包含至少一個對象,一切工作正常。我的服務器的CORS標題響應arr完全正常,我認爲。那麼爲什麼瀏覽器會報告一個跨源資源問題?
是否由於我的204條回覆中的內容類型text/plain
?
確保問題確實是由CORS引起的,而不是某些服務器端故障。使用'--disable-web-security'標誌運行Chrome並仔細檢查服務器的響應。 –
不幸的是,當使用該命令行開關啓動時,OSX上的最新Chrome(非dev)會死亡。 – GeorgieF
檢查您的服務器的錯誤日誌。 –