Nginx 解决 CORS 跨域问题,包括自定义 Header 问题

这问题简直像恶魔一样特喵的~喵喵喵?


参考资料:

前后端分离项目

假设现在前端地址为:b.example.com;接口地址为 api.example.com,且 Nginx 对应配置已搞妥。

编辑 api.example.com 地址的配置文件:

server {
    # 上方是该 Server 相关的端口、root 路径、index 一类设置
    # 这儿设置默认请求允许跨域(建议发布环境指定域名而不是“星”号,如 http://b.example.com)
    add_header Access-Control-Allow-Origin '*';

    location / {
        # 强制 HTTPS 跳转,不需要直接移除
        #if ($scheme = http) {
        #    return 301 https://$host$request_uri;
        #}

        # 根据 SF 里面大佬的解释,如果请求不是 GET 或者特定 POST(指定 Content-Type)时,
        # 浏览器会以 OPTIONS 方式发送一个预请求,
        # 所以在预请求的响应阶段,我们得允许跨域的相关操作
        if ($request_method = 'OPTIONS') {
            # 【必须】,同上说明,建议在发布环境用域名而不是“星”号
            add_header Access-Control-Allow-Origin '*';
            # Allow-Headers 指定允许的自定义请求头,如用户 Token
            add_header Access-Control-Allow-Headers 'App-Token';
            # 经过我的实验这个可以不加(有需要另说)
            # 一般来说在 POST 请求时因为 Content-Type 的原因在本次 OPTIONS 预请求后,
            # 会再发送的 POST 请求,而 POST 请求是可以正常接收的
            add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, PATCH, OPTIONS';
            # 请求是否携带 Cookie,无需要可忽略。有说该设置为 true 时 Allow-Origin 不可为 '*'
            add_header Access-Control-Allow-Credentials true;
            # 这个响应 Content-Type 也是根据需要设置(一般情况可以不用设置)
            add_header Content-Type 'application/json; charset=utf-8';
            # 如下 Content-Length 可忽略,返回状态码根据个人习惯可设置为 200
            add_header Content-Length 0;
            return 204;
        }

        # 因使用 Laravel/Lumen 框架,所以有这句,请删掉不用在意...
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 下方为其它配置...
}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

至天

看心情啦,最好留着自己喝奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值