跨域问题来源于浏览器的同源策略。客户端和服务端不同IP不同端口都算跨域。
springboot解决跨域有cros,配置就是那几项。
如果把服务端程序部署在nginx上,在nginx 也可以解决,服务端和nginx只用写一个即可,
server
{
listen 3002;
server_name localhost;
location /ok {
proxy_pass http://localhost:3000;
# 指定允许跨域的方法,*代表所有
add_header Access-Control-Allow-Methods *;
# 预检命令的缓存,如果不缓存每次会发送两次请求
add_header Access-Control-Max-Age 3600;
# 带cookie请求需要加上这个字段,并设置为true
add_header Access-Control-Allow-Credentials true;
# 表示允许这个域跨域调用(客户端发送请求的域名和端口)
# $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号
add_header Access-Control-Allow-Origin $http_origin;
# 表示请求头的字段 动态获取
add_header Access-Control-Allow-Header
}
}
值得一提的是,客户端如果要在跨域请求中携带cookie时,客户端发起请求要配置withCredentials=true,但如果配置了此参数,服务端 Access-Control-Allow-Origin 就不能是 *,所以上边nginx Access-Control-Allow-Origin没有写*。
Access-Control-Allow-Origin 是客户端请求来源,可以指定路径配置。
假设前端程序部署在172.20.0.206nginx上,监听80端口路由到前端。
服务端配置的Access-Control-Allow-Origin:http://172.20.0.206, 就可以访问正常访问了。
作者:科氏加速度