位置: IT常识 - 正文

Nginx跨域解决方案(nginx跨域配置详解)

编辑:rootadmin
Nginx跨域解决方案

推荐整理分享Nginx跨域解决方案(nginx跨域配置详解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nginx 解决跨域,nginx 解决跨域,nginx解决跨域的常用方案,nginx 跨域,nginx解决跨域问题原理,nginx跨域解决方案 8082,nginx 解决跨域,nginx 解决跨域,内容如对您有帮助,希望把文章链接给更多的朋友!

前置条件: 前端网站地址:http://localhost:4443 服务端网址:http://localhost:9081

当网站8080访问服务端接口的时候会产生跨域的问题

跨域主要设计到4个响应头:

Access-Control-Allow-Origin 用于设置允许跨域请求源地址 (预检请求和正式请求在跨域时候都会验证)Access-Control-Allow-Headers 跨域允许携带的特殊头信息字段 (只在预检请求验证)Access-Control-Allow-Methods 跨域允许的请求方法或者说HTTP动词 (只在预检请求验证)Access-Control-Allow-Credentials 是否允许跨域使用cookies,如果要跨域使用cookies,可以添加上此请求响应头,值设为true(设置或者不设置,都不会影响请求发送,只会影响在跨域时候是否要携带cookies,但是如果设置,预检请求和正式请求都需要设置)。不过不建议跨域使用,除非必要,因为有很多方案可以代替。

跨域请求时会先发送预检请求,浏览器首先会询问服务器,当前网页所在的域名是否在服务器的许可列表中,以及可以使用的请求头和请求方法。若得到肯定的答复,才会发送正式请求Xhr请求,否则报错

报错情况1

Access to XMLHttpRequest at ‘http://localhost:9081/api/’ from origin ‘http://localhost:4443’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No > ‘Access-Control-Allow-Origin’ header is present on the requested resource.

通过错误信息可以很清晰的定位到错误priflight说明是个预请求,CORS 机制跨域会首先进行 preflight(一个 OPTIONS 请求), 该请求成功后才会发送真正的请求。这一设计旨在确保服务器对 CORS 标准知情,以保护不支持 CORS 的旧服务器

解决方案:

server { listen 8080; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:4443'; proxy_pass http://localhost:9081; }}Nginx跨域解决方案(nginx跨域配置详解)

报错情况2

Access to XMLHttpRequest at ‘http://localhost:9081/api/’ from origin ‘http://localhost:4443’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: It does not have HTTP ok status.

通过报错信息提示可以得知,是跨域浏览器默认行为的预请求(option请求)没有收到ok状态码,此时再修改配置文件,当请求为option请求时候,给浏览器返回一个状态码(一般是204)

如果想要每次响应信息都携带头字段信息,需要在最后添加always(经我测试,只有Access-Control-Allow-Origin这个头信息需要加always,其他的不加always也会携带回来)

server { listen 8080; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:4443' always; if ($request_method = 'OPTIONS') { return 204; } proxy_pass http://localhost:9081; }}

报错情况3

Access to XMLHttpRequest at ‘http://localhost:9081/api/’ from origin ‘http://localhost:4443’ has been blocked by CORS policy: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response. 意思就是预请求响应头Access-Control-Allow-Headers中缺少头信息(各种情况会不一样,在发生跨域后,在自定义添加的头信息是不允许的,需要添加到请求响应头Access-Control-Allow-Headers中,以便浏览器知道此头信息的携带是服务器承认合法的)

server { listen 8080; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:4443' always; if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Headers '*'; #为什么写在if里面而不是接着Access-Control-Allow-Origin往下写?因为这里只有预检请求才会检查 return 204; } proxy_pass http://localhost:9081; }}

报错情况4 如果`if ($request_method = ‘OPTIONS’)``中配置了add_header,那么预检请求外部配置均会失效 官方文档

There could be several add_header directives. These directives are inherited from the previous level if and only if there are no add_header directives defined on the current level.

意思就是当前层级无 add_header 指令时,则继承上一层级的add_header。相反的若当前层级有了add_header,就应该无法继承上一层的add_header。

server { listen 8080; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:4443' always; if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:4443'; add_header Access-Control-Allow-Headers '*'; #为什么写在if里面而不是接着Access-Control-Allow-Origin往下写?因为这里只有预检请求才会检查 return 204; } proxy_pass http://localhost:9081; }}

但是由于此写法携带上两个 Access-Control-Allow-Origin ,这种情况也是不允许的 因此修正过的配置如下(其中*可以根据自己的需求替换)

server { listen 8080; server_name localhost; location / { if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:4443'; add_header Access-Control-Allow-Headers '*'; #为什么写在if里面?因为这里只有预检请求才会检查 add_header Access-Control-Allow-Methods '*'; add_header Access-Control-Allow-Credentials 'true'; return 204; } if ($request_method != 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:4443' always; add_header Access-Control-Allow-Credentials 'true'; } proxy_pass http://localhost:9081; }}

或者

server { listen 8080; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:4443' always; add_header Access-Control-Allow-Headers '*'; add_header Access-Control-Allow-Methods '*'; add_header Access-Control-Allow-Credentials 'true'; if ($request_method = 'OPTIONS') { return 204; } proxy_pass http://localhost:9081; }}

参考文章:Nginx 轻松解决跨域问题

本文链接地址:https://www.jiuchutong.com/zhishi/300723.html 转载请保留说明!

上一篇:缺陷修改实践——replace函数的运用|思考?(缺陷修饰)

下一篇:【pytorch】有关nn.EMBEDDING的简单介绍(pytorch nn.parameters)

  • 微博如何知道对方拉黑自己(微博如何知道对方已读信息)

    微博如何知道对方拉黑自己(微博如何知道对方已读信息)

  • 华为如何查看拦截短信(华为如何查看拦截骚扰电话和信息)

    华为如何查看拦截短信(华为如何查看拦截骚扰电话和信息)

  • 美团众包怎么转单(美团众包怎么转单步骤)

    美团众包怎么转单(美团众包怎么转单步骤)

  • 为什么我QQ一点扩列就卡死了(为什么qq有时候点不进去)

    为什么我QQ一点扩列就卡死了(为什么qq有时候点不进去)

  • 抖音的背景虚化在哪里(抖音的背景虚化怎么弄)

    抖音的背景虚化在哪里(抖音的背景虚化怎么弄)

  • outlook是一个什么软件(outlook什么功能)

    outlook是一个什么软件(outlook什么功能)

  • 什么是vnp(什么是自然数)

    什么是vnp(什么是自然数)

  • 我国的手机号为什么是11位数(中国手机号都是+86吗)

    我国的手机号为什么是11位数(中国手机号都是+86吗)

  • 快手注销账号要多久,可以重新注册(快手注销账号要多久才搜索不到)

    快手注销账号要多久,可以重新注册(快手注销账号要多久才搜索不到)

  • 一个手机号只能申请一个健康码吗(一个手机号只能注册一个微博吗)

    一个手机号只能申请一个健康码吗(一个手机号只能注册一个微博吗)

  • 半角模式怎么设置(半角状态怎么切换)

    半角模式怎么设置(半角状态怎么切换)

  • 电脑e盘在哪里打开(电脑e盘在哪里找)

    电脑e盘在哪里打开(电脑e盘在哪里找)

  • iphone11突然没声音(苹果11无缘无故没有声音)

    iphone11突然没声音(苹果11无缘无故没有声音)

  • 小米手机系统固件太大怎么办(小米手机系统固件内存怎么清理)

    小米手机系统固件太大怎么办(小米手机系统固件内存怎么清理)

  • 联想3c服务中心会偷换硬件吗(联想3c服务中心收费标准)

    联想3c服务中心会偷换硬件吗(联想3c服务中心收费标准)

  • 微信最近联系人怎么查(微信最近联系人怎么查找)

    微信最近联系人怎么查(微信最近联系人怎么查找)

  • icloud内存满了会卡吗(icloud内存满了会不会收到邮件)

    icloud内存满了会卡吗(icloud内存满了会不会收到邮件)

  • riotl00是什么型号(rioal00是什么手机)

    riotl00是什么型号(rioal00是什么手机)

  • 抖音送礼物要钱吗(抖音送礼物要钱是真的吗)

    抖音送礼物要钱吗(抖音送礼物要钱是真的吗)

  • 平板能下载ps吗(平板上可以下载ps吗)

    平板能下载ps吗(平板上可以下载ps吗)

  • 显卡插槽有几种(显卡插槽有几种类型)

    显卡插槽有几种(显卡插槽有几种类型)

  • 手机apn怎么设置网速快(手机APN怎么设置好)

    手机apn怎么设置网速快(手机APN怎么设置好)

  • iphone11的基带用哪家的(苹果11的基带)

    iphone11的基带用哪家的(苹果11的基带)

  • 天猫会员店红包怎么用(天猫会员店红包在哪里领)

    天猫会员店红包怎么用(天猫会员店红包在哪里领)

  • qq的耳朵是什么意思(qq中的耳朵是什么意思)

    qq的耳朵是什么意思(qq中的耳朵是什么意思)

  • Win11怎么下载软件?Win11系统下载软件总被阻止解决办法(win11怎么下载手机应用)

    Win11怎么下载软件?Win11系统下载软件总被阻止解决办法(win11怎么下载手机应用)

  • PadExe.exe - PadExe是什么进程 有什么用

    PadExe.exe - PadExe是什么进程 有什么用

  • 自然人电子税务局
  • 用友 项目核算
  • 可供出售金融资产和长期股权投资
  • 工程施工的材料购进计入哪里
  • 汇款退回来的可以不做账吗
  • 建筑行业分包款要分项目扣除吗
  • 企业收到的政府补贴交所得税吗
  • 小企业长期股权投资的核算
  • 子公司注销应收母公司往来款
  • 公司转让会计分录
  • 有限合伙企业中有限合伙人承担责任的方式为
  • 其他流动资产待抵扣进项税额
  • 多付车款退回怎么做账
  • 购买固定资产没付款怎么入账
  • 年中股东红利分录怎么写
  • 进货发票未到怎么做账
  • 职工食堂的费用怎么入账
  • 社保滞纳金是否影响企业信用等级
  • 想要房贷利息抵税怎么办
  • 房地产经常发生的法律问题
  • 初级考试备考计划
  • 季度不超过30万免税分录
  • 有限责任公司的人员构成
  • 外账进销存单据是怎么弄的?
  • win11重置系统保留我的文件
  • linuxssh免密登录
  • php字符串操作函数
  • 跨省经营建筑企业税收政策
  • php反射使用场景
  • 应收票据计提利息应做的会计分录是
  • 销售多余材料的收入会计分录
  • 简述金融会计的主要职能
  • 固定资产减值损失属于什么科目
  • 连接云服务器超时
  • 短视频小程序源码
  • 数据库系统课程学什么
  • 销售多余的材料
  • 20年电赛c题
  • PyTorch深度学习实战 | 基于ResNet的人脸关键点检测
  • 新制度设置了应缴财政款科目原制度设置了什么科目
  • 购置固定资产支付的现金属于投资活动产生的现金流量吗
  • 伪静态html
  • 银行收到几分钱怎么做账
  • 免费学电脑的网站
  • 税收分类口诀
  • 当月发生的费用
  • 如何注册小微商户
  • 资产负债表中没有专项储备怎么填写
  • 烟草的发票可以报销吗
  • mysql组合
  • 幼儿园伙食账目
  • 单位租的个人房子需要采集房产税源吗
  • 企业借款利息如何计算
  • 铁路运输印花税按什么比例交
  • 商品销售企业成本包括
  • 将备份的mdp文件导入数据库
  • win7怎么清除记录
  • Win10 PC/Mobile Creators快速预览版14959今日推送
  • windows vista 版本
  • 进程lsass.exe
  • WUSB54GS.exe - WUSB54GS是什么进程
  • wcesmgr.exe - wcesmgr 是什么进程
  • win10总是弹窗广告
  • windowsxp怎么卸载
  • 安装空调
  • linux 零拷贝技术
  • centos重启动停在4m
  • windows7hosts文件
  • win7小技巧
  • linux拉起进程
  • linux 常见
  • win7电脑无限蓝屏怎么解决
  • python爬虫入门教程
  • jquery实现
  • shell监控端口状态
  • javascript高级程序设计第五版 pdf下载
  • 苏州买房退契税政策2023
  • 陕西省国家税务总局电子税务局
  • 经营数据分析需要学什么
  • 新型墙体材料税率是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设