HTTP请求方法

GET方法

  GET是最常用的方法,GET 方法意思是获取被请求 URI(Request-URI)指定的信息(以实体的格式),常用于请求服务器发送某个资源。GET请求中不会呈现数据。

  最常用于向服务器查询某些信息。必要时,可以将查询字符串参数追加到URL末尾,以便将信息发送给服务器。

  使用GET请求时经常会发生的一个错误,就是查询字符串的格式有问题。查询字符串中每个参数的名称和值都必须使用encodeURLComponent()进行编码,然后才能放到URL的末尾;而且所有的名-值对都必须由(&)分离。

  追踪HTTP流后,显示如下,响应报文中包含请求的页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
GET / HTTP/1.1
Host: 172.18.74.92
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

HTTP/1.1 200 OK
Date: Sun, 07 Apr 2019 06:24:06 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9 PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 743
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>产品添加-JD产品管理系统</title>
</head>
<body>
<h3>JD产品管理</h3>
<form action="deal.php" method="post" enctype="multipart/form-data">
图书名称:<input type='text' name='title' />
<hr />
销售价格:<input type="text" name='price' />
<hr />
市场价格:<input type="text" name='market_price' />
<hr />
<input type="submit" name="submit" value="添加" />
<input type="reset" name="reset" value="重置" />
</form>
</body>
</html>>

HEAD方法

  HEAD方法与GET方法的行为很类似,但在服务器响应中只会返回收首部,不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源首部进行检查。使用HEAD 可以:

  • 在不获取资源的情况下了解资源的情况(例如,对类型的判断)
  • 通过查看响应中的状态码,看看某个对象是否存在
  • 通过查看首部,测试资源是否被修改

PUT方法

  与GET从服务器读取文档相反,PUT方法会向服务器写入文档。有些发布系统允许用户创建Web页面,并用PUT直接将其安装到Web服务器上去。

  PUT方法的语义是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者如果那个URL已经存在的话,就用这个主体来替代它。

  我猜测,如果在某公司的招聘网站提交简历应该会用到PUT方法,因为PUT用于向服务器上的资源中存储数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
PUT /personal-center/resumeInfo HTTP/1.1
Host: hr.某ya.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: application/json
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://hr.某ya.com/campus_apply/某ya/4112
Content-Type: application/json
X-Tingyun-Id: BuYww-5RqXA;r=619819948
Content-Length: 331
DNT: 1
Connection: keep-alive
Cookie: 略

{"uploadInfo":{"resumeKey":"","attachments":[]},"basicInfo":{"name":"netlab","phone":""…………"}HTTP/1.1 200 OK
Server: Tengine/2.1.2
Date: Sun, 07 Apr 2019 06:50:19 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
ETag: W/"41c-l2UjHwiWvnbdwUn1PQuGkg"
set-cookie: 略
Vary: Accept-Encoding
Content-Encoding: gzip

{"id":779573,"name":"netlab","email":null,"phone":""…………}

POST方法

  POST方法期初是用来向服务器输入数据的,实际上,通常会用他来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方(例如发送到数据库中存储)。POST用于向服务器发送数据。

  追踪HTTP流后。可以看到使用POST方法提交的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
POST /deal.php HTTP/1.1
Host: 172.18.74.92
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://172.18.74.92/
Content-Type: multipart/form-data; boundary=------------------25762159945006
Content-Length: 446
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

-----------------------------25762159945006
Content-Disposition: form-data; name="title"

10 #title中提交的内容
-----------------------------25762159945006
Content-Disposition: form-data; name="price"

20 #price中提交的内容
-----------------------------25762159945006
Content-Disposition: form-data; name="market_price"

3 #market_price中提交的内容
-----------------------------25762159945006
Content-Disposition: form-data; name="submit"

添加
-----------------------------25762159945006--
HTTP/1.1 200 OK
Date: Sun, 07 Apr 2019 05:55:36 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9 PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 12
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8

添加成功

DELECT方法

  顾名思义,DELECT方法所做的就是请服务器删除请求URL所指定的资源。但是客户端应用程序无法保证删除操作一定会执行。因为HTTP规范允许服务器在不通知客户的端的情况下撤销操作。

  如果响应里包含描述成功的实体,响应应该是 200(OK);如果 DELETE 动作还没有执行,应该以 202(已接受)响应;如果 DELETE 请求方法已经执行但响应不包含实体,那么应该以204(无内容)响应。

TRACE方法

  客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能会修改原始HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时看看它变成了什么样子。

  TRACE请求会在目的服务器端发起一个”环回”诊断。行程最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它所收到的原始请求报文。这样客户端就可以查看在所有中间HTTP应用程序组成的请求/响应链上,原始报文是否以及如何被毁坏或修改过。

  TRACE方法主要用于诊断,也就是说,用于验证请求是否如愿穿过了请求/响应链。它是一种很好的工具,可以用来查看代理和其他应用程序对客户请求所产生的效果。

  尽管TRACE可以很方便的用于诊断,但它也存在缺点,他假定中间应用程序对各类不同的类型请求的处理方式是相同的。很多HTTP应用程序会根据方法的不同做出不同的事情,比如代理可能会将POST请求直接发给服务器,而将GET请求发送给另一个HTTP应用程序。TRACE并不提供区分这些方法的机制。通常中间应用程序会自行决定对TRACE 请求的处理方式。

OPTION方法

  OPTION方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。(有些服务器可能只支持对一些特殊类型对象使用特定操作)
  这为客户端应用程序提供了一种手段,使其不用实际访问那些资源就能判定访问各种资源的最优方式。

CONNECT方法

  HTTP1.1 协议规范保留了 CONNECT 方法,此方法是为了能用于能动态切换到隧道的代理

参考HTTP权威指南
------ end ------
0%