CORS就是跨域吗?

这篇具有很好参考价值的文章主要介绍了CORS就是跨域吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先,跨域的域是什么?

跨域的英文是:Cross-Origin。

Origin 中文含义为:起源,源头,出生地。

在跨域中,"域"指的是一个 Web 资源(比如网页、脚本、图片等)的源头

包括该资源的协议主机名端口号

同源策略中,如果两个资源的域相同,则它们属于同一域,可以自由进行交互和共享数据。

反之,如果两个资源的域不同,就会出现跨域问题

这时就需要特殊的方式来处理,如跨域资源共享(CORS)

那什么是同源策略?

同源策略(Same-Origin Policy)是浏览器中的一项安全机制,用于保护用户的隐私和安全。

它限制了一个网页或者脚本只能从同一个源加载的资源进行访问,而不能访问其他来源的资源。

这样做可以防止恶意网站利用用户身份信息进行跨站请求伪造(CSRF)攻击,保护用户的数据安全。

什么是跨站请求伪造?

跨站请求伪造(CSRF,Cross-Site Request Forgery)是一种网络攻击方式。

在 CSRF 攻击中,攻击者利用已认证的用户身份(例如用户在银行网站上登录后的会话信息)来伪造请求,以执行未经授权的操作。

举个例子:

我登录了银行网站,浏览器根据我的登录信息生成了一个会话令牌,也就是 session token。

但是这个令牌被而恶意网站给拿到了,它拿着我的 token 去服务器发送请求。

就可以把我银行卡里的 29 块八毛五全部转走。

但是如果有同源策略的限制,恶意网站就无法直接发送请求到银行。

我的 29 块八毛五就可以保住。

因为恶意网站的域名与银行网站的域名不同,浏览器会阻止这种抢劫行为。

什么是跨域资源共享(CORS)?

为了防止被面试官笑话,这里一定要知道:

跨域资源共享(CORS,Cross-Origin Resource Sharing)是一种用来解决由于浏览器的同源策略而导致的跨域请求问题的一种机制。

浏览器将 CORS 请求分成两类:

简单请求(simple request)和非简单请求(not-so-simple request)。

什么是简单请求?

只要同时满足以下两大条件,就属于简单请求。

(1)请求方法是以下三种方法之一:
- HEAD
- GET
- POST

(2)HTTP的头信息不超出以下几种字段:
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type:只限于三个值:application/x-www-form-urlencoded、multipart/form-data、text/plain

简单请求的工作流程如下:

1. 浏览器在请求中增加一个 Origin 头部字段,其中包含当前页面的源信息(协议、主机、端口)。

2. 服务器在收到这个请求后,会根据请求中的 Origin 头部信息来判断是否允许该请求。

3. 如果服务器允许该请求,会在响应头部中包含一个 Access-Control-Allow-Origin 头部,"*"表示允许所有来源。

4. 浏览器在收到响应后,决定是否允许页面访问该资源。

什么是非简单请求?

不是简单请求的,就是非简单请求。

非简单请求它非简单在哪?

或者说:

它非简单又能怎么样?

非简单请求在发起正式请求之前,会先发起一个预检请求

什么是预检请求?

预检请求是用于在实际的跨域请求之前进行探测和验证,以确保服务器能够正确处理,预防跨域请求可能会引发的安全性问题。

一句话就是:

我去前面探探路!

CORS就是跨域吗?

只有得到服务器的肯定答复,浏览器才会发出正式的 XMLHttpRequest 请求,否则就报错。


实际 java 开发中的 CORS 解决跨域配置长这样:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 允许所有的URL路径都可以跨域访问
        registry.addMapping("/**")
            // 允许所有来源(即允许任何域名)的请求跨域访问
            .allowedOrigins("*")
            // 允许发送身份验证信息(如cookies、HTTP身份验证或客户端SSL证明)
            .allowCredentials(true)
            // 允许跨域请求的HTTP方法,包括GET、POST、PUT、DELETE和OPTIONS。
            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
            // 预检请求(OPTIONS请求)的有效期,单位为秒
            .maxAge(3600);
    }
}

还有别的方式可以解决跨域问题吗?

有的。

使用 Nginx 部署为同一域。

什么意思呢?

就是说 Nginx 作为唯一域,代理所有服务端,在客户端眼里,只有 Nginx 这一个域,也就不存在跨域问题,由 Nginx 拿到请求再分发给对应服务器。

这里我们就不再展开。

CORS就是跨域吗?


往期推荐:

