Nginx 代理解决跨域问题分析

2023-11-13

当你遇到跨域问题,不要立刻就选择复制去尝试。请详细看完这篇文章再处理 。我相信它能帮到你。

分析前准备:

前端网站地址:http://localhost:8080

服务端网址:http://localhost:59200 

首先保证服务端是没有处理跨域的,其次,先用postman测试服务端接口是正常的

当网站8080去访问服务端接口时,就产生了跨域问题,那么如何解决?接下来我把跨域遇到的各种情况都列举出来并通过nginx代理的方式解决(后台也是一样的,只要你理解的原理)。

跨域主要涉及4个响应头:

Access-Control-Allow-Origin 用于设置允许跨域请求源地址 (预检请求和正式请求在跨域时候都会验证)

Access-Control-Allow-Headers 跨域允许携带的特殊头信息字段 (只在预检请求验证)

Access-Control-Allow-Methods 跨域允许的请求方法或者说HTTP动词 (只在预检请求验证)

Access-Control-Allow-Credentials 是否允许跨域使用cookies,如果要跨域使用cookies,可以添加上此请求响应头,值设为true(设置或者不设置,都不会影响请求发送,只会影响在跨域时候是否要携带cookies,但是如果设置,预检请求和正式请求都需要设置)。不过不建议跨域使用(项目中用到过,不过不稳定,有些浏览器带不过去),除非必要,因为有很多方案可以代替。

网上很多文章都是告诉你直接Nginx添加这几个响应头信息就能解决跨域,当然大部分情况是能解决,但是我相信还是有很多情况,明明配置上了,也同样会报跨域问题。

什么是预检请求?:当发生跨域条件时候,览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。如下图

 

开始动手模拟:

Nginx代理端口:22222 ,配置如下

复制代码

server {
        listen       22222;
        server_name  localhost;
        location  / {
            proxy_pass  http://localhost:59200;
        }
}

复制代码

测试代理是否成功,通过Nginx代理端口2222再次访问接口,可以看到如下图通过代理后接口也是能正常访问

接下来开始用网站8080访问Nginx代理后的接口地址,报错情况如下↓↓↓

情况1: 

Access to XMLHttpRequest at 'http://localhost:22222/api/Login/TestGet' from origin 'http://localhost:8080' 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 的旧服务器

通过错误信息,我们可以得到是预检请求的请求响应头缺少了 Access-Control-Allow-Origin,错哪里,我们改哪里就好了。修改Nginx配置信息如下(红色部分为添加部分),缺什么就补什么,很简单明了

复制代码

