iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >怎么理解options请求
  • 161
分享到

怎么理解options请求

2024-04-02 19:04:59 161人浏览 安东尼
摘要

这篇文章主要介绍“怎么理解options请求”,在日常操作中,相信很多人在怎么理解options请求问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解options请求”

这篇文章主要介绍“怎么理解options请求”,在日常操作中,相信很多人在怎么理解options请求问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解options请求”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

什么是 options 请求

我们可以看下 MDN 中的一段描述:

  ★    Http 的 OPTIONS 方法 用于获取目的资源所支持的通信选项。客户端可以对特定的 URL 使用 OPTIONS 方法,也可以对整站(通过将 URL 设置为“*”)使用该方法。”

简单来说,就是可以用 options 请求去嗅探某个请求在对应的服务器中都支持哪种请求方法。

前端中我们一般不会主动发起这个请求,但是往往你可以看到浏览器中相同的请求发起了 2 次,如图:

怎么理解options请求

其实,这是因为在跨域的情况下,在浏览器发起"复杂请求"时主动发起的。跨域共享标准规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。

简单请求与复杂请求

某些请求不会触发 CORS 预检请求,这样的请求一般称为"简单请求",而会触发预检的请求则称为"复杂请求"。

简单请求

  •  请求方法为GET、HEAD、POST时发的请求

  •  人为设置了规范集合之内的首部字段,如Accept/Accept-Language/Content-Language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width

  •  Content-Type 的值仅限于下列三者之一,即application/x-www-fORM-urlencoded、multipart/form-data、text/plain

  •  请求中的任意 XMLHttpRequestUpload 对象均没有注册任何事件监听器;

  •  请求中没有使用 ReadableStream 对象。

复杂请求

  •  使用了下面任一 HTTP 方法,PUT/DELETE/CONNECT/OPTIONS/TRACE/PATCH

  •  人为设置了以下集合之外首部字段,即简单请求外的字段

  •  Content-Type 的值不属于下列之一,即application/x-www-form-urlencoded、multipart/form-data、text/plain

options 关键的请求头字段

request header 的关键字段

关键字段作用
Access-Control-Request-Method告知服务器,实际请求将使用 POST 方法
Access-Control-Request-Headers告知服务器,实际请求将携带的自定义请求首部字段

如:

Access-Control-Request-Method: POST  Access-Control-Request-Headers: X-PINGoTHER, Content-Type

response header 的关键字段

关键字段作用
Access-Control-Allow-Methods表明服务器允许客户端使用什么方法发起请求
Access-Control-Allow-Origin允许跨域请求的域名,如果要允许所有域名则设置为 *
Access-Control-Allow-Headers将实际请求所携带的首部字段告诉服务器
Access-Control-Max-Age指定了预检请求的结果能够被缓存多久

Options 请求优化

当我们发起跨域请求时,如果是简单请求,那么我们只会发出一次请求,但是如果是复杂请求则先发出 options 请求,用于确认目标资源是否支持跨域,然后浏览器会根据服务端响应的 header 自动处理剩余的请求,如果响应支持跨域,则继续发出正常请求,如果不支持,则在控制台显示错误。

由此可见,当触发预检时,跨域请求便会发送 2 次请求,既增加了请求数,也延迟了请求真正发起的时间,严重影响性能。

所以,我们可以优化 Options 请求,主要有 2 种方法。

  1.  转为简单请求,如用 JSONP 做跨域请求

  2.  对 options 请求进行缓存,服务器端设置 Access-Control-Max-Age 字段,那么当第一次请求该 URL 时会发出 OPTIONS 请求,浏览器会根据返回的 Access-Control-Max-Age 字段缓存该请求的 OPTIONS 预检请求的响应结果(具体缓存时间还取决于浏览器的支持的默认最大值,取两者最小值,一般为 10 分钟)。在缓存有效期内,该资源的请求(URL 和 header 字段都相同的情况下)不会再触发预检。(chrome 打开控制台可以看到,当服务器响应 Access-Control-Max-Age 时只有第一次请求会有预检,后面不会了。注意要开启缓存,去掉 disable cache 勾选。)

到此,关于“怎么理解options请求”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么理解options请求

