2016-04-30 133 views
2

我想了解CORS。根據我的理解,它使您能夠限制哪些域可以訪問服務器上的資源。但是,這看起來並不像完整的故事。例如,我有一個沒有啓用CORS的Web服務。我無法通過jQuery從我的Web應用程序中訪問此Web服務(該應用程序在本地主機上運行)。不過,我可以打Postman的網絡服務。所以,我有點困惑。是否有一些額外的客戶端工作涉及到CORS?CORS - 它是客戶端,服務器端還是傳輸級別?

回答

2

這實際上有點不同。您的瀏覽器將阻止CORS請求,除非請求的來源(即引用網址域名)位於目的地的白名單中,或者目的地批准所有請求而不考慮來源。

在兩種情況下,所需要的報頭(訪問控制允許來源)加入它告訴它的確定將請求發送到目的地的瀏覽器。

這保證了人惡意離不開用戶不知情的情況發送請求到另一個域。

+0

簡單但很好的說明! –

13

服務器負責報告允許的來源。 Web瀏覽器負責強制執行請求僅從允許的域發送。

CORS時未啓用瀏覽器將依靠same origin policy。瀏覽器將只允許對相同主機的請求作爲源。如果未明確允許來源,則會採用相同的來源政策。

除瀏覽器以外的HTTP客戶端不會使用相同的源策略或CORS。來自這些其他HTTP客戶端的請求沒有源。除非Postman桌面應用程序模擬瀏覽器,否則它將能夠向任何URL發出請求。需要

CORS和同源策略,因爲瀏覽器不會隱相信它訪問的網站。他們不保護原始網站,他們保護接收跨網站請求的網站。

如果沒有這些政策,一個簡單的腳本重複加載一個網站可以通過廣告網絡或腳本注入分佈,然後任何瀏覽器中加載腳本將有助於網站上的服務拒絕攻擊。使用CORS和相同的源策略,瀏覽器將限制此腳本的影響。

CORS舉例:

Web瀏覽器從www.example.com加載頁面。該頁面包含一個腳本,用於向www.example.org發送請求。請求的來源是www.example.com。瀏覽器發出請求或發送OPTIONS請求(預檢請求)。當www.example.org的服務器收到來自www.example.org以外的來源的請求時,它將以響應標頭Access-Control-Allow-Origin作出響應,該響應標頭告知瀏覽器允許發出請求的原點。它也可以響應其他標題,如Access-Control-Allow-MethodsAccess-Control-Allow-Headers,這些標題可以限制允許的請求的類型。當瀏覽器被告知什麼來源被允許時,它將阻止來自不允許來源的未來請求。

+0

CORS是一個安全的東西嗎?如果Web瀏覽器負責強制該請求僅從允許的域發送,我很難將其視爲安全組件。 –

+1

@ZachTempleton CORS是一種放鬆同一產地政策的方式。因爲瀏覽器不信任他們訪問的網站或他們加載的內容,所以使用相同的原產地策略。它可以防止一個網站惡意干擾另一個網站。 –

相關問題