位置: IT常识 - 正文

nginx跨域(nginx解决跨域问题原理)

编辑:rootadmin
nginx跨域 1.跨域解释1.1 怎么知道我遇到了跨域问题

推荐整理分享nginx跨域(nginx解决跨域问题原理),希望有所帮助,仅作参考,欢迎阅读内容。

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

如果项目没做前后端分离,是不会有跨域问题的。前后端分离的项目中,前端调用后台服务时,报错 No 'Access-Control-Allow-Origin' header is present on the requested resource,你就是遇到了跨域问题。另外,前端调试强烈推荐使用chrome,使用QQ浏览器遇到过跨域访问不了但是不报错的坑爹事件。

1.2 为什么有跨域问题

浏览器的同源策略拒绝了我们的请求。 所谓同源是指,域名,协议,端口相同,浏览器执行一个脚本时同源的脚本才会被执行。如果非同源,那么在请求数据时,浏览器会在控制台中报上面的异常,提示拒绝访问。这是为了同一浏览器打开多个网站时,保护你的A网站登陆信息不被B网站拿去访问A网站,B网站登陆信息同理。

1.3 怎么解决跨域问题

网上的文章对于解决跨域问题的介绍都很详细了。但对于使用Nginx解决跨域大多写的不太详细或者太详细以至于干扰因素太多,看了容易造成误解。这里做个总结。

2.使用nginx解决跨域问题2.1 先明确几个概念首先明确一个概念,前端项目、后端项目、以及nginx,这就是三个server项目,他们只是互相之间交流数据;三个项目都有自己的ip:port组合,哪怕你是在同一台服务器上启动这三个server,他们的port也是不可能有一样的;所以,前端项目,不论访问nginx还是访问后端项目,都会产生跨域问题。2.2 解决跨域问题

以下举例都是项目在同一台机器上,所以IP相同,只以端口区分前端项目(8081)、后端项目(8082)和nginx(8080)。

2.2.1 方法1:在nginx中配置地址重写(或者转发也行)

访问地址以/video_resource开头的都会被这个模块捕获,转发到http://192.168.137.189:8082的后端项目上去。例如此时访问http://192.168.137.189:8080/video_resource/userList/engineer,就会转发到http://192.168.137.189:8082/userList/engineer。访问地址以/js开头的也被这个模块捕获,转发到http://192.168.137.189:8082的前端项目上去。

