在 http/1.1 中提供了一系列方法以便我们向服务器发送不同类型的请求,需要注意的是这些方法名称都是区分大小写的,而且必需使用大写字母。具体的方法名称和说明如下表所示:
方法名称 | 方法说明 |
---|---|
get | get 方法用于根据 uri 参数从服务器中获取数据,是最常用的请求方法之一 |
head | head 方法与 get 方法类似,但服务器在响应时只返回响应行和响应头,不会返回响应体 |
post | post 请求用于将数据发送到服务器。例如使用 html 表单上传文件或提交客户信息等 |
put | put 方法可以向服务器中写入文档,有点类似于使用 ftp 上传文件 |
delete | delete 方法用于删除 uri 所指定的目标资源,与 put 方法正好相反 |
connect | connect 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 tcp 通信 |
options | options 方法用来查询目标资源所在服务器支持的 http 方法 |
trace | trace 方法可以让服务器端将收到的请求返回给客户端,主要用于开发阶段的测试和诊断 |
下面来分别介绍一下这些方法。
1. get方法
get 方法可以根据请求行中 url 部分的参数从服务器中获取数据。例如我们在浏览器中打开一个连接,然后就会在浏览器看到相应的页面,这一过程就是通过 get 方法实现的。另外,使用 get 方法还可以在 url 参数中携带一些字符串类型的参数一同传输给服务器,由于是在 url 中携带的参数,我们可以在浏览器的地址栏直观的看到,所以安全性较低,一般只用来传递一些没有风险的数据。而且 get 方法对于所传输数据的大小也有限制,一般不能超过 2kb。
以访问 http://c.biancheng.net/hello.html 这个页面为例,客户端使用 get 方法发起的 http 请求如下所示:
get /hello.html http/1.1
host: c.biancheng.net
user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36
connection: keep-alive
pragma: no-cache
cache-control: no-cache
upgrade-insecure-requests: 1
accept: text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate
accept-language: zh-cn,zh;q=0.9
针对上面的请求,服务器的响应如下所示:
http/1.1 200 ok
server: tengine
last-modified: thu, 17 sep 2020 13:07:28 gmt
etag: "34aa387-d-1568eb00"
vary: authorization,accept
date: thu, 17 sep 2020 13:32:54 gmt
accept-ranges: bytes
content-length: 68
content-type: text/html
connection: closed
http请求方式-百家乐凯发k8
2. head方法
head 方法在功能上与 get 方法相似,不同之处在于使用 head 方法服务器只会返回响应行和响应头,不会返回响应体。同样以访问 http://c.biancheng.net/hello.html 这个页面为例,客户端使用 head 方法发起的 http 请求如下所示:
head /hello.html http/1.1
user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36
host: c.biancheng.net
accept-language: zh-cn,zh;q=0.9
accept-encoding: gzip, deflate
connection: keep-alive
针对 head 方法发起的请求,服务器的响应如下所示:
http/1.1 200 ok
server: tengine
last-modified: thu, 17 sep 2020 13:07:28 gmt
etag: "34aa387-d-1568eb00"
vary: authorization,accept
date: thu, 17 sep 2020 13:32:54 gmt
accept-ranges: bytes
content-length: 0
content-type: text/html
connection: closed
通过服务器的响应结果可以看出,服务器在返回了响应行和响应头之后,并没有返回响应体。
3. post方法
当我们需要将一些信息发送给服务器的时候就需要用到 post 方法了,比如在提交表单或者上传文件的时候。与 get 方法不同,post 方法会将返送给服务器的信息放到请求体中,所以比 get 方法更加安全。而且,post 方法对于传输数据的大小和类型也没有限制。以提交表单为例,使用 post 方法向服务器发起的 http 请求如下所示:
post /login.php http/1.1
user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36
host: c.biancheng.net
content-type: text/xml; charset=utf-8
content-length: 40
accept-language: zh-cn,zh;q=0.9
accept-encoding: gzip, deflate
connection: keep-alive
username=c.biancheng.net&password=123456
上面的请求发送成功后,服务器端的脚本 login.php 会根据传递的数据做出相应的处理,并对客户端做出响应,响应结果如下所示:
http/1.1 200 ok
date: thu, 17 sep 2020 13:32:54 gmt
server: tengine
last-modified: thu, 17 sep 2020 13:07:28 gmt
etag: "34aa387-d-1568eb00"
vary: authorization,accept
accept-ranges: bytes
content-length: 51
content-type: text/html
connection: closed
4. put方法
使用 put 方法将数据传输到服务器,并将其存储在 url 所指定的位置。假如我们要将 hello.html 文件的内容存储到服务器的根目录下,那么客户端发送的 http 请求应该是下面这样的:
put /hello.html http/1.1
user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36
host: c.biancheng.net
accept-language: zh-cn,zh;q=0.9
connection: keep-alive
content-type: text/html
content-length: 182
这时服务器会在根目录下创建 hello.html 文件,并将请求中传输的数据保存到这个文件中,执行成功后会向客户端做出如下所示的响应:
http/1.1 201 created
date: thu, 17 sep 2020 13:32:54 gmt
server: tengine
content-type: text/html
content-length: 30
connection: closed
5. delete方法
delete 方法可以请求服务器删除 url 所指定的文件。假如要删除上面操作中在服务器根目录创建的 hello.htnl 文件,那么客户端的请求应该是下面这样的:
delete /hello.html http/1.1
user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36
host: c.biancheng.net
accept-language: zh-cn,zh;q=0.9
connection: keep-alive
服务器在收到上面的请求后,会删除根目录下的 hello.html 文件,并对客户端做出如下响应:
http/1.1 200 ok
date: thu, 17 sep 2020 13:32:54 gmt
server: tengine
content-type: text/html
content-length: 30
connection: closed
6. connect方法
客户端使用 connect 方法可以与 url 所指向的目标服务器建立 http 连接。假如要与域名(c.biancheng.net)所指向的服务器建立连接,客户端的请求如下所示:
connect c.biancheng.net http/1.1
user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36
连接建立成功后,服务器会对客户端做出如下响应:
http/1.1 200 connection established
date: thu, 17 sep 2020 13:32:54 gmt
server: tengine
7. options方法
当我们要使用本节中介绍的某个方法向服务器发送请求,但又不确定服务器是否支持此请求时,可以使用 options 方法来查看服务器所支持的 http 方法。在使用 options 方法发送 http 请求时,既可以指定具体的 url,也可以使用星号(*)来代表整个服务器。假如要查看域名(c.biancheng.net)所指向服务器所支持的 http 方法,客户端的请求如下所示:
options * http/1.1
user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36
服务器的响应如下所示:
http/1.1 200 ok
date: thu, 17 sep 2020 13:32:54 gmt
server: tengine
allow: get,head,post,options,trace
content-type: httpd/unix-directory
在服务器返回的响应头中,allow 一行就是该服务器支持的所有 http 方法。
8. trace方法
服务器在收到客户端使用 trace 方法发送的 http 请求时,会将收到的请求报文放到响应体中返回给客户端。trace 方法主要在程序的开发测试阶段使用,使用 trace 方法可以查看请求在传递到服务器的过程中是否被篡改或破坏等等。客户端的请求示例如下所示:
trace / http/1.1
host: c.biancheng.net
user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36
服务器的响应如下所示:
http/1.1 200 ok
date: thu, 17 sep 2020 13:32:54 gmt
server: tengine
connection: close
content-type: message/http
content-length: 166
trace / http/1.1
host: c.biancheng.net
user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36