server {
        listen       22222;
        server_name  localhost;
        lo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx 代理解决跨域问题分析 的相关文章

随机推荐

  • 东方财富选股公式

    1 今天的公式是东方财富通可用的 部分公式其它软件 比如通达信 也是可以用的 但不保证完全通用 其它软件 大智慧 通达信 专用公式正在整理中 后续发给大家 2 导入公式过程 打开东财 gt 上方分析菜单 gt 公式管理器 gt 用户公式 g
  • [转]Spring2+struts2+ibatis整合

    Spring2 struts2 ibatis整合 前几天因为需要 将spring2 struts2和ibatis进行了整合 整合过程涉及到很多技巧 因此作为日志保存在此 以便今后查询 各个框架在本项目内的作用 spring2 主要利用ioc
  • zlmediakit使用手册

    1 http web hook地址https github com ZLMediaKit ZLMediaKit wiki MediaServer E6 94 AF E6 8C 81 E7 9A 84HTTP HOOK API 2 api地址
  • ubuntu安装chrome

    又在网上搜索 下面方法可行 复制代码 代码如下 Download google chrome for ubuntu from terminal with the following command For the 32 bit versio
  • linux权限---【600,644,700,755,711,666,777】

    chmod命令详解 使用权限 所有使用者 使用方式 chmod cfvR help version mode file 说明 Linux Unix 的档案存取权限分为三级 档案拥有者 群组 其他 利用 chmod 可以藉以控制档案如何被他人
  • vue 项目在ie浏览器下报错CRIPT5022: SecurityError sockjs.js (1683,5)

    百度爸爸给的解决方法 找到 node modules sockjs client dist sockjs js 2 找到代码的 1605行 try self xhr send payload 注释掉 catch e self emit fi
  • Docker - 13. 容器卷常用操作

    目录 1 宿主和容器之间映射添加容器卷 2 查看容器卷是否挂载成功 3 容器卷 ro 和 rw 读写规则 4 卷的继承与共享 1 宿主和容器之间映射添加容器卷 公式 docker run it privileged true v 宿主机绝对
  • android studio调整代码和菜单栏字体大小

    1 File Settings Appearance Behavior Appearance 右边Override default fonts by not recommended 2 设置代码大小 File Settings Editor
  • 微信小程序组件知识点GET

    1 可滚动视图区域组件scroll view 在滚动 scroll view 时会阻止页面回弹 所以在 scroll view 中滚动 是无法触发下拉刷新事件 onPullDownRefresh 所以如果一定要使用下拉刷新 请使用页面的滚动
  • Clickhouse建表语法、视图语法、数据表DDL(数据定义语言)、数据DML(数据操作语言)...

    参考官网 https clickhouse tech docs zh sql reference statements create 更多详细文档可以参考官网 强烈推荐 1 Clickhouse创建数据库 CREATE DATABASE 该
  • 大年初四晚,Flutter Forward 中国社区直播活动与你不见不散!

    之前我们预告过 2023 年 1 月 25 日 年初四 Flutter 团队将在肯尼亚首都内罗毕举办 Flutter Forward 大会 并同时开启线上直播 本次活动将为展示最新的 Flutter 技术更新 包括一个主题演讲 以及多个技术
  • windows运行Elasticsearch内存占用过大

    运行Elasticsearch 内存占用差不多10G 编辑 elasticsearch 7 17 3 config jvm options文件 修改堆内存大小为4G Xms4g Xmx4g
  • Cisco Packet Tracer下载和安装、构建网络拓扑、配置网络设备、跟踪数据包、查看数据包

    Cisco Packet Tracer下载和安装 构建网络拓扑 配置网络设备 跟踪数据包 查看数据包 下载 一 注册Cisco账户 网址 https www cisco com c en us index html 二 注册Cisco学院的
  • CVPR 2023

    Title InternImage Exploring Large Scale Vision Foundation Models with Deformable Convolutions Paper https arxiv org abs
  • Matlab之colormap, FaceVertexCData

    首先说说colormap 它提供了一种着色方案 我认为它有3个作用 1 Matlab内置多种样式的color map 在任一个Figure中 打开菜单 Edit gt ColorMap 弹出 Colormap Editor 界面 在该界面上
  • linux 驱动——高级字符驱动程序操作

    内容 ioctl 的 ioctl 的系统概念 与用户空间同步的方法 进程休眠 非阻塞IO及与用户间的通信 原型函数 int ioctl struct inode inode struct file filp unsigned int cmd
  • week4作业题_A-DDL的恐惧

    A DDL的恐惧 题目描述 ZJM 有 n 个作业 每个作业都有自己的 DDL 如果 ZJM 没有在 DDL 前做完这个作业 那么老师会扣掉这个作业的全部平时分 所以 ZJM 想知道如何安排做作业的顺序 才能尽可能少扣一点分 请你帮帮他吧
  • 数据结构学习笔记(一)线性表

    文章目录 前言 一 线性表是什么 线性结构 线性表 二 线性表的顺序表示和实现 1 什么是线性表的顺序表示 2 代码实现 总结 参考资料 前言 文章目的在于记录学习数据结构这门课程中遇到的知识点以及难点 为解决或优化实际代码问题打好基础 一
  • 辨析BigDecimal的toString()方法和toPlainString()方法

    辨析BigDecimal的toString 方法和toPlainString 方法 toString toString方法会将BigDecimal的值以科学计数方式的字符串 但是转换成科学计数的方式也是有场景的 并不是所有的值都会转为科学计
  • Nginx 代理解决跨域问题分析

    当你遇到跨域问题 不要立刻就选择复制去尝试 请详细看完这篇文章再处理 我相信它能帮到你 分析前准备 前端网站地址 http localhost 8080 服务端网址 http localhost 59200 首先保证服务端是没有处理跨域的