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

  • 苹果黑名单是什么意思(苹果黑名单是什么提示)

    苹果黑名单是什么意思(苹果黑名单是什么提示)

  • ipad能打电话吗(苹果手机接打不了电话怎么办)

    ipad能打电话吗(苹果手机接打不了电话怎么办)

  • 淘宝不包邮的东西退货退运费吗(淘宝不包邮的东西拒收退运费吗)

    淘宝不包邮的东西退货退运费吗(淘宝不包邮的东西拒收退运费吗)

  • 电脑可以下载钉钉上课吗(电脑可以下载钉钉软件吗)

    电脑可以下载钉钉上课吗(电脑可以下载钉钉软件吗)

  • 屏蔽电话后打听到的是什么(屏蔽了打电话有反应吗)

    屏蔽电话后打听到的是什么(屏蔽了打电话有反应吗)

  • 苹果手机无法安装(苹果手机无法安装app无法验证其完整性怎么办)

    苹果手机无法安装(苹果手机无法安装app无法验证其完整性怎么办)

  • 微信第二次封什么时候可以自动解除?(微信第二次封号封永久怎么办)

    微信第二次封什么时候可以自动解除?(微信第二次封号封永久怎么办)

  • 微信移出群聊有提示么(微信移出群聊还能看见消息吗)

    微信移出群聊有提示么(微信移出群聊还能看见消息吗)

  • 爱奇艺苹果手机怎么开通vip会员(爱奇艺苹果手机怎么取消自动续费)

    爱奇艺苹果手机怎么开通vip会员(爱奇艺苹果手机怎么取消自动续费)

  • 华为p20pro支持内存卡扩展吗(华为p20pro可以用内存卡吗)

    华为p20pro支持内存卡扩展吗(华为p20pro可以用内存卡吗)

  • 什么是开团什么是拼团(什么是开团什么是参团)

    什么是开团什么是拼团(什么是开团什么是参团)

  • mate30pro不小心掉水里咋办(华为mate30pro掉地上)

    mate30pro不小心掉水里咋办(华为mate30pro掉地上)

  • 嘿siri能用两个人的吗(嘿siri只能一个人)

    嘿siri能用两个人的吗(嘿siri只能一个人)

  • 京东spu是什么意思(京东sop是什么意思)

    京东spu是什么意思(京东sop是什么意思)

  • 手机没有陀螺仪影响导航吗(手机没有陀螺仪能通过下软件)

    手机没有陀螺仪影响导航吗(手机没有陀螺仪能通过下软件)

  • 如何在qq头像上加国旗(如何在qq头像上添加图片)

    如何在qq头像上加国旗(如何在qq头像上添加图片)

  • 为什么我的手机号收不到验证码怎么办(为什么我的手机连接不上wifi)

    为什么我的手机号收不到验证码怎么办(为什么我的手机连接不上wifi)

  • 荣耀9x有没有人脸识别(荣耀9x有没有人工智能YOYO)

    荣耀9x有没有人脸识别(荣耀9x有没有人工智能YOYO)

  • 热点连接成功上不了网(热点链接后不能上网怎么回事)

    热点连接成功上不了网(热点链接后不能上网怎么回事)

  • vivo有5g网络手机吗(vivo手机有5g网络的吗)

    vivo有5g网络手机吗(vivo手机有5g网络的吗)

  • DWG图形图块怎么隐藏(dwg画图)

    DWG图形图块怎么隐藏(dwg画图)

  • 趣步交换密码怎么设置(趣步交换密码怎么取消)

    趣步交换密码怎么设置(趣步交换密码怎么取消)

  • 快手作品审核中怎么办(快手作品审核中是被人举报了吗)

    快手作品审核中怎么办(快手作品审核中是被人举报了吗)

  • 腾讯手游助手如何设置按键?(腾讯手游助手如何退出登录)

    腾讯手游助手如何设置按键?(腾讯手游助手如何退出登录)

  • 公司期权激励如何兑现
  • 企业上缴税费总额怎么算
  • 做了进项税转出后要结转么
  • 财务毛利率是毛利率吗
  • 个人独资企业可以转让股权吗
  • 进项税加计扣除什么时候开始的
  • 外商投资企业购买一辆小轿车自用
  • 应交税费科目核算
  • 财务人士必知消防知识
  • 公司账户转账转错了能退回来吗
  • 公立医院固定资产贷款相关规定
  • 防暑降温费可以用工会经费吗
  • 应征增值税不含税销售额(3%征收率)怎么算
  • 增值税的税额是什么意思
  • 房地产发票冲红的步骤
  • 自产自销流程图
  • 实收资本印花税最新政策2023年
  • 办公低值易耗品的账务处理
  • 增值纳税人类别怎么选
  • 处理固定资产怎么计算
  • 招待费进项税能抵扣嘛
  • 电子发票财务怎么操作
  • 国家统计局一套表平台网址
  • 预计应收账款余额
  • 收到工会经费怎样做账
  • 收到财政厅的补助怎么办
  • 以前年度损益调整结转到哪里
  • 借款人约定分期还款中途可以起诉吗
  • win10修改hosts文件权限
  • 总公司拨给分公司款需要交税吗
  • 增值税专用发票几个点
  • 商品削价要本着既能使企业什么又能使商品扩销的原则
  • 申请专用发票怎么申请
  • 企业所得税申报流程
  • 纳库鲁的念能力
  • 图森在哪
  • 待安置期间生活补助费多少钱
  • 机票报销属于什么费
  • es6面试题promise
  • lvs命令
  • 折旧提取后资金如何处理
  • 6月发5月工资怎么做账
  • 为什么增值税发票不能折叠?
  • 临时工工资会计科目怎么录
  • mongodb的配置文件
  • 发票清单用什么纸打印出来
  • 营业利润是税前利润吗
  • 其他应付款二级明细科目有哪些
  • sql server定时作业
  • sql server恢复
  • 代开发票含税价怎么核算为不含税发票?
  • 一般纳税人登记 核算地址
  • 行政单位与事业单位净资产的比较
  • 收取物业费如何纳税
  • 留底税额怎么形成的
  • 支付稿费需要发票吗
  • 补提折旧以前年度损益调整
  • 对外贸易出口公司
  • 免税货物如何开具发票
  • 并购贷款是固定资产贷款吗
  • 百分百控股收益都是股东的么
  • windows许可证即将过期怎么办知乎
  • win7升级win8.1
  • win10系统预览版
  • xp ie浏览器无法显示网页
  • win10弹出提示
  • libegl.dll病毒
  • centos sh
  • 64位的win10更新安装补丁KB3105213失败总是重复安装该怎么办?
  • debian 单网卡设置双ip
  • 批处理/l
  • 【新功能】“回调特性”的使用教程:
  • 2024年全年计划
  • 你知道什么是布
  • jquery动态设置css
  • 资源税包括哪些
  • 职业年金利息计入哪个科目里面
  • 天津普通发票查询平台
  • 土地增值税发票加计扣除5%年限
  • 税务局怎么知道房屋出租
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设