关于跨域是什么、产生跨域的条件等基础概念,我就不在此记录了。我们直接来看nginx解决跨域的方法。
- 对于简单请求添加响应头
location / {
add_header Access-Control-Allow-Origin *;
}
或者
http {
add_header Access-Control-Allow-Origin *;
}
添加完成后,reload重载nginx配置文件。
可以在网络请求中验证是否加入成功,
- 如果上面方法不管用,那你就要看你的跨域请求是不是
options
了。
MDN的CORS一文中提到:
规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。
如下图产生的options
请求,我设置了响应头,解决了问题。设置方式如下:
location ~ /number/ {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
add_header Access-Control-Allow-Headers X-Requested-With;
return 200;
}
有些文章给的设置会报 来自 CORS 预检通道的 CORS 头 'Access-Control-Allow-Headers' 的令牌 'x-request缺失
,
把我上面的 来自 CORS 预检通道的 CORS 头 'Access-Control-Allow-Headers' 的令牌 'x-reques
添上就能解决这个问题了。