nginx 解决跨域问题——(CORS)

news2025/7/8 22:11:08

跨域前世今生

跨域是一种安全机制。 在开发阶段与上线前就必须提前考虑到的安全问题并且采取合适的手段去避免这个问题带来的程序错误。
![aHR0cDovL2ZpbGUubWljcm9hbnN3ZXIuY24vYmxvZ181M18xLnBuZw.png](https://img-blog.csdnimg.cn/img_convert/1803660cf39d7222197f9bd7ae587575.png#averageHue=#f5dbdb&clientId=u5a77c99e-8b88-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u75149e36&margin=[object Object]&name=aHR0cDovL2ZpbGUubWljcm9hbnN3ZXIuY24vYmxvZ181M18xLnBuZw.png&originHeight=50&originWidth=731&originalType=binary&ratio=1&rotation=0&showTitle=false&size=16741&status=done&style=none&taskId=u87fb9500-7ae6-4758-969c-3a0efc9017b&title=)
跨域并不会阻止请求的发出,也不会阻止请求的接受,跨域是浏览器为了保护当前页面,你的请求得到了响应,浏览器不会把响应的数据交给页面上的回调,取而代之的是去提示你这是一个跨域数据。

常见跨域解决方案

只简述的说明,具体可以面向搜索引擎编程

反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

拿比较常见的web服务器来说配置如下

server{
    listen 80;
    server_name 127.0.0.1;
  	# 前端静态存放
    root /data/www/test1;
  	# 接口前缀
    location ~ ^/api {
        proxy_pass http://www.sdmtech.cn;
    }
 }

JSONP

SONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的

目前使用较多的场景在于三方SDK与服务器通信,其他时候使用频率不是很高,使用较多的是下面要讲的CORS

CORS

跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它源(域、协议和端口),使得浏览器允许这些 origin 访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。
跨源 HTTP 请求的一个例子:运行在 https://domain-a.com 的 JavaScript 代码使用 XMLHttpRequest 来发起一个到 https://domain-b.com/data.json 的请求。
出于安全性,浏览器限制脚本内发起的跨源 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一个域请求 HTTP 资源,除非响应报文包含了正确 CORS 响应头。

相关解析

Access-Control-Allow-Origin

响应标头指定了该响应的资源是否被允许与给定的来源(origin)共享。

语法

Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: <origin>
Access-Control-Allow-Origin: null

Access-Control-Allow-Headers

响应首部 Access-Control-Allow-Headers 用于 preflight request(预检请求)中,列出了将会在正式请求的Access-Control-Request-Headers 字段中出现的首部信息。

语法

Access-Control-Allow-Headers: <header-name>[, <header-name>]*
Access-Control-Allow-Headers: *

Access-Control-Allow-Methods

响应首部 Access-Control-Allow-Methods 在对 preflight request.(预检请求)的应答中明确了客户端所要访问的资源允许使用的方法或方法列表。

语法

Access-Control-Allow-Methods: <method>, <method>, ...

NGINX配置解析

此种配置是 NGINX 流量转发到服务中

server{
    listen 80;
    server_name server1.example.com;
    location ~ .*$  {
      	# 允许所有源 并且总是
        add_header Access-Control-Allow-Origin '*' always;
      	# 允许通过所有header
        add_header Access-Control-Allow-Headers '*';
      	# 允许通过所有的方法
        add_header Access-Control-Allow-Methods '*';
      	# 响应头表示是对请求的响应暴露给页面
        add_header Access-Control-Allow-Credentials 'true';
      	# 如果请求为 OPTIONS 返回204状态码
        if ($request_method = 'OPTIONS') {
            return 204;
        }
        .......
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电磁场的变化方式 工程电磁场 P27

小小纪念一下 我们要注意 我们不研究瞬态过程&#xff0c;只关心稳态过程 瞬态过程的长短取决于电路的结构还有伏安特性&#xff0c;只要我们的激励是周期的&#xff0c;如果是一个周期性的信号&#xff0c;可以分解成一系列的正弦分量&#xff0c;对于我们的电磁场也一样 如…

嵌入式学习之Linux驱动:IO模型(1)概览

文章目录什么是IO呢&#xff1f;IO执行过程IO模型引入IO模型的种类阻塞IO非阻塞IOIO多路复用信号驱动IO异步IO什么是IO呢&#xff1f; IO的英文全称是input和output&#xff0c;翻译过来就是输入和输出。 在冯诺依曼结构中&#xff0c;将计算机分成为5个部分&#xff1a;运算器…

太阳能电池板自动清洗机器人的制作分享

本文素材来源于宁夏大学 作者&#xff1a;李伟荣、李学辉、金茹芳、沙小平 指导老师&#xff1a;康彩、张冬 一、执行总结 1.1项目概述 在“十三五”发展的大形势下&#xff0c;由于现在国家大力发展清洁能源&#xff0c;而太阳能发电受到了很大重视&#xff0c;但是目前并没…

Cartesian product

In mathematics, specifically set theory, the Cartesian product of two sets A and B, denoted A  B, is the set of all ordered pairs (a, b) where a is in A and b is in B.[1] In terms of set-builder notation, that is {\displaystyle A\times B{(a,b)\mid a\in …

线性模型-优化方法及推导过程

本文包含大量不严谨的公式写法&#xff0c;只是推式子时候打草记录一下… 线性模型(Linear Model)是机器学习中应用最广泛的模型&#xff0c;指通过样本特征的线性组合来进行预测的模型。给定一个DDD维的样本特征的线性组合来进行预测的模型&#xff0c;给定一个DDD维样本x[x1,…

接口自动化测试(Python+Requests+Unittest)

(1)接口自动化测试的意义、前后端分离思想 接口自动化测试的优缺点&#xff1a; 优点&#xff1a; 测试复用性。 维护成本相对UI自动化低一些。 为什么UI自动化维护成本更高&#xff1f; 因为前端页面变化太快&#xff0c;而且UI自动化比较耗时&#xff08;比如等待页面元素的…

回眸 2022,展望 2023

回眸 2022&#xff0c;展望 2023 回眸 2022 先进行回眸吧&#xff01;2022 感觉过得太快了&#xff0c;就好像昨天刚刚过年一样&#xff01;但是时间不会欺骗任何人&#xff0c;过了多久就是多久&#xff01;它不会管你是因为什么而耽误&#xff0c;也不会管你是因为什么而荒…

浏览器跨域-原因及解决方案

1.浏览器跨域 如何判断一个浏览器的请求是否跨域&#xff1f; 在A地址&#xff08;发起请求的页面地址&#xff09;向B地址&#xff08;要请求的目标页面地址&#xff09;发起请求时&#xff0c; 如果A地址和B地址在&#xff1a; 协议 域名 端口 不全相同&#xff0c;则说明请…

太神了!开源大佬的SpringBoot+微服务架构笔记,一般人真肝不出来

时间飞逝&#xff0c;转眼间毕业七年多&#xff0c;从事 Java 开发也六年了。我在想&#xff0c;也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试…

Category (mathematics)

In mathematics, a category (sometimes called an abstract category to distinguish it from a concrete category) is a collection of “objects” that are linked by “arrows”. A category has two basic properties: the ability to compose the arrows associatively…

51单片机实训day2——创建Proteus工程以及Proteus基本控件的使用|单片机最小系统电路设计:电源配置 复位电路 晶振电路

以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01; 内 容&#xff1a;Proteus工程创建 学 时&#xff1a;2学时 知识点&#xff1a;熟悉Proteu…

AbstractProcessor相关的API记录

java文件操作相关的两个类&#xff1a; JCTree 树节点、TreeMaker 树节点构建器。 JCTree JCTree的一个子类就是java语法中的一个节点&#xff0c;类、方法、字段等这些都被封装成了一个JCTree子类。 JCTree详细的介绍&#xff1a;抽象语法树AST的全面解析&#xff08;二&…

【数据驱动测试】从方法探研到最佳实践

导读 在自动化测试实践中&#xff0c;测试数据是制造测试场景的必要条件&#xff0c;本文主要讲述了在沟通自动化框架如何分层&#xff0c;数据如何存储&#xff0c;以及基于单元测试pytest下如何执行。并通过实践案例分享&#xff0c;提供数据驱动测试的具体落地方案。 基本…

训练yolo系列+deepsort模式的跟踪器(一):训练deepsort

由于是检测+跟踪模式,因此检测器和跟踪器是分开训练的。本节中我们先手把手的训练deepsort跟踪器。在此要感谢mikel大佬所提供的源码,由于代码更新的比较频繁,各种版本错误和运行错误在本节中会重点说明。mikel-brostrom/Yolov5_StrongSORT_OSNet: Mult-object tracking and…

python之环境切换问题实践总结

前言 这个标题是实践总结&#xff0c;为什么呢&#xff0c;因为这个问题困扰了我整整一个月&#xff0c;都没有解决。现在终于解决了&#xff0c;写一篇文章记录一下&#xff0c;也看看有没有小伙伴遇到一样的问题&#xff0c;或者在我下次还会发生这样的实情事可以第一时间解…

GAMES101 Assignment 3

前言 通过阅读实验提供的代码框架&#xff0c;可以加深对渲染管线的理解。assignment1,2我并没有做&#xff0c;我们课程图形学本来有实验计划&#xff0c;然而老师专门让我们做GAMES101的这个实验&#xff0c;其意义可见一斑。 阅读过程中遇到许多困难&#xff0c;看了许多资…

线性杂双功能PEG试剂Biotin-PEG-Silane,Silane-PEG-Biotin,生物素-PEG-硅烷

英文名称&#xff1a;Biotin-PEG-Silane&#xff0c;Silane-PEG-Biotin 中文名称&#xff1a;生物素-聚乙二醇-硅烷 生物素-PEG-硅烷是一种含有生物素和硅烷的线性杂双功能PEG试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。生物素能与亲和素和链霉亲和素结合&…

多期DID和事件研究法含文献和do代码

多期DID和事件研究法含文献和do代码 1、方法&#xff1a;多期DID 2来源&#xff1a;JDE发表的一篇多期DID和事件研究法相关的文章&#xff0c; 文章名为为"Here waits the bride? The effect of Ethiopias child marriage law"。 3、数据内容&#xff1a;数据包…

钱为什么会贬值?

一、什么是钱贬值&#xff1f; 当我们在谈钱贬值的时候&#xff0c;我们是在说什么&#xff1f; 是指的今天5块钱可以买5个苹果&#xff0c;1个月后5块钱只可以买3个苹果.&#xff08;以商品为评价基准&#xff09; 是指的今天1美元可以换6元人民币&#xff0c;1个月后1美元…

数据库实验5 数据库设计实验

前言&#xff1a;不知道啥原因&#xff0c;最后设计出来少了一个表&#xff0c;无语 实验5 数据库设计实验 1.实验目的 掌握数据库设计基本方法及数据库设计工具。 2.实验内容和要求 掌握数据库设计基本步骤,包括数据库概念结构设计、逻辑结构设计,物理结构设计,数据库模式…