本文链接: https://www.lsjlt.com/news/84929.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么理解options请求
    这篇文章主要介绍“怎么理解options请求”,在日常操作中,相信很多人在怎么理解options请求问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解options请求”...
    99+
    2024-04-02
  • 如何解决axios会发送两次请求有个OPTIONS请求的问题
    这篇文章主要为大家展示了“如何解决axios会发送两次请求有个OPTIONS请求的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决axios会发送两次...
    99+
    2024-04-02
  • options预检请求的前后端解决方式详解
    目录一、前言二、请求的分类1、简单请求的定义2、复杂请求的定义3、预检带来的小问题4、解决方式(1)前端的解决方式(2)后端的解决方式一(3) 后端解决方式二一、前言 最近在试玩op...
    99+
    2023-05-17
    options预检请求 前后端options请求
  • CDN怎么处理HTTPS请求
    CDN(内容分发网络)是一种用来加速网站内容传输的网络服务,通常通过在全球各地分布的服务器来缓存网站的静态资源,从而减少用户访问网站...
    99+
    2024-04-24
    CDN
  • Node.js中怎么处理POST请求并获取请求参数
    本篇内容介绍了“Node.js中怎么处理POST请求并获取请求参数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接收POST请求在Node....
    99+
    2023-07-05
  • JavaScript怎么处理并行请求
    这篇文章主要讲解了“JavaScript怎么处理并行请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript怎么处理并行请求”吧!需求两个异步...
    99+
    2024-04-02
  • MongoDB中怎么处理Mongos 请求
    本篇文章给大家分享的是有关MongoDB中怎么处理Mongos 请求,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。TransportLayer...
    99+
    2024-04-02
  • 怎么理解Python Django请求和响应对象
    本篇内容主要讲解“怎么理解Python Django请求和响应对象”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Python Django请求和响应对象”吧!Django请求和响应对象D...
    99+
    2023-06-25
  • chatgpt请求过多怎么解决
    本篇内容介绍了“chatgpt请求过多怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! chatg...
    99+
    2023-02-09
    chatgpt
  • SpringBoot中怎么处理RESTful API请求
    SpringBoot是一个快速开发框架,提供了很多便捷的方式来处理RESTful API请求。在SpringBoot中处理RESTf...
    99+
    2024-03-07
    SpringBoot
  • JavaScript中怎么处理并行请求
    JavaScript中怎么处理并行请求,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、使用Promise.allconst startTime&nb...
    99+
    2023-06-20
  • Postman中怎么处理跨域请求
    在Postman中处理跨域请求主要有两种方法: 使用Postman Interceptor:Postman Intercepto...
    99+
    2024-03-13
    Postman
  • 如何理解ajax跨域请求
    本篇内容介绍了“如何理解ajax跨域请求”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!同源策略限制同源策略...
    99+
    2024-04-02
  • POST请求和GET请求怎么传递和接收解析参数
    本篇内容介绍了“POST请求和GET请求怎么传递和接收解析参数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • http400的错误请求怎么解决
    http400的错误请求解决方法:1、检查URL;2、检查URL参数;3、确认请求体;4、检查请求方法;5、清除缓存。HTTP 400错误是指服务器无法理解请求的语法。它是客户端向服务器发送的请求中包含了无效的语法导致的。当用户在浏览器中访...
    99+
    2023-07-10
  • java高并发请求怎么解决
    在处理高并发请求时,可以采取以下几种方法来解决:1. 使用线程池:可以使用线程池来管理并发请求的处理。通过线程池,可以限制同时执行的线程数量,以避免系统资源被耗尽。2. 优化代码:对于需要执行时间较长的操作,可以对代码进行优化,减少执行...
    99+
    2023-08-11
    java
  • java怎么实现代理转发请求
    Java可以使用动态代理来实现代理转发请求。动态代理是在运行时创建一个实现了给定接口的代理类的过程。以下是一个简单的示例代码: 首先...
    99+
    2023-10-26
    java
  • RocketMQ怎么实现请求异步处理
    这篇文章主要介绍“RocketMQ怎么实现请求异步处理”,在日常操作中,相信很多人在RocketMQ怎么实现请求异步处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”RocketMQ怎么实现请求异步处理”的疑...
    99+
    2023-06-19
  • Apache Tomcat怎么高并发处理请求
    这篇文章给大家分享的是有关Apache Tomcat怎么高并发处理请求的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。介绍作为常用的http协议服务器,tomcat应用非常广泛。tomcat也是遵循Ser...
    99+
    2023-06-29
  • DynamoDB怎么处理并发读写请求
    DynamoDB 使用了乐观并发控制(Optimistic Concurrency Control)来处理并发读写请求。在 Dyna...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作