【前端】浅聊一下跨域

ops/2024/10/20 3:58:27/

文章目录

    • 背景
    • 关于POST,PUT请求跨域检测的步骤
      • 浏览器的处理
      • 小结

背景

一直以来,对于跨域的问题,都是让服务端配置一下允许cors,保证接口能通就行,而没有进一步深究。但是后端非要和你深究这个事情的时候,咱们就跟着gpt来了解一下这玩意儿吧。

关于POST,PUT请求跨域检测的步骤

浏览器通过一系列标准的 HTTP 请求和响应头部信息来确定后端是否支持 CORS(跨源资源共享)。以下是浏览器如何检测 CORS 支持的步骤:

  1. 预检请求(Preflight Request)
    对于复杂的跨域请求(例如,使用方法如 PUT、DELETE,或自定义请求头部的请求),浏览器会先发送一个 预检请求(OPTIONS 请求),以询问服务器是否允许实际的跨域请求。
预检请求示例
http
OPTIONS /resource HTTP/1.1
Host: example.com
Origin: http://example.org
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-Custom-Header
Access-Control-Request-Method: 指定实际请求的方法。
Access-Control-Request-Headers: 指定实际请求中将使用的自定义头部字段。
Origin: 发起请求的源(域名)。
  1. 服务器响应预检请求
    服务器响应预检请求时,会包含 CORS 相关的头部,以告知浏览器是否允许实际请求。
预检响应示例
http
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: http://example.org
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-Custom-Header
Access-Control-Max-Age: 3600
Access-Control-Allow-Origin: 指定允许访问资源的来源。
Access-Control-Allow-Methods: 指定允许的 HTTP 方法。
Access-Control-Allow-Headers: 指定允许的自定义请求头部字段。
Access-Control-Max-Age: 指定预检请求的结果可以缓存的时间(以秒为单位)。
  1. 处理实际请求
    如果预检请求成功,浏览器将发送实际请求(例如,POST 请求):
实际请求示例
http
POST /resource HTTP/1.1
Host: example.com
Origin: http://example.org
Content-Type: application/json
X-Custom-Header: custom-value
{ "key": "value" }
  1. 服务器响应实际请求
    服务器响应实际请求时,也需要包含 CORS 相关的头部:
实际请求响应示例
http
HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.org
Content-Type: application/json
{ "response": "data" }
Access-Control-Allow-Origin: 同样指定允许的来源。

浏览器的处理

成功处理:如果服务器的响应头部中包含允许跨域的相关信息(如 Access-Control-Allow-Origin),并且这些信息与请求的条件匹配,浏览器将允许脚本访问响应数据。
失败处理:如果响应头部缺少必要的 CORS 信息,或信息不符合请求的条件,浏览器将拒绝访问响应数据,并可能抛出 CORS 错误。

小结

浏览器通过预检请求和实际请求的 CORS 相关头部信息来判断后端是否支持 CORS。预检请求用于检查服务器是否允许特定的跨域请求,而实际请求则依赖于服务器的响应头部来决定是否允许访问。


http://www.ppmy.cn/ops/98732.html

相关文章

城乡燃气安全监管平台 打造城市安全防护网

随着城市化进程的不断加快,燃气已成为现代生活中不可或缺的重要能源。然而,传统燃气管理方式的局限性逐渐显现,难以应对日益增长的安全监管需求。为此,旭华智能基于其在智慧城市领域的深厚积累,推出了燃气安全监管物联…

oracle备份策略

一、RMAN热备份 1、查看是否开启归档 archive log list;归档未开启 归档开启方法 – 关闭数据库,重启至mount模式 shutdown immediate startup mount– 开启归档模式 alter database archivelog;– 打开数据库 alter database open;– 检查归档模式是否打开 a…

韩国云主机玩游戏性能怎么样

韩国云主机玩游戏性能怎么样?韩国云主机作为高性能的计算服务,为全球游戏玩家提供了一种新的游戏体验方式。用户所关注的韩国云主机在游戏性能方面的表现,可以从多个维度进行详细评估。下面将具体分析韩国云主机用于玩游戏的性能特点&#xf…

在Mac电脑安装Homebrew并且配置环境变量

问题:如何在Mac电脑安装Home brew? 解决:国外的链接容易下载安装失败,国内的镜像速度快,成功率高,进入终端输入以下你所需的链接命令即可: 国外链接:/bin/bash -c "$(curl -fsS…

计算机毕业设计 在线问诊系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

什么是网络安全?网络安全防范技术包括哪些?

一、引言 在当今数字化的时代,网络已经成为人们生活和工作中不可或缺的一部分。然而,随着网络的普及和应用的广泛,网络安全问题也日益凸显。从个人隐私泄露到企业关键信息被盗,从网络欺诈到大规模的网络攻击,网络安全…

openssl—心脏出血漏洞

openssl—心脏出血漏洞(CVE-2014-0160) Heartbleed漏洞 Heartbleed(心脏出血)漏洞,是一个出现在加密程序库OpenSSL的安全漏洞,该程序库广泛用于实现互联网的传输层安全(TLS)协议。…

基于多群体的变异策略集成的差分进化

题目与关键词 英文题目:Differential evolution with multi-population based ensemble of mutation strategies 英文关键词:Evolutionary algorithm, Differential evolution, Multi-population, Ensemble of mutation strategies, Numerical optimiza…