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

  • 2021淘宝天猫双十一活动什么时候开始(2021淘宝天猫双十一销售额)

    2021淘宝天猫双十一活动什么时候开始(2021淘宝天猫双十一销售额)

  • 苹果13丢了怎么找回(苹果13丢了怎么防止别人看到数据密码)

    苹果13丢了怎么找回(苹果13丢了怎么防止别人看到数据密码)

  • 罗技无线键盘如何重新配对(罗技无线键盘如何恢复出厂设置)

    罗技无线键盘如何重新配对(罗技无线键盘如何恢复出厂设置)

  • ppt讲义模式怎么打印

    ppt讲义模式怎么打印

  • 斗鱼是什么软件(斗鱼是什么软件做的)

    斗鱼是什么软件(斗鱼是什么软件做的)

  • qq的定时说说在哪里(qq的定时说说在哪里找)

    qq的定时说说在哪里(qq的定时说说在哪里找)

  • 微信怎样退群(微信怎样退群不会引起别人注意)

    微信怎样退群(微信怎样退群不会引起别人注意)

  • 5g手机可以用4g流量吗(5g手机可以用4g流量套餐吗)

    5g手机可以用4g流量吗(5g手机可以用4g流量套餐吗)

  • 手机出现无命令怎么办(手机出现无命令怎样开机)

    手机出现无命令怎么办(手机出现无命令怎样开机)

  • 红米k30pro突然没信号(红米k30pro突然没电)

    红米k30pro突然没信号(红米k30pro突然没电)

  • nova6闪存是多少(华为nova6内存和闪存规格)

    nova6闪存是多少(华为nova6内存和闪存规格)

  • 华为手机怎么测网速(华为手机怎么测量身高)

    华为手机怎么测网速(华为手机怎么测量身高)

  • 手机不支持陀螺仪怎么办(手机不支持陀螺仪但是必须要用怎么办)

    手机不支持陀螺仪怎么办(手机不支持陀螺仪但是必须要用怎么办)

  • 苹果se2打电话声音小(苹果se手机打电话声音小怎么回事)

    苹果se2打电话声音小(苹果se手机打电话声音小怎么回事)

  • 苹果11手机尺寸长宽高厘米(苹果11手机尺寸一览表)

    苹果11手机尺寸长宽高厘米(苹果11手机尺寸一览表)

  • 陌陌提现钱多久到账(陌陌提现钱多久到账户)

    陌陌提现钱多久到账(陌陌提现钱多久到账户)

  • tp交换机三种模式区别(tp的交换机怎么样)

    tp交换机三种模式区别(tp的交换机怎么样)

  • 怎么把ipad声音放大(怎么把ipad声音调小)

    怎么把ipad声音放大(怎么把ipad声音调小)

  • ipadair3电池多少毫安的(苹果ipadair3电池容量)

    ipadair3电池多少毫安的(苹果ipadair3电池容量)

  • match函数什么意思(match 函数)

    match函数什么意思(match 函数)

  • 快手附近人都在附近吗(快手附近人都在哪里看)

    快手附近人都在附近吗(快手附近人都在哪里看)

  • vivox20多大运存(vivox20运行内存是4g还是6g)

    vivox20多大运存(vivox20运行内存是4g还是6g)

  • 蜂窝号码是什么意思(蜂窝数据蜂窝号码)

    蜂窝号码是什么意思(蜂窝数据蜂窝号码)

  • 苹果11的耳机是那种(苹果11的耳机是蓝牙的吗)

    苹果11的耳机是那种(苹果11的耳机是蓝牙的吗)

  • word2010添加稿纸设置(word加入稿纸)

    word2010添加稿纸设置(word加入稿纸)

  • 内存卡是sd卡吗(sd储存卡)

    内存卡是sd卡吗(sd储存卡)

  • 荣耀9x有指纹解锁吗(荣耀9x指纹解锁失灵)

    荣耀9x有指纹解锁吗(荣耀9x指纹解锁失灵)

  • 商场购物卡的会员怎么用
  • 只报税不做账有什么后果?
  • 微信支付宝等三方支付平台余额属于货币资金吗
  • 税务中的三费是指什么
  • 差额纳税是什么税
  • 企业专家咨询费标准
  • 加计抵减的税额多长时间
  • 公司承担的社保可以税前扣除吗
  • 房地产企业预收款预缴增值税
  • 固定资产的原价包括
  • 企业计提长期借款的利息
  • 增值税税收返还资料
  • 城建税当月缴纳要计提吗
  • 已抵扣的进项税发票开具红字发票信息表
  • 自产自销税点
  • 2019年水利部
  • 金税盘密码忘记了打客服有用吗?
  • 同一控制下企业合并商誉
  • 分红 实缴比例
  • 保险车辆折旧的计算方法有哪些
  • 新公司值得入职吗
  • 或有负债如何计量
  • 科普笔记本电脑怎样
  • win11怎么录屏游戏
  • php怎么设置中文
  • 销售使用过的汽车会计分录
  • info是什么软件
  • 土建基础是什么意思
  • laravel视频教程
  • 公司法人变更后银行账户怎么变更
  • php7.0新特性
  • netty websocket心跳
  • 贴现息计入什么科目
  • 不动产和无形资产的区别
  • 强制缓存与协商缓存的区别
  • vue3.0动态路由
  • 销售折扣购物卡怎么做账
  • phpcms官网打不开
  • 劳务外经证预缴税款
  • vue开发需要掌握哪些知识
  • 工会经费计提按应付职工薪酬借方还是贷方?
  • 未使用固定资产有哪些
  • 公司不可以销售车辆吗
  • 哪些发票必须备注
  • 增值税征收类型
  • 销项税用转出吗
  • 多交增值税可以不退吗
  • 一般纳税人购进商品的会计分录
  • 当月已付款, 没收到发票怎么做账
  • 以原材料投入资本
  • 金蝶旗舰版的数据怎么在标准版打开
  • 冲减和冲销的会计分录
  • 事业单位职工福利费支出范围
  • 固定资产清理明细账采用什么账簿
  • 息税前利润变动百分比计算公式
  • 建账选用什么会计制度
  • sql查询字段被包含的内容
  • mysql不同数据库不同数据表导入数据
  • sql server中Select count(*)和Count(1)的区别和执行方式
  • 一个分页存储过多的文件
  • mysql安装教程5.5安装好了在哪使用
  • netdrive mac
  • winxp系统安装教程
  • win10打
  • 快速锁定单元格的方法
  • windows8使用教程
  • muamgr.exe - muamgr是什么进程 有何作用
  • win7启动发生异常i/0错误
  • linux用
  • 关于numpy中loadtxt函数的说法
  • javascript高级程序设计电子书
  • nodejs怎么连接mysql
  • monkey命令大全
  • unity3d游戏开发教程
  • 农业银行联行号查询系统官网
  • 烟台税务查询系统网址
  • 东莞国税咨询电话
  • 税收优惠政策有哪些企业
  • 契税完税证明遗失
  • 新开公司交印花税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设