Requests
HTTP客户端以请求消息的形式向服务器发送HTTP请求,其中包括以下格式:
None
- 请求行
- 零个或多个标题(General | Request | Entity)字段后跟CRLF
- 空行(即CRLF前面没有任何内容的行),表示标题字段的结尾
- 可选的消息体
以下部分介绍HTTP请求消息中使用的每个实体。
Request-Line
Request-Line以方法标记开头,后跟Request-URI和协议版本,以CRLF结尾。 元素由空格SP字符分隔。
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
让我们讨论请求行中提到的每个部分。
请求方法
请求method指示对由给定Request-URI标识的资源执行的方法。 该方法区分大小写,应始终以大写形式提及。 下表列出了HTTP/1.1中支持的所有方法。
SN | 方法和描述 |
---|---|
1 | GET GET方法用于使用给定的URI从给定服务器检索信息。 使用GET的请求应仅检索数据,并且不应对数据产生其他影响。 |
2 | HEAD 与GET相同,但它仅传输状态行和标题部分。 |
3 | POST POST请求用于使用HTML表单向服务器发送数据,例如客户信息,文件上载等。 |
4 | PUT 用上传的内容替换目标资源的所有当前表示。 |
5 | DELETE 删除URI给出的目标资源的所有当前表示。 |
6 | CONNECT 建立到给定URI标识的服务器的隧道。 |
7 | OPTIONS 描述目标资源的通信选项。 |
8 | TRACE 执行消息循环测试以及目标资源的路径。 |
Request-URI
Request-URI是统一资源标识符,用于标识应用请求的资源。 以下是指定URI的最常用表单:
Request-URI = "*" | absoluteURI | abs_path | authority
SN | 方法和描述 |
---|---|
1 | 当HTTP请求不适用于特定资源但使用服务器本身时,将使用星号* ,并且仅当使用的方法不一定适用于资源时才允许使用星号* 。 例如: OPTIONS * HTTP/1.1 |
2 | 在向代理发出HTTP请求时使用absoluteURI 。 请求代理从有效的缓存转发请求或服务,并返回响应。 例如: GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 |
3 | Request-URI的最常见形式是用于标识源服务器或网关上的资源。 例如,希望直接从源服务器检索资源的客户端将创建到主机“www.w3.org”的端口80的TCP连接,并发送以下行: GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org 注意绝对路径不能为空; 如果原始URI中不存在,则必须以“/”(服务器根目录)给出。 |
请求标头字段
当我们学习HTTP头字段时,我们将在单独的章节中研究General-header和Entity-header。 现在,让我们检查一下Request头字段是什么。
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请求,从xnip.cn上运行的web服务器获取hello.htm页面
GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.xnip.cn
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.xnip.cn
Content-Type: application/x-www-form-urlencoded
Content-Length: <b>length</b>
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
licenseID=string&content=string&/paramsXML=string
这里给定的URL /cgi-bin/process.cgi将用于处理传递的数据,因此将返回响应。 这里content-type告诉服务器传递的数据是一个简单的Web表单数据, length将是放在消息体中的数据的实际长度。 以下示例显示了如何将纯XML传递到Web服务器:
POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.xnip.cn
Content-Type: text/xml; charset=utf-8
Content-Length: <b>length</b>
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>