跨域资源共享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?
-
使用XMLHttpRequest或Fetch API进行跨站请求,如前所述。
-
网页字体(跨网域CSS的@font-face的字体用途),所以服务器可以部属TrueType字体并限制仅让被许可的网站进行跨站加载使用。
WebGL纹理。 - 以drawImage绘制到Canvas画布上的图形/视频之影格。
- CSS样式表(让CSSOM存取)。
- 指令码(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 版权协议,转载请附上原文出处链接和本声明。