我以爲SOP在發送前阻止了其他域的所有請求,但是我在我的機器上做了一個簡單的例子,它不是我所期望的:同源策略是否仍允許執行服務器端代碼?
1-我有本地監聽端口8000的服務器將打印發送到/api
URL的POST數據。
2-我有另一個本地服務器,用以下腳本提供頁面:fetch('http://localhost:8000/api', {method: 'post', body: 'Sending data.'});
。我更改了主機名,在我的瀏覽器中使用foo.com
訪問此頁面。
當我訪問foo.com
,我的跨域請求被執行,我可以看到在Chrome開發者工具的CORS的錯誤:No 'Access-Control-Allow-Origin' header is present on the requested resource
,但在服務器控制檯數據仍然收到。我認爲SOP的存在正好解決了這種問題。它的工作方式,它只保證你不能得到迴應。是這樣嗎?幾乎所有的網絡文件都沒有這麼說。
我錯過了什麼?或者我的例子錯了嗎?
現在我終於可以再次入睡,感謝您的解釋。關於飛行前請求,他們有什麼作用?爲什麼不是所有的'簡單請求',我肯定沒有得到它的價值,因爲主要的觀點是瀏覽器只是爲了阻止響應。延遲問題比通過調用忽略響應的端點更糟糕。 –