你真的知道 HTTP OPTIONS 方法的作用吗?
myzbx 2025-01-13 16:00 17 浏览
HTTP(Hypertext Transfer Protocol,超文本传输协议)是互联网中被使用最广的一种网络协议,用于客户端与服务器之间的通信。HTTP 协议定义了一系列的请求方法,例如 GET、POST、PUT、DELETE 等,用于不同类型的数据操作。还有一个不太常用但同样重要的方法—OPTIONS,虽然不像 GET 或 POST 那样常用,但在网络通信中扮演着独特而重要的角色。
HTTP OPTIONS 方法定义
根据 RFC 7231规范定义,HTTP OPTIONS 方法是一个“用于获取针对特定资源的 HTTP 请求方法或 URI 的通信选项”的请求方法。简单来说,当客户端发送一个 OPTIONS 请求到服务器时,是在询问:“对于这个特定的URL,服务器能处理哪些 HTTP 方法或者有哪些特殊的限制或要求”。
HTTP OPTIONS 请求格式
OPTIONS 请求的格式与其他 HTTP 请求方法并无太大差异,包括以下部分:
OPTIONS /resource HTTP/1.1
Host: example.com
Accept: */*
- OPTIONS :请求方法,表示客户端希望获取目标资源支持的 HTTP 方法。
- /resource:请求的 URI,即客户端想要了解的资源路径。
- Host:指定请求的目标主机名和端口号。
- Accept:可选,表明客户端能够接受的响应内容类型。在 OPTIONS 请求中,通常设置为 */*,表示可以接受任何类型的响应。
HTTP OPTIONS 响应格式
服务器对 OPTIONS 请求的响应通常包含如下关键信息:
HTTP/1.1 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Tue, 4 May 2021 9:56:?9 GMT
Server: Apache/2.4.46 (Unix)
- HTTP/1.1 200 OK:状态码和状态消息,表示请求成功。
- Allow:列出服务器允许的 HTTP 方法,是 OPTIONS 请求的主要目的。
- Content-Length:由于 OPTIONS 请求通常不返回实体内容,此处为0。
- Content-Type:虽然没有实际内容,但服务器仍可能指明响应的 MIME 类型,如文本 HTML。
- Date:响应生成的日期和时间。
- Server:服务器软件及版本信息。
此外,OPTIONS 响应还可能包含其他与 CORS(跨源资源共享)相关的头部,如 Access-Control-Allow-Methods、Access-Control-Allow-Headers、Access-Control-Max-Age 等。
OPTIONS 方法的作用与使用场景
- 探查服务器功能,客户端在正式发起 HTTP 请求之前,先向服务器询问该资源支持哪些 HTTP 方法。这样可以根据这些信息来决定是否发起请求,避免发送服务器无法处理的请求,从而提高通信效率并减少错误。例如,假设客户端需要向某个 API 接口上传文件,但在不确定服务器是否支持 PUT 或 POST 方法的情况下,直接发送 PUT 或 POST 请求可能会导致请求失败。通过先发送一个 OPTIONS 请求,客户端可以得知服务器是否支持所需的 HTTP 方法,再决定是否继续执行上传操作。
- 跨源资源共享(CORS),OPTIONS 方法在现代 Web 开发中的一个重要应用场景是跨源资源共享(Cross-Origin Resource Sharing,CORS)。当浏览器从一个源向另一个源发起 HTTP 请求时,如果是非简单请求,浏览器会自动发送一个预检(preflight)请求,即一个 OPTIONS 请求,来询问服务器是否允许这样的跨源请求。服务器收到 OPTIONS 请求后,会在响应中添加 CORS 相关头部信息,如 Access-Control-Allow-Methods、Access-Control-Allow-Headers 等,告知浏览器允许的 HTTP 方法、允许的请求头部信息。只有当预检请求得到肯定答复后,浏览器才会继续发送实际的跨源请求。
- RESTful API 元信息发现,在设计 RESTful API 时,OPTIONS 方法也可用于提供资源的元信息发现功能。客户端可以通过发送一个 OPTIONS 请求到资源 URI,获取该资源支持的操作列表(即HTTP方法),甚至可以包括每个方法的简要说明、参数要求等附加信息。这样,客户端无需查阅文档即可动态探索 API 的功能,增强了 API 的自描述性和易用性。
浏览器将CORS请求分为两类:简单请求(simple request)和非简单请求(not-so-simple request)。简单请求满足以下两个条件:
1. 请求方法是 HEAD、GET 或 POST 之一。
2. HTTP 的头信息不超出以下几种字段:Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type(只限于 application/x-www-form-urlencoded、multipart/form-data、text/plain 三个值)。
OPTIONS 响应的头部信息详解
- Allow,Allow 是 OPTIONS 请求最核心的返回信息,列出了服务器允许的 HTTP 方法。例如:
Allow: GET, POST, HEAD, OPTIONS
说明服务器支持对指定资源执行 GET、POST、HEAD 和 OPTIONS 这四种 HTTP 方法。客户端可以根据这些信息判断是否可以安全地执行预期的操作。
在跨源资源共享场景中,OPTIONS 响应可能包含以下 CORS 相关头部信息:
- Access-Control-Allow-Methods,服务器允许的 HTTP 方法列表,用于回应预检请求。例如:
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
- Access-Control-Allow-Headers,列举了服务器允许客户端在实际请求中使用的自定义头部字段。例如:
Access-Control-Allow-Headers: Content-Type, X-Custom-Header
- Access-Control-Allow-Credentials,若值为 true,表示服务器允许客户端在跨源请求中携带 Cookie 或 HTTP 认证信息。
Access-Control-Allow-Credentials: true
- Access-Control-Max-Age,指示预检请求的结果(即上述CORS相关头部信息)可以在浏览器中缓存的最大时间(秒)。这样做可以避免对同一资源的重复预检请求,提高性能。
Access-Control-Max-Age: 3600
小结
HTTP OPTIONS 方法主要用于获取目标资源支持的 HTTP 方法列表。在实现 CORS、安全性检查和预检请求等方面,OPTIONS 方法发挥着重要作用。通过了解 OPTIONS 方法的工作原理和应用场景,可以更好地利用这一工具,提高 Web 应用的安全性和可扩展性。
文章持续更新中,微信搜索【路多辛】阅读更多优质文章
相关推荐
- PhantomJS出局!Puppeteer vs. Playwright 如何选择?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!前言浏览器自动化并不是一项新技术,Sel...
- Cesium 两种方式加载 Geoserver服务 WMTS以及WMS、WFS、KML资源图层
-
最近有需求,Cesium叠加Geoserver缓存瓦片,也就是WMTS瓦片,本来想直接使用Tomcat之类的容器发布瓦片服务再叠加。后来发现Geoserver的瓦片规则有点不太常规,...
- Windows App Studio 更新,快速打包 WordPress 网站为通用应用
-
2015年12月23日,10:52上午-Picturepan2今天,微软推出了12月WindowsAppStudio更新。如果你拥有WordPress网站,Wind...
- 2025 款凯迪拉克 Escalade IQ 将技术推向新高度
-
从55英寸显示屏到免提驾驶,2025款EscaladeIQ将凯迪拉克的科技提升到了一个新的水平。2025款凯迪拉克EscaladeIQ电动版的推出是重磅新闻。除了出乎意料的动力系统之外...
- 苹果iOS14发布,亮点不少,网友:有点像wp系统
-
北京时间6月23日凌晨1点,苹果开发者大会WWDC2020首次以直播形式举行,苹果公司CEO蒂姆·库克在史蒂夫·乔布斯剧院礼堂做开场演讲。视频截图随后,苹果高级副总裁CraigFederighi开...
- Avalonia跨平台入门第二十一篇之玩耍CEF
-
在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expande...
- WordPress 站点地图如何设置?WordPress 站点地图指南及其使用方法
-
WordPress站点地图设置指南及其使用方法吓载海量跨境营销软件:https://www.huahaikuajing.com什么是站点地图以及如何使用它如果您曾经坐下来阅读有关SEO的文章,您...
- 数控变频器的研究与实现(数控变频器作用)
-
一般变频器具有两种控制方式:控制面板控制方式和串行通信数据控制方式。控制面板控制方式利用变频器自带控制面板进行手动操控,一般应用于非自动控制场合。在自动化程度越来越高的工业生产现场以及机电一体化的数控...
- 一文学会VB编程,简单实用不费力(vb编程基础知识)
-
应用实例:给VB程序加菜单图标:在VB里面加图标比较麻烦,你需要用到API函数进行调用,参数不好理解:给菜单添加图标的API函数:GetMenu、GetSubMenu、GetMenuItemID、Se...
- 谷歌亲儿子升级Android11,Pixel大全套的技巧分享
-
GooglePixel5出来前,一直都是用GooglePixel4a作为主力机,手感好之余也有强大的拍照功能,NT$11,990的建议售价降低入手门槛,这或许也是Pixel系列不断...
- 基于Unity3D的三维页游的设计与实现
-
张海程,李效伟,郭玮玮,张萌,庄绪姣,车统统(山东女子学院信息技术学院,山东济南250300)摘要:Unity3D引擎能够加速网页三维游戏的开发。基于Unity3D引擎,使用3DsMax对三...
- DevExpress Universal Subscription v15.1.3震撼发布
-
DevExpress日前震撼发布了全新的v15.1.3版本。在此次发布的新版本中,您可以利用我们的UI控件集在Windows10上进行开发。凭借现在投放在Windows8XAML平台上的代码,我...
- 苹果智能手表十大细节曝光(苹果智能手表最新款功能介绍)
-
从今天开始,软件开发商将可以为苹果智能手表AppleWatch开发新应用。当然,这些应用不是独立的,它们必须是当前iPhone上现有应用的扩展。此外,AppleWatch的开发者套件WatchKi...
- 专题|外行人看大数据 十款最常用的数据可视化工具
-
实习编辑:西和西校对排版:bin~bin随着大数据时代的到来,数据可视化工具越来越重要,大量繁杂的数据在经过可视化工具处理后,从简单的表格变成多种多样的图形,以图形化的形式展现在用户面前,清晰直观。...
- 最新的iPhone更新,CarPlay功能将升级
-
苹果最近向测试人员推出了一个新的iOSBeta,除了iPhone的新功能外,这家总部位于库比蒂诺的科技巨头似乎还默默地为CarPlay用户提供了许多优惠。最新的主要CarPlay大修是作为iOS...
- 一周热门
- 最近发表
-
- PhantomJS出局!Puppeteer vs. Playwright 如何选择?
- Cesium 两种方式加载 Geoserver服务 WMTS以及WMS、WFS、KML资源图层
- Windows App Studio 更新,快速打包 WordPress 网站为通用应用
- 2025 款凯迪拉克 Escalade IQ 将技术推向新高度
- 苹果iOS14发布,亮点不少,网友:有点像wp系统
- Avalonia跨平台入门第二十一篇之玩耍CEF
- WordPress 站点地图如何设置?WordPress 站点地图指南及其使用方法
- 数控变频器的研究与实现(数控变频器作用)
- 一文学会VB编程,简单实用不费力(vb编程基础知识)
- 谷歌亲儿子升级Android11,Pixel大全套的技巧分享
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)