一文读懂预检的基本知识

前言

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

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

  • 安全性:允许浏览器在发送跨域请求之前检查服务器是否允许这种操作,防止未经授权的请求对用户数据进行操作
  • 复杂请求:对于一些复杂的请求(例如,使用了自定义头部、非简单请求方法如 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']
}));
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值