我们这个系统是 A前端项目 通过访问接口,先跳转到nginx ,再由nginx转发到B项目,A系统、nginx地址、B系统 均属于不同的域名。
nginx跨域配置
server {
listen 80;
server_name xxxx.com;
index index.html;
location /api {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
return 204;}
proxy_http_version 1.1;
#add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,PATCH,OPTIONS';
add_header 'Access-Control-Max-Age' '600' always;
proxy_pass https://xxxxx.com;
}
}
重点是 $request_method = 'OPTIONS’这个配置,我这里是复杂请求,
复杂请求表面上看起来和简单请求使用上差不多,但实际上浏览器发送了不止一个请求。其中最先发送的是一种"预请求",此时作为服务端,也需要返回"预回应"作为响应。预请求实际上是对服务端的一种权限请求,只有当预请求成功返回,实际请求才开始执行。
所以预请求时候需要加上 跨域配置