本帖最后由 jidesheng6 于 2022-11-8 16:39 编辑
一个是用proxy反向代{过}{滤}理,另外一个就是设置请求头:
六、使用反向代{过}{滤}理解决跨域
假设我们前端服务绑定的域名为:front.site.com 但是我们后端服绑定的域名是:back.site.com
这样的话我们在前端js中,就无法去请求back.site.com的后端服务了,这是因为host不同导致的;所以我们可以通过配置反向代{过}{滤}理服务器来解决跨域问题,我们配置文件可以像下面这样编写:
server{
listen 9001;
server_name front.site.com;
location ^~ /api/{
proxy back.site.com;
}
}
这样配置之后,当我们访问front.site.com/api/xxx的时候,就可以通过反向代{过}{滤}理服务器将请求back.site.com/api/xxxx,从而解决了跨域的问题,绕过了浏览器的同源策略
七、配置header解决跨域
当浏览器在访问跨源服务器时,也可以在跨域服务器上直接设置nginx配置,不需要把实际访问后端的地址改为前端地址,这样可适性更高。
假设前端站点是:fron.site.com 后端地址为:back.site.com
我们在前端站点中使用js访问后端地址,一定会触发同源策略,导致跨域问题的产生。
我们可以进行如下配置:
server{
listen 80;
server_name front.site.com;
add_header 'Access-Control-Allow-Origin' $http_origin;#全局变量获得当前请求origin,带cookie的请求不支持
add_header 'Access-Control-Allow-Credentials' 'true';#为true可带上cookie
add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE';#允许的请求方法
add_header 'Access-Control-Allow-Headers' $http_access_control_request_headers; #允许请求的header,可以为*
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method='OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;#OPTIONS 请求的有效期,在有效期内不用发出另一个预检请求
add_header 'Content-Type' 'text/plain;charset=utf-8';
add_header 'Content-Length' 0;
return 204;#返回204状态码,或者返回200
}
location /{
root /usr/share/nginx/html;
index login.html;
}
}
|