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 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 跨域及其解决方案 -> 正文阅读

[系统运维]跨域及其解决方案

一、何为跨域

1、同源策略

在谈跨域之前,首先来说说同源策略吧;同源策略是浏览器的一种基本的安全功能,其中的源指的就是协议名+域名+端口号,也即只有这三者都相同才是同源的,否则就属于不同源,比如说下面的几个请求:
1. http://www.abc.com:8080
2. https://ww.abc.com:8080
3. http://www.abcd.com:8080
4. http://www.abc.com:8081
5. http://www.abc.com:8080/sds
请求2,3,4和请求1都是不同源的,只有请求5和请求1是同源的。而浏览器的同源策略就是规定不同源之间的不能请求内容,即在源A的环境下不能去获取源B的内容,这是能起到敏感信息保护作用的。例如:某一个黑客在发给别人一个链接的时候,引导别人登录某宝账号,在没有同源策略的情况下,黑客是能够轻松的获取到这个人的某宝的账号密码的(如下图)。
在这里插入图片描述

2、跨域

所谓的跨域,就是指浏览器不能执行其他网站的脚本,也就是上面同源策略导致额原因。
建议阅读此文:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS

二、跨域的解决

此处提供两种常用的方法

1、基于Nginx反向代理

俗话说:计算机行业的所有问题都可以通过增加一个抽象层来解决。既然我们在源A的环境下不能获取源B环境下的资源,那么我们就加一个中间层Nginx,让他来帮我们去源B环境下获取需要的资源然后给到我们(如下图),这样我们就在源A的环境下拿到了源B中的内容了。
在这里插入图片描述

2、配置当次请求允许跨域

添加响应头
?Access-Control-Allow-Origin:支持哪些来源的请求跨域
? Access-Control-Allow-Methods:支持哪些方法跨域
? Access-Control-Allow-Credentials:跨域请求默认不包含cookie,设置为true可以包含
cookie
? Access-Control-Expose-Headers:跨域请求暴露的字段; CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。
? Access-Control-Max-Age:表明该响应的有效时间为多少秒。在有效时间内,浏览器无
须为同一请求再次发起预检请求。请注意,浏览器自身维护了一个最大有效时间,如果
该首部字段的值超过了最大有效时间,将不会生效。

可以结合一下SpringMVC中对于跨域的解决方法:

@Configuration
public class WebConfig extends WebMvcConfigurer{

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
            .allowedOrigins("http://domain.com")
            .allowedMethods("PUT", "DELETE")
            .allowedHeaders("header1", "header2", "header3")
            .exposedHeaders("header1", "header2")
            .allowCredentials(true).maxAge(3600);
    }
} 

以上仅个人的理解,欢迎批评指正

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:36:42  更:2021-08-25 12:38:10 
 
开发: 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/15 11:58:23-

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