CORS
是“Cross-Origin Resource Sharing”(跨源资源共享)的缩写。CORS 允许网页上的脚本从其他域请求资源。出于安全原因,大多数Web 浏览器默认会阻止此类请求。
网页可以从另一个域请求资源——前提是请求来自HTML。例如,<head>部分可以引用其他域中的资源,例如CSS文件、字体和JS文件。示例包括 Google Analytics 脚本、jQuery库以及托管在另一台服务器上的字体。同样,<body>也可以从CDN或其他域请求图像。HTML 中的跨源资源请求不需要 CORS 权限。
当脚本或iframe元素发起跨源请求时,就需要 CORS。例如,AJAX方法会在页面加载完成后运行,因此无法从另一个域请求资源。CORS 会覆盖浏览器的这一默认设置,使请求能够通过。
CORS 通过“访问控制”HTTP标头实现。服务器管理员可以添加或修改响应标头;当网页被访问时,这些标头会发送到客户端的浏览器。这些设置可以应用于Apache和IIS服务器,并且可以针对特定网站,也可以应用于整个服务器。以下是常见的请求标头和响应标头:
CORS 请求标头:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
CORS 响应标头:
- Access-Control-Allow-Origin
- Access-Control-Allow-Methods
- Access-Control-Expose-Headers
CORS 示例
如果 techterms.com 上的脚本使用 GET 操作从 sharpened.com 请求资源,它可能会发送以下请求标头:
Origin: https://techterms.com
Access-Control-Request-Method: GET
要允许该请求,sharpened.com 可能会返回以下标头:
Access-Control-Allow-Origin: https://techterms.com
Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin可以设置为特定域,也可以使用星号 (*) 设置为通配符。通配符设置允许来自所有域的跨源资源请求,这可能会带来安全风险。Access-Control-Allow-Methods可以设置为 PUT、POST、DELETE 及其他方法,也可以使用通配符 (*) 设置,以允许所有方法。
测试你的知识