● 师爷,翻译翻译什么叫AOP

● 翻译,师爷师爷什么叫事务

● 纪念JDBC

● SpringBoot实现动态数据源配置‍

● 聚簇索引、回表与覆盖索引

● Java锁到底是个什么东西文章来源地址https://www.toymoban.com/news/detail-830553.html

到了这里,关于CORS就是跨域吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flask解决cors跨域请求

    CORS的全称是Cross-Origin Resource Sharing  ,有w3c组织制定的,现在这个规范,已经被大多数浏览器支持,处理跨域的需求。 CORS需要后端应用进行配置,因此,这是一种后端跨域的配置方式,这种方式很容易理解,一个陌生的请求来访问你的服务器,自然需要进行授权。。。 (关

    2024年02月12日
    浏览(60)
  • 前端跨域解决方案——CORS

    CORS(跨来源资源共享)是一种用于解决跨域问题的方案。 CORS(跨来源资源共享)是一种安全机制,用于在浏览器和服务器之间传递数据时,限制来自不同域名的请求。在前端开发中,当通过 XMLHttpRequest(XHR)或 Fetch API 发送跨域请求时,如果服务器没有正确配置 CORS,浏览器

    2023年04月27日
    浏览(55)
  • SpringBoot3 CORS跨域访问

    目录 Credentials ​编辑 问题一 问题二 问题三 解决方法一 CrossOrigin,最优的方法  解决方法二 通过Filter 设置HTTP 解决方法三 通过实现WebMvcConfigurer设置HTTP 解决方法四 通过CorsFilter Access-Control-Allow-Headers authorization 问题 解决办法,服务器添加authorization HTTP 协议,需要认真的学

    2024年02月07日
    浏览(61)
  • Django 解决CORS跨域问题的方法

    Cross-Origin Resource Sharing(CORS) 跨域问题,在前后端后离项目, selenium , playweight 自动化测试代码中经常遇到。 而使用 python request, curl, postman 等非浏览器代码发送请求时则不存在这个问题。 浏览器采用了同源保护策略,为了防御恶意攻击,会检查Request消息与Response消息的域

    2024年03月23日
    浏览(34)
  • 快速解决Spring Boot跨域困扰:使用CORS实现无缝跨域支持

    什么是跨域? 跨域(Cross-Origin Issue)的存在是因为浏览器的安全限制,它防止恶意网站利用跨域请求来获取用户的敏感信息或执行恶意操作。浏览器通过实施同源策略来限制网页在不同源之间进行资源访问或交互的情况。当一个网页的协议、域名、或端口与当前页面的协议、

    2024年02月12日
    浏览(55)
  • 前端跨域解决方案之CORS详解

    CORS 是一个 W3C 标准,全称是“跨源资源共享”( Cross-origin resource sharing ),或者通俗地 称为“ 跨域资源共享 ”。它允许浏览器向跨源的服务器,发出 XMLHttpRequest 请求,从而克服AJAX 只能同源使用的限制。 为了保证用户信息的安全,所有的浏览器都遵循 同源策略 。 所谓

    2024年02月08日
    浏览(80)
  • 漏了一个“/”导致的跨域错误(CORS)

    在成功搭建好DRF(Django rest framework)的Blog的backend后,昨天开始搭建Vue3+axios+pinia+element_plus的前台服务. 开始一切顺利,到第一个axios的get处理的时候,出现了错误. axios相关的代码如下:   在Pinia的Store中调用axios.get方法取得Backend端的Tag数据 目前的代码不严谨,没有进行错误处理. 在Ch

    2023年04月21日
    浏览(45)
  • 【Ajax】笔记-设置CORS响应头实现跨域

    CORS CORS(Cross-Origin Resource Sharing),跨域资源共享。CORS是官方的跨域解决方案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持get和post请求。跨域资源共享标准新增了一组HTTP首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源 COR

    2024年02月14日
    浏览(42)
  • 跨域问题详解/django-cors-headers/django-cors-headers源码

    # 以后只要前后端分离项目,都会出现跨域问题,咱们要解决 # 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对

    2024年02月11日
    浏览(41)
  • Spring Boot中解决跨域问题(CORS)

    首先解释什么是跨域,跨域就是前端和后端的端口号不同;会产生跨域问题,这里浏览器的保护机制(同源策略)。 同源策略:前端和后端的协议、域名、端口号三者都相同叫做同源。 我们看一下不同源: VUE:http://localhost:8080 Spring: http://localhost:8081/list 当我们出现跨域问题

    2024年02月06日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包