2016-04-16 111 views
0

我的科爾多瓦應用程序使用backbone.js與我的服務器進行通信。由於該應用程序顯然不與我的API在同一個域中運行,因此每個非平凡的ajax請求都會在OPTIONS預發送時發送。我明白爲什麼這樣做。但是,我完全控制着我自己的服務器!我確切知道,支持哪些http方法和頭文件。所以,是不是OPTIONS請求浪費時間?我該如何禁用它?如何防止Backbone.js發送OPTIONS請求?

回答

2

你說你知道它爲什麼會提出請求,但爲那些沒有MDN describes the conditions that you'll get a preflighted request的人提供了一些上下文。

不,您不能禁用它。

作爲客戶端代碼的作者,你知道你想要做什麼請求。

作爲服務器端代碼的作者,您知道您希望接受哪些請求。作爲編寫用戶瀏覽器的公司,谷歌(或Mozilla,Opera等)不知道你是這兩個網站的作者,而且你信任你自己的公司。他們不知道請求網站A要求瀏覽器對網站B進行無害化處理。

在CORS之前,作者只需擔心可能由鏈接和表單啓動的針對CSRF攻擊的防禦。

然後來XHR和突然的JavaScript上http://evil.example.com可以觸發DELETE請求http://victim.example.com完全啓用withCredentials。如果服務器處理它,對瀏覽器做出響應,然後瀏覽器告訴JS引擎沒有訪問控制標頭,那將是非常糟糕的。內容將被刪除。

因此,您需要預檢才能獲得權限。

所以這不是浪費時間。你不能禁用它。您只需經過許可即可回覆。