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

  • 三星buds2怎么切歌(三星buds2怎么切换歌曲)

    三星buds2怎么切歌(三星buds2怎么切换歌曲)

  • 如何获取root权限(如何获取root权限华为平板)

    如何获取root权限(如何获取root权限华为平板)

  • 苹果手机不显示蓝牙标志怎么办(苹果手机不显示app图标不见了)

    苹果手机不显示蓝牙标志怎么办(苹果手机不显示app图标不见了)

  • 华为p30pro自动锁屏(华为p30pro自动锁屏黑屏)

    华为p30pro自动锁屏(华为p30pro自动锁屏黑屏)

  • 共享文件夹突然打不开了(共享文件夹突然出现不共享怎么办)

    共享文件夹突然打不开了(共享文件夹突然出现不共享怎么办)

  • 淘宝付款免密码怎么关闭(淘宝支付方式免密码)

    淘宝付款免密码怎么关闭(淘宝支付方式免密码)

  • 淘宝店家电话怎么找(淘宝商家的电话)

    淘宝店家电话怎么找(淘宝商家的电话)

  • 淘宝怎么不让别人看到我的购买记录(淘宝怎么不让别人看到我的浏览记录)

    淘宝怎么不让别人看到我的购买记录(淘宝怎么不让别人看到我的浏览记录)

  • 下划线上文字怎么居中(下划线上文字怎么弄)

    下划线上文字怎么居中(下划线上文字怎么弄)

  • 朋友圈最多翻到多少天(朋友圈最多翻到朋友多少天动态)

    朋友圈最多翻到多少天(朋友圈最多翻到朋友多少天动态)

  • 苹果耳机多长(苹果耳机多长时间出一代)

    苹果耳机多长(苹果耳机多长时间出一代)

  • 拼多多看不了直播怎么回事(拼多多看不了直播怎么解决)

    拼多多看不了直播怎么回事(拼多多看不了直播怎么解决)

  • 苹果手机来微信怎么不显示内容(苹果手机来微信闪光灯怎么设置)

    苹果手机来微信怎么不显示内容(苹果手机来微信闪光灯怎么设置)

  • 开头空两格怎么设置(开头空两格怎么设置wps)

    开头空两格怎么设置(开头空两格怎么设置wps)

  • iphone11突然黑屏关机(iphone11突然黑屏但是能听到声音)

    iphone11突然黑屏关机(iphone11突然黑屏但是能听到声音)

  • 苹果自动扣款怎么退款(苹果自动扣款怎么看购买的是什么)

    苹果自动扣款怎么退款(苹果自动扣款怎么看购买的是什么)

  • 淘宝店家不发货有什么惩罚(淘宝店家不发货可以申请赔偿吗)

    淘宝店家不发货有什么惩罚(淘宝店家不发货可以申请赔偿吗)

  • ios微信分身怎么弄(ios微信分身怎么下载)

    ios微信分身怎么弄(ios微信分身怎么下载)

  • ipad型号a1474是什么型号(ipad型号a1474是air几)

    ipad型号a1474是什么型号(ipad型号a1474是air几)

  • 有什么软件学画画(什么软件学画画比较好)

    有什么软件学画画(什么软件学画画比较好)

  • 苹果十一是5g吗(iphone十一是5g吗)

    苹果十一是5g吗(iphone十一是5g吗)

  • 荣耀20有红外线吗(荣耀70支持红外线功能吗)

    荣耀20有红外线吗(荣耀70支持红外线功能吗)

  • 1080p60fps和30fps区别(1080p30fps与1080p60fps哪个好)

    1080p60fps和30fps区别(1080p30fps与1080p60fps哪个好)

  • 360账户状态异常暂时无法交易(360账户状态异常怎么回事)

    360账户状态异常暂时无法交易(360账户状态异常怎么回事)

  • Linux中的文件与目录操作利器mv命令使用解析(linux系统的文件与目录操作)

    Linux中的文件与目录操作利器mv命令使用解析(linux系统的文件与目录操作)

  • XML入门介绍(xml 入门)

    XML入门介绍(xml 入门)

  • 买赠怎么做会计分录
  • 分公司撤销跨区域转固定资产到总公司
  • 金税三期电子发票怎么领取
  • 个体户交了增值税又开负数发票怎么退税
  • 资产负债表中的货币资金怎么算
  • 印花税没有在我的待办里是不是就不用申报
  • 增值税一般纳税人是什么意思
  • 注册地址与实际办公地址不一致怎么办
  • 上月开票次月开红票销项税额有什么影响?
  • 所得税税负率是多少
  • 增值税税控系统技术维护费计入什么科目
  • 发票上传出现手印怎么办
  • 填报企业所得税资产总额怎么填
  • 企业所得税申报表在哪里打印
  • 母公司代付子公司费用的委托书
  • 金融资产有哪三类代码
  • 收到的进项发票要在多久前认证
  • macos10.15.7补充更新
  • 企业最佳资金结构
  • 购买电子承兑需要给对方开发票吗
  • 火星车百家号
  • 可以跨城租车吗
  • 雷斯岬国家海岸公园有信号吗
  • ajax向php传值
  • 基建 技改
  • ajaxuploadfile
  • 工程师模式有什么用
  • php如何做app
  • mysql事件使用方法
  • vuepress plugin
  • php变量有哪些特殊值
  • 库存商品盘点表
  • 新开企业如何在电子税务局操作
  • 无追索权有哪些类型
  • 银行回单应该如何处理
  • 畜牧业科技公司
  • 帝国cms自动推送插件
  • mysql的查询缓存与redis的区别
  • mongodb简单使用
  • 公司代个人缴纳社保,但不发工资和交税
  • u8已经记账的凭证怎么修改
  • access 运行sql
  • 个人所得税专项扣除2023最新政策
  • 电梯改造税率
  • 固定资产减值核销
  • 设计公司发生的设计费怎么入账
  • 房地产公司房屋租赁管理办法
  • 暂估成本后发票怎么处理
  • 流动资金周转次数计算公式
  • 公司举行活动发言稿范文
  • 商场联营扣点的合作方式
  • 交易性金融资产属于流动资产
  • 农民专业合作社法
  • 消防安装公司属于什么行业
  • 车属于固定资产嘛
  • 公司年初计划都有哪些
  • 苹果正式推送ios
  • shell多进程并行返回值
  • solaris挂载硬盘
  • windows无法删除软件怎么办
  • linux怎么自定义命令
  • windows取消定时任务
  • centos权限不够怎么办
  • win8怎么设置ip地址
  • 如何使用朋友的山姆卡
  • linux系列
  • java gravity
  • linux同名文件
  • python制作爬虫教程
  • jquery调用controller
  • js中遍历的方法
  • js水平垂直居中怎么设置
  • js倒计时算法
  • 沈阳市税务局最新公告
  • 税务副处级竞争上岗笔试题
  • todesk点不了
  • 从事农业种植是干什么的
  • 天津海泰南路属于哪个区
  • 个税系统崩溃
  • 水资源税征收标准2023
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设