nginx(七十四)nginx与跨域细节探究

2023-05-16

一   nginx配置跨域

①  知识铺垫

强调:跨域是'浏览器'行为,'不是'服务器行为

++++++++++++++  "跨域的两种解决手段"  ++++++++++++++

1)  利用nginx的'反向代理'解决跨域

  eg: A站点中嵌入'B'站点的资源,但是'B站点'的资源表现为'A站点不同的api'进行转发

  a.wzj.com/index.html --> 嵌入 <img src='a.wzj.com/video/java.mp4'> "同源"

  server_name a.wzj.com

  location /video {
       proxy_paas http://b.wzj.com
  }

2)  前后端'分离'的项目,利用'CORS'解决跨域  --> "常见"

 eg: A站点中嵌入'B'站点的资源,B站点的'资源'明确是B域名的

 a.wzj.com/index.html --> 嵌入 <img src='b.wzj.com/video/java.mp4'>

浏览器的同源策略

合法跨域访问CORS的原理

nginx中与Cookie相关的细节探讨

官方CORS解读

②  nginx配置跨域

server {
    listen       80;
    server_name  www.wzj.com;
    location  / {
      if ($request_method = 'OPTIONS') {
          # Access-Control-Allow-Origin 用于设置允许跨域请求源地址
          # 补充: 预检请求和正式请求在跨域时候'都会验证'
          # 添加'always'参数后,其他的状态码下也有CORS字段了
          add_header Access-Control-Allow-Origin 'http://java.wzj.com' always;
          #为什么写在if里面?因为这里只有预检请求才会检查
          add_header Access-Control-Allow-Headers '*'; 
          add_header Access-Control-Allow-Methods '*';
          add_header Access-Control-Allow-Credentials 'true';
          # 请求为OPTION预检请求时候,给浏览器返回一个'204'状态码
          # 当响应状态码是4XX、5XX时,此时可以加一个always参数
          return 204;
      }
      # 分三类:简单请求、正式请求、非跨域请求
      if ($request_method != 'OPTIONS') {
          add_header Access-Control-Allow-Origin 'http://java.wzj.com' always;
          add_header Access-Control-Allow-Credentials 'true';
      }
      proxy_pass  http://www.wzj.com:8080;
    }
}

重点理解各种Access-Control-Allow响应头以及跨域的报错

++++++++++++++++++  "最佳实践"  ++++++++++++++++++

server {
    listen       80;
    server_name  www.wzj.com;
    location  / {
        add_header Access-Control-Allow-Origin 'http://java.wzj.com' always;
        add_header Access-Control-Allow-Headers '*';
        add_header Access-Control-Allow-Methods '*';
        add_header Access-Control-Allow-Credentials 'true';
        if ($request_method = 'OPTIONS') {
            # 继承了上面的'add_header'
            return 204;
        }
        proxy_pass  http://www.wzj.com:8080;
    }
}

③  设置带通配符子域名的Access-Control-Allow-Origin实现安全跨域资源共享

配置多个域名在map中 只有配置过的允许跨域

nginx通过if或map跨多个域名

④  Access-Control-Allow-Credentials: true 注意事项

1) 如过设置'Access-Control-Allow-Credentials: true'

2) Access-Control-Allow-Origin'必须设置'为'具体'的Origin值,而非 '*' 星号,否则'报错'
'报错'信息:

 The value of the 'Access-Control-Allow-Origin' header \
 in the response must not be the wildcard '*' \
 when the request's credentials mode is 'include'.”

CDN的Vary导致跨域不生效  Vary响应头与缓存的关系

⑤  Access-Control-Expose-Headers注意事项

 

⑥  跨域200报错

1) 如果Origin指定的源,'不在'许可范围内,服务器会返回一个'正常'的HTTP回应;

2) 浏览器发现,这个回应的头信息'没有包含'Access-Control-Allow-Origin字段;

3) 就知道出错了,从而'抛出一个错误',被XMLHttpRequest的onerror回调函数捕获;

注意: 这种错误'无法通过状态码'识别,因为HTTP回应的状态码有可能是'200'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx(七十四)nginx与跨域细节探究 的相关文章