server{listen 8080;location /resource {rewrite ^/resource/?(.*)$ /$1 break;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.137.189:8082/; # 转发地址}location /js {rewrite ^/js/?(.*)$ /$1 break;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.137.189:8081/; # 转发地址}}nginx跨域(nginx解决跨域问题原理)

此时统一通过nginx访问前后端项目,通过/js标识转发到前端项目,通过/resource标识转发到后端项目。浏览器同源策略记录的就是http://192.168.137.189:8080/,浏览器也只访问这个nginx的8080地址,跨域问题也就得到了解决。

2.2.2 方法2:nginx中添加允许跨域请求头server{listen 8080;add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers X-Requested-With;add_header Access-Control-Allow-Methods GET,POST,OPTIONS;location /resource {rewrite ^/resource/?(.*)$ /$1 break;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.137.189:8082/; # 转发地址}}

这就和不用nginx,直接在后端项目中(tomcat或者自己写的服务端代码)配置允许跨域一样,只不过把允许跨域的配置放在nginx中,这个配置解决了前端项目访问nginx的跨域问题,而nginx访问后端项目不存在跨域问题(不是浏览器,没有同源策略限制)。此时nginx对于后端就相当于一个代理分发服务器。

3.参数解释3.1 Access-Control-Allow-Origin服务器默认是不被允许跨域的。给Nginx服务器配置`Access-Control-Allow-Origin *`后,表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求。3.2 Access-Control-Allow-Headers 是为了防止出现以下错误:

Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

这个错误表示当前请求Content-Type的值不被支持。其实是我们发起了”application/json”的类型请求导致的。这里涉及到一个概念:预检请求(preflight request),请看下面”预检请求”的介绍。

3.3 Access-Control-Allow-Methods 是为了防止出现以下错误:

Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

3.4 给OPTIONS 添加 204的返回,是为了处理在发送POST请求时Nginx依然拒绝访问的错误

发送”预检请求”时,需要用到方法 OPTIONS ,所以服务器需要允许该方法。

4.总结

浏览器的同源策略只记录他访问对象的ip和port,访问其他资源如果还是这个ip:port,就不存在跨域问题,如果不是这个ip:port,就用nginx讲这个ip:port转发到要访问的ip:port,让他仍然访问这个同源策略的ip:port。

参考文献:

https://www.jianshu.com/p/1080014a234f

https://segmentfault.com/a/1190000012550346

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

上一篇:React 面向组件编程(上)(react组件定义)

下一篇:修改Vue项目运行的IP和端口(怎么调试vue项目)

  • 美团优选新人免费领东西在哪儿(美团优选新人免费领杯子咋没找到)

    美团优选新人免费领东西在哪儿(美团优选新人免费领杯子咋没找到)

  • iphone12带红外功能吗(iphone12红外功能)

    iphone12带红外功能吗(iphone12红外功能)

  • 微信怎么用实名认证找回微信密码(微信怎么用实名注册)

    微信怎么用实名认证找回微信密码(微信怎么用实名注册)

  • 对方忙线中对方有记录吗(对方忙线中对方看得到吗)

    对方忙线中对方有记录吗(对方忙线中对方看得到吗)

  • airpods信号经常断断续续(airpods信号不好 可能是手机的问题吗)

    airpods信号经常断断续续(airpods信号不好 可能是手机的问题吗)

  • 最小生成树和最短路径的区别(最小生成树和最小支撑树)

    最小生成树和最短路径的区别(最小生成树和最小支撑树)

  • 关闭超线程可以提升单核性能吗(关闭超线程可以提升降低功耗吗)

    关闭超线程可以提升单核性能吗(关闭超线程可以提升降低功耗吗)

  • zigbee拓扑网的特点(zigbee三种拓扑结构图及各自特点)

    zigbee拓扑网的特点(zigbee三种拓扑结构图及各自特点)

  • 电子墨水屏伤眼睛(电子墨水屏寿命有几年)

    电子墨水屏伤眼睛(电子墨水屏寿命有几年)

  • 华为p30怎么拍月亮(华为p30怎么拍月亮最清楚)

    华为p30怎么拍月亮(华为p30怎么拍月亮最清楚)

  • 淘宝下单怎么留言(淘宝下单怎么留匿名电话)

    淘宝下单怎么留言(淘宝下单怎么留匿名电话)

  • 手机耳机插电脑上能说话吗(手机耳机插电脑声音小怎么解决)

    手机耳机插电脑上能说话吗(手机耳机插电脑声音小怎么解决)

  • 2016cp6878是小米几(2016cp6878是小米什么型号)

    2016cp6878是小米几(2016cp6878是小米什么型号)

  • 拼多多一直不发货会怎么样(拼多多一直不发货怎么申请赔偿)

    拼多多一直不发货会怎么样(拼多多一直不发货怎么申请赔偿)

  • oppo拦截电话在哪里查看(oppo拦截电话在哪里打开)

    oppo拦截电话在哪里查看(oppo拦截电话在哪里打开)

  • btmusic是什么意思(betalentedinmusic什么意思)

    btmusic是什么意思(betalentedinmusic什么意思)

  • 小度怎么打电话(小度怎么打电话怎么设置)

    小度怎么打电话(小度怎么打电话怎么设置)

  • p30手电筒快捷键(华为p30手电筒快捷键)

    p30手电筒快捷键(华为p30手电筒快捷键)

  • 荣耀20i有红外吗(荣耀20i有红外线功能吗?)

    荣耀20i有红外吗(荣耀20i有红外线功能吗?)

  • 大屏手机携带技巧(大屏手机方便携带吗)

    大屏手机携带技巧(大屏手机方便携带吗)

  • 为什么换主题锁屏不变(用了主题锁屏换不了)

    为什么换主题锁屏不变(用了主题锁屏换不了)

  • cat命令  在终端设备上显示文件内容(终止cat命令)

    cat命令 在终端设备上显示文件内容(终止cat命令)

  • python字典中添加新的键值(python字典添加数据)

    python字典中添加新的键值(python字典添加数据)

  • 城建税有没减半
  • 实收资本如何网上转账
  • 合并抵消分录的原理是什么
  • 中小型企业库存的问题及对策
  • 金融企业计提的坏账准备金
  • 合并报表时存货怎么处理
  • 企业破产的费用的承担
  • 小规模个人所得税怎么申报
  • 银行卡收到养老金是什么意思
  • 现金出资可以吗
  • 住房补贴是现金还是转账
  • 当地预缴2%什么时候缴纳
  • 建筑业增值税税率2022
  • 会议费税前扣除标准2021
  • 营业成本包括费用类吗
  • 外国人的纳税人识别号是护照号吗
  • 销售费用中的运输费属于什么科目
  • 劳务公司包工包料的法律法规
  • 税后利润是净利润还是利润总额
  • 事业单位本年度工作小结
  • 设备修理费
  • 产品配件属于什么会计科目
  • bootmgr is missing怎么手动解决
  • 商业一般纳税人税率多少
  • 应交税费的销项税额怎么算
  • 代办退税账务处理
  • 汽车修理厂如何做账
  • PHP:pg_client_encoding()的用法_PostgreSQL函数
  • 用友标准版怎么反结账
  • msstat.exe - msstat是什么进程 有什么用
  • 如何查看电脑型号信息
  • 委托加工的材料成本包括辅助材料成本吗
  • 尚融宝盈(宁波)投资中心(有限合伙)
  • html制作网页教程
  • 来料加工 增值税
  • PyTorch 深度学习实战 |用 TensorFlow 训练神经网络
  • php实现登录功能
  • 金税盘减免税款留抵
  • gmt微调
  • 企业销售固定资产房屋都要交什么税
  • 三方债权债务抵销
  • 发票申请条件
  • 会计损益类科目核算
  • 建筑业先预缴还是先扣税
  • 上季度忘记申报个税了
  • 法人股的利弊
  • 培训公司收取培训费用合法吗
  • 企业所得税年度纳税申报表A类
  • 合同资产和合同履约成本的区别
  • 车船税款
  • 企业所得税中资产计税基础怎么填
  • 收入不足3000
  • 代扣税是不是社保
  • 结构性存款怎么计算收益
  • 固定资产二级明细科目有哪些
  • 销售额是营业额吗?
  • mysql配置文件优化详解
  • mysql格式化日期yyyy/mm/dd
  • 如何实现多条件查询
  • Windows10下mysql 5.7.17 安装配置方法图文教程
  • 如何删除windows media center
  • mac os图片
  • 在bois如何设置C盘启动
  • win8账户
  • windows10周年纪念版
  • macbookair扫描文件怎么弄
  • win7系统连不了蓝牙
  • Linux中的stat命令使用简介
  • jquery操作
  • jquery课程总结
  • json jquery
  • unity 5.4
  • unity中sendmessage
  • javascript的理解
  • 合肥地税局客服电话
  • 考察后多久公示公务员
  • 交通运输业的税率9%和13%
  • 河南个体工商户营业执照年检
  • 南京税务局几点下班?
  • 开票信息哪里查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设