跨來源資源共享

跨域资源共享(,缩写:),用于让网页的受限资源能够被其他域名的页面访问的一种机制。

通过這個机制,页面能够自由地使用跨來源的()图片、样式、脚本、iframes以及视频。一些跨網域的请求(特别是Ajax)常常会被同源策略()所禁止。跨源资源共享定义了一种方式,讓浏览器和服务器之间能互相确认是否足够安全可以允許使用跨源请求()。比起嚴格的同源请求,这将提供更多自由度和功能性(functionality),也比直接允許所有的跨源请求更為安全。

跨域资源共享是一份瀏覽器技術的規範,提供了 Web 服務從不同網域傳來沙盒腳本的方法,以避開瀏覽器的同源策略

瀏覽器支援
擁有以下排版引擎的瀏覽器都支援 CORS:

  • Blink 與所有基於 Chromium 的瀏覽器 (Google Chrome 28+, Opera 15+、SeaMonkey 2.0)以上
  • WebKit(未確認最早版本,Safari 4 以上、Google Chrome 3 以上,可能早些)
  • MSHTML/Trident 4.0(Internet Explorer 8)由 XDomainRequest 物件提供部份支援。
  • Carmino 2.0.x 系列未實作 CORS,因為這些版本建構在 Gecko 1.9.0 之上。
  • Arora 0.10.2 有 WebKit 的 CORS 相關 API,但是若使用跨來源要求會失敗。

歷史
Tellme Networks 的馬特·奧什里(Matt Oshry)、布拉德·波特(Brad Porter)與麥克·波德爾(Michael Bodell)於 2004 年 3 月提案將跨來源支援加入 VoiceXML 2.1以支援 VoiceXML 瀏覽器的跨來源資料請求。W3C 認為這不應該限制在 VoiceXML 而是一般的機制,因此將提案移到另一份實作備忘錄。幾個主要的瀏覽器廠商透過 W3C 的 Web 應用程式工作小組正式的將該備忘錄改寫為 W3C 工作草案並以推動成為 W3C 推薦標準為目標。

CORS vs JSONP
跨域资源共享(CORS)是 JSONP 模式的現代版。與 JSONP 不同,CORS 除了 GET 请求方法以外也支援其他的 HTTP 请求。用 CORS 可以讓網頁設計師用一般的 XMLHttpRequest,這種方式的錯誤處理比 JSONP 要來的好。另一方面,JSONP 可以在不支援 CORS 的老舊浏览器上運作。現代的瀏覽器都支援 CORS。

參見

  • 容許任何來源存取的Web服務列表

*[https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS HTTP访问控制(CORS)]

参考文献
外部連結
*[http://www.w3.org/TR/cors/ W3C 工作草案]
*[https://web.archive.org/web/20100527153021/https://developer.mozilla.org/En/HTTP_access_control 使用指引]
*[http://enable-cors.org/ 推廣 CORS 的網站]

评论 (0)

  • 还没有评论,来抢沙发吧。