首页 > 其他分享 >一文读懂预检的基本知识

一文读懂预检的基本知识

时间:2024-08-15 12:56:31浏览次数:7  
标签:浏览器 请求 基本知识 预检 读懂 头部 允许 服务器

目录

前言

两次请求,前后分析问题何在,最后发现是预检的知识点
在这里插入图片描述

为何会有预检请求这个概念:为了提高安全性,避免潜在的安全漏洞

  • 安全性:允许浏览器在发送跨域请求之前检查服务器是否允许这种操作,防止未经授权的请求对用户数据进行操作
  • 复杂请求:对于一些复杂的请求(例如,使用了自定义头部、非简单请求方法如 PUT、DELETE,或者内容类型为非 application/x-www-form-urlencoded、multipart/form-data 或 text/plain),浏览器需要进行预检请求,以确认服务器允许这些请求

1. 基本知识

CORS(跨域资源共享)协议的一部分,用于确保浏览器在实际发送跨域请求之前能够获得服务器的授权

以OPTIONS 请求发送

一般在以下情况下触发:

  • 使用了 HTTP 方法 PUT、DELETE 或其他非简单方法(GET、POST 和 HEAD 被认为是简单方法)
  • 请求中包含了非标准的自定义头部
  • 请求的内容类型是 application/json 或其他不常见的类型
  • 请求中包含了 Authorization 等特殊头部

基本的请求流程如下:

  1. 浏览器发起预检请求:浏览器向服务器发送一个 OPTIONS 请求,询问服务器是否允许实际的跨域请求
  2. 服务器响应预检请求:服务器响应预检请求,包含允许的 HTTP 方法、允许的头部等信息
  3. 浏览器检查响应:浏览器根据服务器的响应决定是否继续发送实际的跨域请求

2. Demo

预检请求通常包含如下头部:

Access-Control-Request-Method: 期望的实际请求方法
Access-Control-Request-Headers: 实际请求中包含的自定义头部列表

服务器在响应中需要包含如下头部:

Access-Control-Allow-Methods: 允许的请求方法
Access-Control-Allow-Headers: 允许的请求头部
Access-Control-Allow-Origin: 允许的来源

在服务器端,需要配置允许的 CORS 头部,以便处理预检请求

可以这样设置 CORS 中间件:(例如 Express.js)

const cors = require('cors');
app.use(cors({
  origin: 'https://example.com',
  methods: ['GET', 'POST', 'PUT', 'DELETE'],
  allowedHeaders: ['Content-Type', 'Authorization']
}));

标签:浏览器,请求,基本知识,预检,读懂,头部,允许,服务器
From: https://blog.csdn.net/weixin_47872288/article/details/141102626

相关文章

  • 详细分析SQL Server触发器的基本知识
    目录前言1.基本知识2.Demo3.查找特定表的存储过程前言原先写过一篇类似的,不过是基于Mysql:添加链接描述对应SqlServer的补充知识点:详细配置SQLServer的链接服务器(图文操作Mysql数据库)1.基本知识基本知识其实差不多,先从CRUD开始触发器的类型:DML触发器:在对表......
  • [HTML5] 一文读懂H5新特性的应用
    文章目录一、HTML5新增语义化标签1.`<header>`标签语法使用场景常用属性示例代码2.`<footer>`标签语法使用场景常用属性示例代码3.`<nav>`标签语法使用场景常用属性示例代码4.`<article>`标签语法使用场景常用属性示例代码5.`<section>`标签语法使用场景......
  • 一文读懂分布式爬虫利器Scrapy-Redis:源码解析、队列管理与去重策略
    分布式利器Scrapy-Redis原理Scrapy-Redis库已经为我们提供了Scrapy分布式的队列、调度器、去重等功能,其GitHub地址为:https://github.com/rmax/scrapy-redis。本节课我们深入掌握利用Redis实现Scrapy分布式的方法,并深入了解Scrapy-Redis的原理。1.获取源码......
  • 一文读懂分布式爬虫利器Scrapy-Redis:源码解析、队列管理与去重策略
    分布式利器Scrapy-Redis原理Scrapy-Redis库已经为我们提供了Scrapy分布式的队列、调度器、去重等功能,其GitHub地址为:https://github.com/rmax/scrapy-redis。本节课我们深入掌握利用Redis实现Scrapy分布式的方法,并深入了解Scrapy-Redis的原理。1.获取源码可以......
  • 详细分析JWT的基本知识(附Demo)
    目录前言1.基本知识2.JWT验证过程3.Demo前言对于Java的基本知识推荐阅读:java框架零基础从入门到精通的学习路线附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新)1.基本知识紧凑的、URL-safe的表示方式,通常用于认证和信息交换JWT由三部分组成......
  • 一文读懂银企直联
    中国企业财资管理发展的二十年,也是银企直联发展的二十年。作为财资管理的底层技术支撑,银企直联一直是中国财资管理行业发展道路上的基石。通过银企直联,企业不仅可以实现跨银行的全局账户视通和足不出户的企业直联支付,还能实现跨银行的资金自动归集。然而,银企直联的建设无论是从接......
  • Spring关于bean的一些基本知识
    在spring这座大厦中,去除掉最底部的核心(core)组件,那么最重要的无疑是bean和bean工厂。剩余是AOP、设计模式,更之上的就是各种组件:DATA,WEBMVC... 为了便于行文,这里把bean和bean工厂统称为bean。bean英文的意思是豆子。为了符合它的实际作用,本人把bean翻译为“缓存对象实例”,但......
  • 一文读懂栅极驱动
    一、什么是栅极驱动器      『功率MOSFET是一种电压控制型器件,可用作电源电路、电机驱动器和其他系统中的开关元件。栅极是每个器件的电气隔离控制端。MOSFET的其他端子是源极和漏极。为了操作MOSFET,通常须将一个电压施加于栅极(相对于源极或发射极)。使用专用驱......
  • 一文了解读懂系列:5G连接模式DRX-原理篇
    一、引言与LTE类似,5G中的不连续接收(DRX)分为两种类型:空闲模式DRX和连接模式DRX。在空闲模式DRX中,用户设备(UE)会定期唤醒以监测寻呼消息,如果寻呼消息不是针对它的,则会回到休眠模式。本文将详细讨论5GNR的连接模式DRX。如果在5GNR或LTE中没有连接模式DRX,UE必须始终保持清醒......
  • 一文读懂SEnet:如何让机器学习模型学会“重点观察”
    深入探讨一个在图像识别、自然语言处理等众多领域大放异彩的注意力模块——Squeeze-and-ExcitationNetworks(SEnet)。本文不仅会理论剖析SEnet的核心原理,还会手把手带你完成在TensorFlow和Pytorch这两个主流框架上的代码实现。准备好了吗?一起步入注意力机制的精妙世界。一、......