IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> web运维:跨域(NGINX跨域配置为例) -> 正文阅读

[系统运维]web运维:跨域(NGINX跨域配置为例)

跨域在现在的web开发中,已经 是一个很常见的场景了,作为运维,也是一个应该掌握的知识点

欢迎关注 龙叔运维 (公众号)

1、什么是跨域:

比较官方的解释:

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

什么意思呢? 就是你浏览器打开的网页? http://aaa.bbb.com,你在这个web页面发起的接口请求的目标地址的协议(http),域名(aaa.bbb.com),端口(80)只要有一个变了,那就是跨域

2、常见跨域的业务场景

在系统业务实现过程中,必然会有各种各样的场景遇到跨域问题,例如下面这些:

A、前端页面调用第三方后端接口

其实这是不合理的,正常的做法应该是自己的前端调自己的后端,后端去调用别的系统的接口,然后把数据返回给前端。

B、微前端场景

这种场景一般出现在大公司,一个大平台里面每个功能模块都会有单独的团队开发一个独立的web系统,有单独的域名每个集成到大平台的web系统都需要配置跨域,不然大平台就没法正常使用

3、跨域配置

跨域的配置一般在被跨域访问的一段配置,跨域配置会作为响应请求头(response header)返回给浏览器,告诉浏览器自己对跨域的配置

这里是以NGINX的配置为例的,你可以在kong网关配置,可以在项目代码后端配置,但是跨域的配置都是类似的

3.1、Access-Control-Allow-Origin

Access-Control-Allow-Origin的字面意思,直译一下:访问控制允许来源

显而易见,这是被访问的服务通过response header中的Access-Control-Allow-Origin告诉浏览器,哪些域名作为源可以跨域访问我

如aaa.test.com 去跨域访问 bbb.test.com 的接口, 那么 bbb.test.com服务就需要配置跨域:

Access-Control-Allow-Origin:aaa.test.com

或者也可以直接配置允许所有网站跨域访问自己,但是不安全

Access-Control-Allow-Origin:*

如果目标服务没有配置对Access-Control-Allow-Origin,而去跨域访问,则会有如下报错:

no 'access-control-allow-origin' header is present on the requested resource


3.2、Access-Control-Allow-Methods

然而跨域的配置不仅仅只需要配置一个配置项,往往都是多个配置项一起协同配置的

Access-Control-Allow-Methods的字面意思,直译一下:访问控制允许的方法

这是被访问的服务通过response header中的Access-Control-Allow-Methods告诉浏览器,跨域访问所被允许的请求方法

一般配置如下,允许所有方法:

Access-Control-Allow-Methods:*

或者

Access-Control-Allow-Methods:POST,PUT,GET,OPTIONS,DELETE

如果跨域请求的方法不被允许,则会报错如下:

content-type is not allowed by access-control-allow-headers in preflight response.


3.3、Access-Control-Allow-Headers

Access-Control-Allow-Headers的字面意思,直译一下:访问控制允许的请求头

这是被访问的服务通过response header中的Access-Control-Allow-Methods告诉浏览器,跨域访问世对方允许携带的header(request header)

一般配置为*就可以了,当然如果有安全需求,则根据具体情况配置:

Access-Control-Allow-Headers:*

如下request header中携带了不在被调用服务允许携带的header,则报错:

request header field content-type is not allowed by access-control-allow-headers in preflight response.


3.4、Access-Control-Allow-Credentials

Access-Control-Allow-Credentials的字面意思,直译一下:访问控制允许证书

因为有的跨域请求访问需要携带cookie进行认证,所以就需要设置为true

(如ajax跨域请求,通过设置?withCredentials: true?,发送Ajax时,Request header中便会带上 Cookie 信息。)

Access-Control-Allow-Credentials:?true

否则就会报错如下:

在这里插入图片描述


3.5、Access-Control-Max-Age

Access-Control-Allow-Credentials的字面意思,直译一下:访问控制最大年龄

Access-Control-Max-Age用来指定本次预检请求的有效期,单位为秒,在此期间不用发出另一条预检请求(OPTION)。

例如:

Access-Control-Max-Age:1800,表示隔30分钟才发起预检请求,这其中则不需要再发

4、跨域其他注意点

4.1、OPTION请求

如果OPTION请求一直失败,最好给OPTION请求添加返回204的配置

如NGINX中可以加入下面内容:

if ($request_method = OPTIONS) {
? ? ? return 204;
}

4.2、带Cookie的跨域

当withCredentials设置为true时,后端Access-Control-Allow-Origin需要指定域名,不能使用*号;

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:56:36  更:2022-10-22 21:59:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:33:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码