HTTP客户端以请求消息的形式向服务器发送HTTP请求,其中包括以下格式 -
- 请求行。
- 零个或多个标头(常规|请求|实体)字段后跟CRLF。
- 空行(CRLF前面没有任何内容的行),表示标题字段的结尾。
- 可选的消息主体。
以下部分解释了HTTP消息中使用的每个实体。
消息请求行
Request-Line
以方法标记开头,后跟Request-URI
,协议版本,以CRLF结尾。元素由空格SP字符分隔。
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
下面我们将讨论Request-Line
中提到的每个部分。
请求方法
请求方法指示对由给定Request-URI
标识的资源执行的方法。该方法区分大小写,应始终以大写形式提及。HTTP/1.1
支持以下方法 -
编号 | 方法 | 描述 |
---|---|---|
1 | GET | 它用于使用给定的URI从给定服务器检索信息。使用GET 的请求应仅检索数据,并且不应对数据产生其他影响。 |
2 | HEAD | 它与GET相同,但仅传输状态行和标头部分。 |
3 | POST | 它用于将数据发送到服务器。例如,使用HTML表单的客户信息,文件上载等。 |
4 | PUT | 它用上传的内容替换目标资源的所有当前表示。 |
5 | DELETE | 它删除URI给出的目标资源的所有当前表示。 |
6 | CONNECT | 它建立到由给定URI标识的服务器的通道。 |
7 | OPTIONS | 它描述了目标资源的通信选项。 |
8 | TRACE | 它沿着目标资源的路径执行消息环回测试。 |
请求URI
Request-URI是统一资源标识符,用于标识必须应用请求的资源。以下是指定URI的最常用表单 -
Request-URI = "*" | absoluteURI | abs_path | authority
*
- 当HTTP请求不适用于特定资源但使用服务器本身时,使用星号*
。仅当方法不一定适用于资源时才允许。例如,OPTIONS * HTTP/1.1
absoluteURI
- 在向代理发出HTTP请求时使用absoluteURI
。请求代理转发请求或从有效缓存中为其提供服务,并返回响应。例如,GET https://www.w3.org/pub/WWW/TheProject.html HTTP / 1.1
- Request-URI的最常见形式是用于标识源服务器或网关上的资源。例如,希望直接从源服务器检索上述资源的客户端将创建到主机
www.w3.org
的端口80的TCP连接并发送线路 -GET /pub/WWW/TheProject.html HTTP/1.1
请求标头字段
request-header
字段允许客户端将有关请求以及客户端本身的其他信息传递给服务器。这些字段充当请求修饰符,并且可以使用以下重要的Request-header
字段,可根据要求使用 -
Accept-Charset
Accept-Encoding
Accept-Language
Authorization
Expect
From
Host
If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since
Max-Forwards
Proxy-Authorization
Range
Referer
TE
User-Agent
您可以引入自定义字段,以防您要编写自己的自定义客户端和Web服务器。
请求消息示例
现在把它们放在一起形成一个HTTP请求,从xuhuhu.com
上运行的web服务器获取hello.html
页面 -
GET /hello.html HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.xuhuhu.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
这里没有向服务器发送任何请求数据,因为我们从服务器获取指定的一个HTML页面。Connection
是一个通用标头,其余所有标头都是请求标头。以下是使用请求消息正文将表单数据发送到服务器的另一个示例 -
POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.xuhuhu.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
licenseID = string&content = string&/paramsXML = string
这里,给定的URL /cgi-bin/process.cgi
用于处理传递的数据,因此返回响应。内容类型告诉服务器传递数据的是简单的Web表单数据,长度是放在消息正文中的数据的实际长度。以下示例显示了如何将XML传递到Web服务器 -
POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.xuhuhu.com
Content-Type: text/xml; charset = utf-8
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<?xml version = "1.0" encoding = "utf-8"?>
<string xmlns = "http://clearforest.com/">string</string>