热门问题
时间线
聊天
视角
跨來源資源共用
来自维基百科,自由的百科全书
Remove ads
跨來源資源共用(英語:Cross-origin resource sharing,縮寫:CORS),用於讓網頁的受限資源能夠被其他域名的頁面訪問的一種機制。[1]
![]() | 此條目的參照需要清理,使其符合格式。 (2018年6月10日) |
![]() | 此條目可參照英語維基百科相應條目來擴充。 |
通過這個機制,頁面能夠自由地使用跨來源的(英語:cross-origin)圖片、樣式、指令碼、iframes以及影片。[2]一些跨網域的請求(特別是Ajax)常常會被同源策略(英語:same-origin policy)所禁止。跨源資源共享定義了一種方式,讓瀏覽器和伺服器之間能互相確認是否足夠安全可以允許使用跨源請求(英語:cross-origin requests)。[3]比起嚴格的同源請求,這將提供更多自由度和功能性(functionality),也比直接允許所有的跨源請求更為安全。
跨來源資源共用是一份瀏覽器技術的規範,提供了 Web 服務從不同網域傳來沙盒指令碼的方法,以避開瀏覽器的同源策略[4]。
Remove ads
工作原理
跨來源資源共用標準描述了,新的HTTP頭部在瀏覽器有權限的時候,應該以如何的形式傳送請求到遠端URLs。雖然伺服器會有一些校驗和認證,但是瀏覽器有責任去支援這些頭部以及增加相關的限制。
對於能夠修改資料的Ajax和HTTP請求方法(特別是 GET
以外的 HTTP 請求,或者搭配某些 MIME 類型的 POST
請求),瀏覽器必須首先使用 OPTIONS
方法發起一個預檢請求(preflight request),從而獲知伺服器端是否允許該跨源請求。伺服器確認允許之後,才發起實際的 HTTP 請求。在預檢請求的返回中,伺服器端也可以通知客戶端,是否需要攜帶身分憑證(包括 Cookies 和 HTTP 認證相關資料)。[5]
瀏覽器支援
擁有以下排版引擎的瀏覽器都支援 CORS:
- Blink 與所有基於 Chromium 的瀏覽器 (Google Chrome 28+[6][7], Opera 15+[6], Amazon Silk, Android's 4.4+ WebView 與 Qt WebEngine)
- Gecko 1.9.1(Firefox 3.5[4]、SeaMonkey 2.0[8])以上
- WebKit(未確認最早版本,Safari 4 以上、Google Chrome 3 以上,可能早些)
- MSHTML/Trident 4.0(Internet Explorer 8)由 XDomainRequest 物件提供部份支援[4]
已知以下瀏覽器不支援 CORS:
Remove ads
歷史
Tellme Networks 的馬特·奧什里(Matt Oshry)、布拉德·波特(Brad Porter)與麥克·波德爾(Michael Bodell)於 2004 年 3 月提案將跨來源支援加入 VoiceXML 2.1[12]以支援 VoiceXML 瀏覽器的跨來源資料請求。W3C 認為這不應該限制在 VoiceXML 而是一般的機制,因此將提案移到另一份實作備忘錄[13]。幾個主要的瀏覽器廠商透過 W3C 的 Web 應用程式工作小組正式的將該備忘錄改寫為 W3C 工作草案並以推動成為 W3C 推薦標準為目標。
CORS vs JSONP
跨來源資源共用(CORS)是 JSONP 模式的現代版。與 JSONP 不同,CORS 除了 GET 請求方法以外也支援其他的 HTTP 請求。用 CORS 可以讓網頁設計師用一般的 XMLHttpRequest,這種方式的錯誤處理比 JSONP 要來的好。另一方面,JSONP 可以在不支援 CORS 的老舊瀏覽器上運作。現代的瀏覽器都支援 CORS[14]。
參見
參考文獻
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads