HTTP客户端以请求消息的形式向服务器发送HTTP请求,其中包括以下格式:
请求行
零个或多个标题(一般|请求|实体)字段后跟CRLF
空行(即CRLF前面没有任何内容的行)
表示标题字段的结尾可选消息正文
以下各节介绍HTTP请求消息中使用的每个实体.
Request-Line
Request-Line以方法标记开头,后跟Request-URI和协议版本,以CRLF结尾.元素由空格SP字符分隔.
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
让我们讨论请求行中提到的每个部分.
请求方法
request 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 | 选项 描述目标资源的通信选项. |
8 | TRACE 执行消息循环测试以及目标资源的路径. |
Request-URI
Request-URI是统一资源标识符,用于标识应用请求的资源.以下是指定URI的最常用表单:
Request-URI = "*" | absoluteURI | abs_path | authority
SN | 方法和描述 |
---|---|
1 | 当HTTP请求不使用时,使用星号 * 应用于特定资源,但应用于服务器本身,并且仅在使用的方法不一定适用于资源时才允许.例如: 选项* HTTP/1.1 |
2 | 在向代理发出HTTP请求时使用 absoluteURI .请求代理从有效缓存转发请求或服务,并返回响应.例如: GET https://img01.yuandaxia.cn/Content/img/tutorials/http/HTTP/1.1 |
3 | 最常见的Request-URI形式是用于标识源服务器或网关上的资源.例如,希望直接从源服务器检索资源的客户端将创建到主机"www.w3.org"的端口80的TCP连接,并发送以下行: GET/pub/WWW/TheProject.html HTTP/1.1 主持人:www.w3.org 注意绝对路径不能为空;如果原始URI中不存在,则必须以"/"(服务器根目录)给出. |
请求标头字段
当我们学习HTTP标头字段时,我们将在单独的章节中研究General-header和Entity-header.现在,让我们检查一下Request头字段是什么.
请求头字段允许客户端将有关请求和客户端本身的其他信息传递给服务器.这些字段充当请求修饰符.这是一个可以根据要求使用的一些重要Request-header字段的列表:
Accept-Charset
接受编码
接受语言
授权
期待
来自
主持人
If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since
Max-Forwards
代理授权
范围
Referer
TE
User-Agent
如果要编写自己的自定义客户端和Web服务器,可以引入自定义字段.
请求消息示例
现在让我们把它放进去吧一起形成一个HTTP请求,从it1352上运行的Web服务器上获取 hello.htm 页面.com
GET /hello.htm HTTP/1.1User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)Host: www.it1352.comAccept-Language: en-usAccept-Encoding: gzip, deflateConnection: Keep-Alive
这里我们没有向服务器发送任何请求数据,因为我们从服务器获取纯HTML页面. Connection是一个通用标头,其余标头是请求标头.以下示例显示如何使用请求消息正文将表单数据发送到服务器:
POST /cgi-bin/process.cgi HTTP/1.1User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)Host: www.it1352.comContent-Type: application/x-www-form-urlencodedContent-Length: lengthAccept-Language: en-usAccept-Encoding: gzip, deflateConnection: Keep-AlivelicenseID=string&content=string&/paramsXML=string
这里给定的URL /cgi-bin/process.cgi 将用于处理传递的数据,因此将返回响应.这里 content-type 告诉服务器传递的数据是一个简单的Web表单数据, length 将是放在邮件正文中的数据的实际长度.以下示例显示如何将纯XML传递到Web服务器:
POST /cgi-bin/process.cgi HTTP/1.1User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)Host: www.it1352.comContent-Type: text/xml; charset=utf-8Content-Length: lengthAccept-Language: en-usAccept-Encoding: gzip, deflateConnection: Keep-Alivestring