
CORS:了解跨域请求的“预检”请求
跨域资源共享 (CORS) 在制作 HTTP 时提出了挑战跨域请求。为了解决这些限制,引入了预检请求作为解决方法。
预检请求说明
预检请求是先于实际请求(例如 GET 或 POST)的 OPTIONS 请求)并用于与服务器协商请求的权限。这些请求包括两个附加标头:
- Access-Control-Request-Method: 指定实际请求的方法。
- Access-Control -Request-Headers: 列出将包含在实际请求中的标头。
配置服务器响应
要处理预检请求,服务器必须使用以下标头进行响应:
- Access-Control-Allow-Origin: 向请求中指定的源授予权限。
- Access-Control-Allow-Methods: 指定实际请求允许的方法。
- Access-Control-Allow-Headers: 列出浏览器允许的标头发送实际请求。
客户端预检实现
为了使预检请求成功,客户端必须包含以下修改:
- 发送 OPTIONS 请求: 在实际请求之前,发送带有相应 Access-Control-Request-* 标头的 OPTIONS 请求。
- 包括必要的内容headers: 确保实际请求包含 Access-Control-Allow-Headers 响应头中指定的所有标头。
示例:
考虑 POST 请求的预检请求,以从远程 URL 获取数据。
预检请求:
- 来源:https://yourdomain.com
- Access-Control-Request-Method: POST
- Access-Control-Request-Headers: X-Custom-Header
服务器响应(假设 POST和 X-Custom-Header 是允许的):
- Access-Control-Allow-Origin:https://yourdomain.com
- Access-Control-Allow-Methods : POST
- Access-Control-Allow-Headers: X-Custom-Header
实际请求:
- 来源: https://yourdomain.com
- Method: POST
- X-Custom-Header: value
通过执行以下步骤,您可以有效地预检 HTTP 请求使用 CORS 克服跨域限制。