关于预检请求

2024-01-24 18:04
文章标签 请求 预检

本文主要是介绍关于预检请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基本概述

预检请求(Preflight Request)是一种由浏览器自动发起的请求,用于检查实际请求是否安全可行。这种请求通常在跨域请求(CORS)中出现,并且只在某些特定条件下触发。以下是触发预检请求的具体条件:

  1. 请求方法不是简单方法之一(GET、HEAD 或 POST)。

  2. POST请求的Content-Type不是简单请求头之一(application/x-www-form-urlencoded、multipart/form-data 或 text/plain)。

  3. 请求设置了自定义的头信息。

  4. 请求包含了可读流(即使用 ReadableStream 对象)。

当满足以上任一条件时,浏览器会首先发送一个OPTIONS请求到服务器,询问服务器是否允许实际的请求。如果服务器允许,浏览器才会发送实际的请求。这个OPTIONS请求就是所谓的预检请求。

知识拓展

  1. 请求方法是简单方法指的是哪些

    在 HTTP 规范中,所谓的"简单请求"是指不会触发 CORS 预检请求的那些请求。简单请求需要满足以下所有条件:

    1. 只能是以下列出的方法之一:
      GET
      POST
      HEAD

    2. 人为设置的头信息字段只能是以下几种:
      Accept
      Accept-Language
      Content-Language
      Content-Type (但只限于三个值 application/x-www-form-urlencoded、multipart/form-data、text/plain)

    3. 请求中的任何 XMLHttpRequestUpload 对象均没有注册任何事件监听器;也就是说,请求中没有使用 XMLHttpRequestUpload 对象。

    4. 请求中没有使用 ReadableStream 对象。

    以上这些方法被称为简单方法,它们不会触发 CORS 预检请求。

  2. application/x-www-form-urlencoded
    • application/x-www-form-urlencoded 是一种 MIME 类型,常用于指定 HTTP 请求的内容类型(Content-Type)。当你发送一个 HTTP POST 请求时,需要在请求头中设置 Content-Type 来告诉服务器请求体的数据格式。
    • 如果 Content-Type 的值被设置为 application/x-www-form-urlencoded,那么请求体中的数据会被编码为键值对,每对键值之间用 & 分隔,键与值之间用 = 分隔。这种编码方式与 URL 查询字符串的格式相同。
    • 例如,如果你有一个 JavaScript 对象 {name: ‘John’, age: 30},那么在发送请求时,这个对象会被转换为字符串 ‘name=John&age=30’。
    • 这种数据格式主要用于提交 HTML 表单数据,因为它能将复杂的表单数据转换为可在 URL 中传输的字符串。
  3. text/plain
    • text/plain 是一种 MIME 类型,用于指定 HTTP 请求或响应的内容类型(Content-Type)。当你设置 Content-Type 为 text/plain 时,意味着你正在发送或接收纯文本数据。
    • 这种类型通常用于发送不包含任何标记的纯文本。例如,如果你正在发送一个纯文本文件,或者你正在发送一个不包含 HTML 或其他代码的字符串,那么你应该使用 text/plain 类型。
    • 需要注意的是,text/plain 不会对数据进行任何处理或编码,所以它不适合用于发送包含特殊字符的数据。例如,如果你需要发送包含 & 或 = 等特殊字符的数据,那么你应该使用 application/x-www-form-urlencoded 或 multipart/form-data 类型。

这篇关于关于预检请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640533

相关文章

Java http请求示例

使用HttpURLConnection public static String httpGet(String host) {HttpURLConnection connection = null;try {URL url = new URL(host);connection = (HttpURLConnection) url.openConnection();connection.setReq

10 Source-Get-Post-JsonP 网络请求

划重点 使用vue-resource.js库 进行网络请求操作POST : this.$http.post ( … )GET : this.$http.get ( … ) 小鸡炖蘑菇 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-w

项目一(一) HttpClient中的POST请求和GET请求

HttpClient中的POST请求和GET请求 一、HttpClient简述 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLU

Spring Boot 注解探秘:HTTP 请求的魅力之旅

在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时也提升了代码的可读性和维护性。 一、@RequestMapping @RequestMapping用于将特定的HTTP请求映射到特定的方法上

在struts.xml中,如何配置请求转发和请求重定向!

<span style="font-size:18px;"><span style="white-space:pre"> </span><!--<strong>下面用请求转发action </strong>,<strong>这样过去id不会丢</strong>,如果用重定向的话,id会丢 --><result name="updatePopedom"<span style="color:#ff00

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc

http网络请求与下载进度

Http_request 目录 一、XMLHttpRequest 在使用 Fetch API 进行网络请求时,原生的 Fetch API 并不直接支持获取下载进度的功能,因为 Fetch API 主要是基于 Promise 的,它主要关注于请求的成功或失败,以及响应数据的处理,而不直接处理像进度跟踪这样的底层细节。 不过,你可以通过一些技巧或方法间接实现下载进度的跟踪。以下是一些常用的方法:

请解释JSP中的九大内置对象及其作用。什么是Java Web中的请求转发和重定向?它们有什么区别?

请解释JSP中的九大内置对象及其作用。 JSP(JavaServer Pages)中的九大内置对象(也称为隐式对象或自动对象)是JSP容器为每个页面提供的Java对象,这些对象在JSP页面被转换成Servlet时自动可用,无需显式声明。这些对象极大地简化了JSP页面的开发,因为它们提供了对Web应用程序中常见功能的直接访问。以下是九大内置对象及其作用的详细解释: request:javax.

Nginx跨域运行案例:云台控制http请求,通过 http server 代理转发功能,实现跨域运行。(基于大华摄像头WEB无插件开发包)

文章目录 引言I 跨域运行案例开发资源测试/生产环境,Nginx代理转发,实现跨域运行本机开发运行 II nginx的location指令Nginx配置中, 获取自定义请求header头Nginx 配置中,获取URL参数 引言 背景:全景监控 需求:感知站点由于云台相关操作为 http 请求,http 请求受浏览器跨域限制,不能直接访问,因此需要进行 http 的代理,实

记一次knife4j文档请求异常 SyntaxError: Unexpected token ‘<‘, ... is not valid JSON

knife4j页面报错问题定位 前几天开发新接口,开发完成后想使用knife4j测试一下接口功能,突然发现访问页面报错提示:knife4j文档请求异常,但之前运行还是正常的,想想会不会与升级依赖有关系,启动其他微服务发现文档接口访问正常,排除因依赖版本升级导致在线API文档无法使用情况,还是和本服务新增接口有关系。 定位问题 首先f12打开调试台,重新刷新页面,看到console有报错提示