位置: 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)

  • 可能不那么完美,却因真实而美丽。(不可能那么可爱gl)

    可能不那么完美,却因真实而美丽。(不可能那么可爱gl)

  • win11按w弹出小组件怎么关闭(windows 11小组件)

    win11按w弹出小组件怎么关闭(windows 11小组件)

  • 网易云的收藏歌单能取消吗(网易云的收藏歌单怎么取消)

    网易云的收藏歌单能取消吗(网易云的收藏歌单怎么取消)

  • 一加七和pro有啥区别(一加七和pro的区别)

    一加七和pro有啥区别(一加七和pro的区别)

  • 怎样让钉钉和其他应用同时使用(怎样让钉钉和其他人同步)

    怎样让钉钉和其他应用同时使用(怎样让钉钉和其他人同步)

  • 辅助微信号有什么风险(辅助微信号有什么区别)

    辅助微信号有什么风险(辅助微信号有什么区别)

  • dns的主要作用是什么(dns的作用是什么)

    dns的主要作用是什么(dns的作用是什么)

  • 荣耀v20超级快充失灵(荣耀v20超级快充图标)

    荣耀v20超级快充失灵(荣耀v20超级快充图标)

  • nova7pro支持反向充电吗(华为nova7pro反向充电在哪里开启)

    nova7pro支持反向充电吗(华为nova7pro反向充电在哪里开启)

  • 手机音响进水了怎么办有杂音滋滋的(手机音响进水了怎么办)

    手机音响进水了怎么办有杂音滋滋的(手机音响进水了怎么办)

  • 移动办卡人脸识别不通过(移动办卡人脸识别无身份信息)

    移动办卡人脸识别不通过(移动办卡人脸识别无身份信息)

  • 苹果6splus充不进去电怎么回事(苹果6splus充不进去开不了机)

    苹果6splus充不进去电怎么回事(苹果6splus充不进去开不了机)

  • 抖音申诉要多久才看到回复(抖音申诉要多久审核通过)

    抖音申诉要多久才看到回复(抖音申诉要多久审核通过)

  • 怎样登别人qq别人不知道(怎么样登别人qq)

    怎样登别人qq别人不知道(怎么样登别人qq)

  • 主机打开了显示器没信号的原因(主机打开了显示屏没反应)

    主机打开了显示器没信号的原因(主机打开了显示屏没反应)

  • airpods不用会耗电吗(airpods不用了会自动关闭吗)

    airpods不用会耗电吗(airpods不用了会自动关闭吗)

  • 华为杀进程怎么处理(emui杀进程)

    华为杀进程怎么处理(emui杀进程)

  • 三星韩版和国行的区别(三星韩版和国行信号一样不)

    三星韩版和国行的区别(三星韩版和国行信号一样不)

  • vivoz3有没有hifi音质(vivoz3有没有红外线功能)

    vivoz3有没有hifi音质(vivoz3有没有红外线功能)

  • 动态规划的基本要素(动态规划的基本步骤)

    动态规划的基本要素(动态规划的基本步骤)

  • 森然声卡怎么调试(森然声卡怎么调唱歌才好听)

    森然声卡怎么调试(森然声卡怎么调唱歌才好听)

  • 怎样关闭拼多多桌面悬浮窗(怎样关闭拼多多快捷支付绑定的银行卡)

    怎样关闭拼多多桌面悬浮窗(怎样关闭拼多多快捷支付绑定的银行卡)

  • Win11提示错误代码0x204怎么办? win11远程桌面连接问题的方法(错误代码11-1114)

    Win11提示错误代码0x204怎么办? win11远程桌面连接问题的方法(错误代码11-1114)

  • dotnetfx.exe是什么进程可以终止吗(dotnetfx2.0)

    dotnetfx.exe是什么进程可以终止吗(dotnetfx2.0)

  • 所得税结转本年利润
  • 小规模纳税人收入是含税还是不含税
  • 工资申报是当月申报当月的吗
  • 如何查询继续教育证书
  • 扣非净利润为什么比净利润低
  • 无金额的合同印章有效吗
  • 建筑工程公司收入成本怎么结转
  • 购买车辆交纳的费用
  • 旅客运输进项税可以加计抵减么
  • 跨月的增值税普通发票开错了怎么办
  • 记账凭证上的摘要每行都要写吗
  • 运输费用和保险费用会计分录
  • 公司交的物业费入什么科目
  • 招待费税前扣除是什么意思
  • 租赁厂房发生的改造装修费用
  • 产品成本的计算公式
  • 环境保护税由什么部门负责征收管理
  • 电子承兑到期收款怎么做账务
  • 定额发票存根联丢失如何处罚
  • 广告费发票收到但是不抵扣怎么做账?
  • 暂估运费成本的账务处理
  • 安装设备领用原材料应该用成本还是公允
  • 公司年检需要什么资料
  • 房子转租扣钱吗
  • 造价咨询暂定级能接业务吗
  • 跨年度的暂估入库账务处理
  • 操作系统不同
  • 退回多扣的社保费给员工,怎样做会计分录?
  • u启动怎么装机
  • searchnav.exe - searchnav是什么进程 有什么用
  • 收到某公司的钱的会计分录
  • PHP:stream_get_meta_data()的用法_Stream函数
  • 代理业务资产的意思
  • win7纯净版系统
  • 2021前端面试题目100及最佳答案
  • 有关预收账款的会计科目
  • 【深度学习】datasets.ImageFolder 使用方法
  • 上年度固定资产少入账了怎么办?
  • 成本核算的会计处理
  • 帝国cms使用手册
  • 海关双抬头发票公司名可以更改吗
  • 劳务公司是怎么运作的
  • 外购存货的初始成本由买价加采购费用构成
  • 交易性金融资产的账务处理
  • 房产税的政策依据
  • 公司购入的财务会计分录
  • 企业迁移税务如何办理
  • 中级会计考试时间
  • 进项转出做账做什么会计
  • 支付给劳务人员劳务费需缴纳印花
  • 个人承包工程如何缴纳税款
  • 商品降价如何进行投诉
  • mysql local-infile
  • mysql修改版本号
  • 目前默认系统%1
  • 快速释放剪贴蒙版快捷键
  • 安卓设备连接苹果设备
  • 设置自动清理缓存电脑
  • 用户账户限制
  • win10系统设备管理器没有蓝牙
  • win7和xp文件共享
  • win7没有媒体功能
  • 如何解决windows资源管理器已停止工作
  • win8.1 安装ie10
  • win10开启预览
  • perl计算时间差
  • Node.js中的事件循环是什么
  • 大家看的是什么
  • python输入错了怎么办
  • nodejs基础教程
  • 怎么检测python
  • 深入理解计算机系统
  • android零基础
  • js的scrolltop
  • android software
  • Python回调函数注册类型不匹配
  • python爬虫抓取数据的步骤
  • 社保欠费税务催缴
  • 河南省个人无犯罪证明书
  • 南京市国家税务局溧水分局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设