跨域资源共享CORS的那些事(二)

  • Post author:
  • Post category:其他




跨域资源共享CORS的那些事(二)

最近在为高性能开源API网关apisix写跨域插件,发现该功能对协议要求要比较熟悉,借此机会重新复习下跨域协议,以及简要写下跨域功能的设计



定义


跨来源资源共享(Cross-Origin Resource Sharing(CORS))是一种使用额外HTTP标头来让目前浏览网站的user agent能获得访问不同来源(网域)服务器特定资源之权限的机制。当user agent请求一个不是目前文件来源——来自于不同网域(domain)、通信协定(protocol)或通信端口(port)的资源时,会建立一个跨来源HTTP请求(cross-origin HTTP request)。

基于安全性考虑,浏览器和WebView发出的HTTP请求会有限制。例如,XMLHttpRequest及Fetch皆遵守同源政策(same-origin policy)。这代表网络应用程序所使用的这些API只能请求来自和应用程序相同网域的HTTP资源,除非使用了CORS标头。



哪些请求会使用到CORS?


  1. 使用XMLHttpRequest或Fetch API进行跨站请求,如前所述。
  2. 网页字体(跨网域CSS的@font-face的字体用途),所以服务器可以部属TrueType字体并限制仅让被许可的网站进行跨站加载使用。

    WebGL纹理。
  3. 以drawImage绘制到Canvas画布上的图形/视频之影格。
  4. CSS样式表(让CSSOM存取)。
  5. 指令码(for unmuted exceptions)



跨域请求详解


CORS需要浏览器和服务器同时支持

。当前桌面和移动浏览器对CORS的支持情况如下:



a、浏览器端支持情况


桌面浏览器:

浏览器 Chrome Edge FireFox IE Opera Safari
支持CORS最低版本 4 12 3.5 10 12 4
  • IE8 和 IE9 通过 XDomainRequest 插件支持CORS,IE10 开始则完全正常支持CORS。
  • Firefox 3.5 支持跨域 XMLHttpRequests 与 We



版权声明:本文为qq_15437667原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。