随机推荐

  • VMOS-Pro一款虚拟机app。

    vmos分为两个版本 xff1a 安卓vmos 安卓vmospro 两个的差距在于界面 xff0c 可以说vmospro是重磅更新了 xff0c 让我们了解这一款虚拟机吧 xff01 首先这两款虚拟机都是安卓系统 xff0c 你要ios上红
  • UTM虚拟机-首款iOS虚拟机

    utm虚拟机 xff1b 非越狱安装方法 utm虚拟机是一款ipa为后缀的文件 xff0c 需要爱思助手安装 越狱安装方法 使用uncover越狱后在安装ipa文件 utm介绍 他跟bochs limbo qemo apq等app一样 xf
  • 所有小米机型 解BT+刷Magisk并ROOT+躲避应用ROOT环境检查教程

    废话章节 xff0c 可以不看 时隔一年又回来了 上一篇文章还是在2021年更新的 xff0c 因为学业问题我这是1年1更显然不行 xff0c 那我这次为啥不更新iApp了 xff1f 因为忘得差不多了 我也没想到我有一天回过头来看自己的文
  • 【Minecraft】【ModPC】【我的世界】 我的世界电脑版如何进入网络游戏?

    我的世界电脑版如何进入网络游戏 xff1f 须知 看看就好 xff0c 不要频繁使用modpc xff0c 破坏游戏玩家体验 xff01 不知道为什么Win11会用着用着就会闪退 降级到Win10就什么事也没有 下载 ModPC下载 包含普
  • WindwosServer系统一些设置【网卡驱动修复】【安装UWP应用】【服务器管理取消开机自启动】

    WindwosServer系统一些设置 这里以2022为例 xff1a 第一 网卡驱动丢失修复 此教程只针对I219 V LM网卡 xff01 小知识 xff1a 当电脑没网时 xff0c 将手机和电脑用USB数据线连接 打开设置 xff1
  • dp最长不上升子序列 二分upper lower+贪心

    题意 找出最长不上升子序列长度 再找出最长不下降子序列最大长度 写法运用了指针 减少了代码量 include lt iostream gt include lt algorithm gt using namespace std const
  • 小米平板5ProWIFI(elish)刷ArrowOS

    文章目录 警告下载奇兔刷机系统本体及Recovery 清除数据刷入AospRec开始刷入警告 完成设置输入法 变砖头了qwq又是警告 芝士截图Root方法结尾 警告 此文章只针对 小米平板5Pro Wifi版本 xff08 elish xf
  • 【宝塔】【Windows】【Blessing-Skin】【我的世界】用宝塔Windows搭建皮肤站

    文章目录 前言所需环境相关链接安装宝塔安装步骤访问宝塔同意协议 安装环境安装WNMP添加站点 开始安装皮肤站配置网站配置Nginx URL重写规则 xff08 即 伪静态 xff09 配置PHP 安装皮肤站 一些小调整安装插件常见问题 插件
  • ping的详细过程学习笔记

    pc1 ping pc2 也就是pc1 xff1a 192 168 1 1 ping pc2 xff1a 192 168 1 2 属于同一网段的ping过程 步骤1 ping开始 即后台运行192 168 1 1 ping 192 168
  • FTPClient上传文件内容为空/损坏/缺失

    项目场景 xff1a 项目场景 xff1a 本地项目联调OA系统的时候 xff0c 在发送审批时会传送相关附件 xff0c 该附件由本地项目上传至FTP xff0c OA系统会根据我们提供的路径和文件名去FTP中找到该文件 问题描述 xff
  • Debian9桌面设置

    本文由荒原之梦原创 xff0c 原文链接 xff1a http zhaokaifeng com p 61 665 新安装的Debian9桌面上啥都没有 xff0c 就像这样 xff1a 图 1 虽然很简洁 xff0c 但是用着不是很方便 x
  • 爬虫遇到Cloudflare问题

    网址 xff1a https opensea io rankings sortBy 61 seven day volume 返回代码 xff1a 403 遇到的问题 xff1a Access denied api opensea io us
  • java servlet写的网页猜数小游戏

    几年前 xff0c 用java servlet 写了个猜数的网页小游戏 xff1b 今天看了觉得有点意思 xff0c 贴出来怀旧一下 xff1a 1 代码如下 xff1a package cn wzb import java io impo
  • 安卓-system.img镜像文件过大问题

    3126 5 1SDK预置过多apk时导致编译otapackage时报错处理 xff1a 1 修改prebuilts python linux x86 2 7 5 lib python2 7 zipfile py文件中为ZIP64 LIMI
  • 使用Tesseract-OCR识别图片中的文字并生成双层PDF

    识别图片中的文字并不是很困难 如果自己训练一个文字识别的深度学习程序去识别也是可以 xff0c 但是太费劲 Tesseract OCR是一个开源的文字识别引擎 xff0c 并且支持包括中文在内的多国语言 只要将语言配置上去 xff0c 就可
  • iptables(三)iptables命令详解

    一 语法规则 iptables t table COMMAND chain CONDITION j ACTION t table 是指 39 操作的表 39 filter nat mangle或raw 39 默认使用filter 39 CO
  • 单调栈lllll

    单调栈 xff0c 就是一个栈 xff0c 不过栈内元素保证单调性 即 xff0c 栈内元素要么从小到大 xff0c 要么从大到小 而单调栈维护的就是一个数前 后第一个大于 小于他的数 例题 xff1a P5788 模板 单调栈 例题就是一
  • cmake(六)Cmake添加工程子目录

    重点 xff1a 39 cmake3 39 和 39 make 39 命令 39 输出 39 的 39 深刻解读 39 备注 xff1a 当前阶段暂时不使用 39 IDE 39 工具 先 39 熟悉各指令 39 一 ADD SUBDIREC
  • nginx(二十七)长连接和短连接

    一 长连接和短连接 概念 1 39 HTTP 39 的长连接和短连接 39 本质 39 上是 39 TCP 39 长连接和短连接 2 在 39 HTTP 1 0 39 中默认使用 39 短 39 连接 解读 xff1a 客户端和服务器 39
  • nginx(七十四)nginx与跨域细节探究

    一 nginx配置跨域 知识铺垫 强调 xff1a 跨域是 39 浏览器 39 行为 39 不是 39 服务器行为 43 43 43 43 43 43 43 43 43 43 43 43 43 43 34 跨域的两种解决手段 34 43 4