request line
request 报文的 start line
Last updated
request 报文的 start line
Last updated
简要地描述了客户端想要如何操作服务器端的资源,比如 GET / HTTP/1.1
method
请求方法
是一个动词,表示对资源的操作,如 GET/POST
URI
资源 path
标记了请求方法要操作的资源位置
version
版本号
表示报文使用的 HTTP 协议版本
以上三个部分通常使用 space
来分隔,最后要用 CRLF
换行表示结束。
请求方法,就是客户端发出的一个动作指令,要求服务器端对 URI 定位的资源执行该动作。
HTTP/1.1 规定了八种方法,字母都必须大写。
GET
从服务器获取资源
资源可以是静态的文本、页面、图片、视频,也可以是由 PHP、Java 动态生成的页面或者其它格式的数据
HEAD
获取资源的元信息
和 GET
方法类似,只是服务器不会返回请求的 entity body 数据,只会传回响应头
可以看做是 GET
的轻量版。比如当要检查某个文件是否存在、是否有最新版本时,就可以发个 HEAD
请求,从而避免传输 body 数据的浪费
POST
向指定资源提交数据
相当于写入数据或上传数据
PUT
和 POST
类似
但也存在微妙的区别
POST
表示 create 的含义
而 PUT
表示 update 的含义
OPTIONS
列出可以对资源实行的操作方法
通常会在响应头的 Allow
字段里返回
CONNECT
要求服务器为客户端和另一台远程服务器建立一条特殊的连接隧道,此时 web 服务器在中间充当了代理的角色
DELETE
指示服务器删除资源
由于该动作危险性太大,所以通常服务器不会执行真正的删除操作,而是对资源做一个删除标记。当然,更多时候服务器就直接不处理 DELETE 请求
TRACE
追踪请求
通常会显示响应的传输路径。多用于对 HTTP 链路的测试或诊断,其本意是好的,但存在漏洞,会泄漏网站的信息,所以 web 服务器通常也是禁止使用该方法的
此外,我们还可以任意添加请求动作,只要请求方和响应方都能理解就行。比如著名的愚人节玩笑 RFC2324 定义了协议 HTCPCP,还有已经得到了实际应用的请求方法(WebDAV)如 MKCOL, COPY, MOVE, LOCK, UNLOCK, PATCH 等。
在 HTTP 协议里,“安全”是指请求方法不会破坏服务器上的资源,即不会对服务器上的资源造成实质的修改。“幂等”是指多次执行相同的操作,结果都相同,即多次“幂”后结果“相等”,它实际上是一个数学用语,被借用到了 HTTP 协议里。
GET
HEAD
✔️
✔️
POST
❌
❌
PUT
DELETE
❌
✔️
关于幂等的说明:
POST
可以理解成 SQL 里的 insert,多次 insert 会添加多条记录
PUT
可以理解成 SQL 里的 update,多次 update “只操作一条记录”
DELETE
可以多次删除同一个资源,效果都是“资源不存在”