CORS的做用:
爲了改善網絡應用程序,開發人員要求瀏覽器供應商容許跨域請求。跨域請求主要用於:canvas
- 調用XMLHttpRequest或fetchAPI經過跨站點方式訪問資源
- 網絡字體,例如Bootstrap(經過CSS使用@font-face 跨域調用字體)
- 經過canvas標籤,繪製圖表和視頻。
什麼狀況下須要 CORS:
跨域資源共享標準( cross-origin sharing standard )容許在下列場景中使用跨域 HTTP 請求:跨域
- 由 XMLHttpRequest 或 Fetch 發起的跨域 HTTP 請求。
- Web 字體 (CSS 中經過 @font-face 使用跨域字體資源), 所以,網站就能夠發佈 TrueType 字體資源,並只容許已受權網站進行跨站調用。
- WebGL 貼圖
- 使用 drawImage 將 Images/video 畫面繪製到 canvas
- 樣式表(使用 CSSOM)
CORS實現:
CORS也有一些限制,兩種模型能夠實現:瀏覽器
1.簡單模型
支持get/post/put/delete請求,例如返回Access-Control-Allow-Origin:*,可是不容許自定義header且會忽略cookies,且post數據格式有限制,只支持‘text/plain','application/x-www-urlencoded'and'multipart/form-data',其中’text/plain'默認支持,後面兩種須要下面的預檢請求和服務器協商。
2.協商模型/預檢請求(Preflighted Request)
舉例:瀏覽器發出PUT請求,OPTION請求返回Access-Control-Allow-Origin:*,Access-Control-Allow-Methods:’PUT’,服務器贊成全部域的PUT請求,瀏覽器收到並繼續發出真正的PUT請求,服務器響應並再次返回Access-Control-Allow-Origin:*,容許瀏覽器的腳本執行服務器返回的數據。