在项目需求开发的过程中经常会碰到跨域的问题,一般都是在nginx添加配置来解决,其他的web服务器也类似,但是有一种特殊情况,接口跨域POST JSON的时候比较特别,如果只配置下面的规则,还是会存在问题。
# 指定允许跨域的方法,*代表所有
add_header Access-Control-Allow-Methods *;
# 预检命令的缓存,如果不缓存每次会发送两次请求
add_header Access-Control-Max-Age 3600;
# 带cookie请求需要加上这个字段,并设置为true
add_header Access-Control-Allow-Credentials true;
发送POST请求如果存在Body参数,会发送两次请求,所以需要向下面这样配置
location ~ ^/test/ {
# OPTIONS预检命令,预检命令通过时才发送请求
# 检查请求的类型是不是预检命令
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Content-Type *;
add_header Access-Control-Allow-Credentials 'true';
add_header Access-Control-Allow-Headers *;
return 204;
}
rewrite ^/test/(.*) /$1 break;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Content-Type *;
add_header Access-Control-Allow-Credentials 'true';
add_header Access-Control-Allow-Headers *;
access_log /var/log/nginx/test.access.log;
proxy_set_header X-Forward-For $remote_addr;
proxy_set_header X-real-ip $remote_addr;
proxy_read_timeout 300s;
client_max_body_size 2g;
proxy_pass http://xxxx:8080;
}
简单请求和非简单请求是浏览器发出跨域请求的 两种不同的请求方式,我们来了解一下。
发送的请求符合下面的所有情况,就属于简单请求。
不符合简单请求规定条件的请求,就是 非简单请求。
对于简单请求,为了兼容,浏览器会直接将请求发出去。但非简单请求没有兼容的需要,所以浏览器给它加上了严格的复杂机制。
在发出真正的请求前,浏览器会先发一个 OPTION 请求来探探路,这个请求称为 预检请求(preflight)。
预请求以OPTIONS形式发送,当中同样包含域,并且还包含了两项CORS特有的内容
v2ray在香港的完整使用教程Google Cloud部署V2Ray黑屏问题解决方案PHP中使用kafka付費 VPN 比較新加坡VPN免费使用指南土耳其节点VPN指南Clash激活后文件怎么打不开:解决方法大全Brazil 巴西节点 机场推荐 | 解锁用 巴西 SS/SSR/V2ray/Trojan 翻墙节点局域网共享v2ray详细教程亚马逊向人工智能初创公司 Anthropic 投资高达 40 亿美元类似ikuuu的机场:部分支持免费试用2025 新版 Windows 电脑 Clash for Windows 下载和使用教程Clash for Android下载 URL订阅配置详细使用教程 支持V2Ray/Trojan/Shadowsocks(R)协议最新版全能Clash安卓客户端2025 Hiddify 代理工具 iOS版客户端下载(附带美区ID)、安装与配置指南椰皮机场怎么样 – SS 机场推荐 | 中转机场