HTTP协议漫谈 - HTTP协议请求方法

本文详细探讨了HTTP协议中的请求方法,包括标准方法GET、HEAD、PUT、POST、DELETE、TRACE、OPTIONS和CONNECT,以及扩展方法如PATCH。讨论了请求方法的安全性、幂等性和可缓存性,并对比了GET与POST、PUT与POST、PUT与PATCH的选取原则。重点解析了各方法的语义,如GET用于获取资源,POST用于提交数据,PUT用于替换资源,PATCH用于部分更新,以及DELETE用于删除资源。最后强调了服务器实现时应遵循方法的语义,以保持兼容性和一致性。
摘要由CSDN通过智能技术生成

前言

在上一篇文章《HTTP协议漫谈 - HTTP协议历史和报文结构》中介绍了HTTP协议的历史和版本变化,以及HTTP协议报文的总体结构。

按照HTTP/1.1 RFC文档中的定义,HTTP报文包括起始行,头域和消息体三个部分。其中起始行又分为请求行和状态行,请求行是HTTP请求中的起始行,它又包含了三个部分:请求方法,请求URI和HTTP协议版本。本文就来介绍HTTP请求中的请求方法。

请求方法(Request Methods)

HTTP协议的请求方法有很多,一般可以分为标准的请求方法和扩展的请求方法。标准的请求方法指的是在HTTP协议中定义的请求方法,扩展的请求方法指的是在其他协议中定义的请求方法。

标准的请求方法

在HTTP/1.0版本(RFC 1945)中定义了GET、POST和HEAD三个方法,在HTTP/1.1的最初版本(RFC 2068)中,则定义了GET、HEAD、PUT、POST、DELETE、TRACE、OPTIONS七个方法,在HTTP/1.1的第二版(RFC 2616)中,又增加了一个CONNECT方法,之后的HTTP/1.1的第三版(RFC 7231)中没有添加新的方法。这样,在HTTP/1.1中就有八个标准的HTTP请求方法:GET、HEAD、PUT、POST、DELETE、TRACE、OPTIONS和CONNECT。在HTTP/2(RFC 7540)中添加了一个PRI方法,它只在客户端和服务端建立连接时使用,PRI请求作为一个连接序言,其报文结构和一般的HTTP报文结构并不相同。

HTTP协议要求HTTP服务端必须实现GET和HEAD方法,其他方法可以根据需要实现。此外,协议还要求,如果HTTP服务端接收到一个已经实现,但不能被用于相应的资源的请求方法,需要返回错误码405,表示Method Not Allowed。如果HTTP服务端接收到一个未知的方法,则需要返回错误码501,表示未实现 (Not Implemented)。(注意501并非只用于接收到未知的请求方法,还有其他情况也会返回501。)

HTTP请求报文中直接将方法对应的名字写入到HTTP请求行中,请求方法区分大小写,所有标准的HTTP方法都是全部大写字母的,所以使用get和GET会是两个不同的方法。参考文章HTTP method names: upper or lower case?

扩展的请求方法

HTTP协议允许在其他协议或规范中对请求方法进行扩展,除了八个标准的HTTP方法外,还有一些扩展的HTTP方法。

RFC 2068 19.6.1 Additional Request Methods一节中,描述了PATCH,LINK和UNLINK三个附加请求方法,这里的Additional Request Methods属于Additional Features一章,Additional Features并不属于HTTP/1.1标准的一部分,它仅仅提供了一些当时已有的HTTP实现中的协议元素用来参考,其中有一些是实验性的功能。在随后的RFC 2616中也提到,这三个方法并未普遍实现。此外,这里的描述是相当简略,并没有完整的定义这三个方法的语义。所以虽然这三个方法存在于HTTP协议的最初版本中,但并不作为标准的请求方法来看待,甚至很难将它们作为扩展的请求方法,因为它们并没有完整的语义。

出于对部分资源更新的需求,PATCH方法又被重新定义在RFC 5789中,RFC 5789是一个PROPOSED STANDARD。不同于RFC 2068中的PATCH方法,在RFC 5789中完整的定义了PATCH方法的语义和用法,并给出了示例,可以认为这里的PATCH方法是一个新的方法,和RFC 2068中的PATCH方法仅仅是名字和基本概念相同。

WebDAV是基于HTTP/1.1的一个扩展协议,最早定义在RFC 2518中,之后更新为RFC 4918。它在HTTP/1.1的基础上定义了一组额外的HTTP请求方法,头域和状态码等。其中新增请求方法主要有BIND,CHECKIN,CHECKOUT,COPY,DELETE,LOCK,MKCOL,MOVE,PROPFIND,PROPPATCH,REPORT&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值