- HTTP 教程
- HTTP - 首页
- HTTP - 概述
- HTTP - 参数
- HTTP - 消息
- HTTP - 请求
- HTTP - 响应
- HTTP - 方法
- HTTP - 状态码
- HTTP - 首部字段
- HTTP - 缓存
- HTTP - URL 编码
- HTTP - 安全性
- HTTP - 消息示例
- HTTP 有用资源
- HTTP - 快速指南
- HTTP - 有用资源
HTTP - 请求
HTTP 客户端以请求消息的形式向服务器发送 HTTP 请求,该请求消息包含以下格式
- A Request-line
- Zero or more header (General|Request|Entity) fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
以下部分解释了 HTTP 请求消息中使用的每个实体。
请求行
请求行以方法标记开头,后跟请求 URI 和协议版本,并以 CRLF 结尾。这些元素由空格 SP 字符分隔。
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
让我们讨论请求行中提到的每个部分。
请求方法
请求的方法指示要对由给定请求 URI标识的资源执行的方法。方法区分大小写,应始终以大写形式提及。下表列出了 HTTP/1.1 中所有支持的方法。
序号 | 方法和描述 |
---|---|
1 | GET GET 方法用于使用给定的 URI 从给定的服务器检索信息。使用 GET 的请求应仅检索数据,并且不应对数据产生其他影响。 |
2 | HEAD 与 GET 相同,但它仅传输状态行和报头部分。 |
3 | POST POST 请求用于将数据发送到服务器,例如,使用 HTML 表单发送客户信息、文件上传等。 |
4 | PUT 用上传的内容替换目标资源的所有当前表示形式。 |
5 | DELETE 删除 URI 给出的目标资源的所有当前表示形式。 |
6 | CONNECT 建立到由给定 URI 标识的服务器的隧道。 |
7 | OPTIONS 描述目标资源的通信选项。 |
8 | TRACE 执行消息循环回测试以及目标资源的路径。 |
请求 URI
请求 URI 是统一资源标识符,用于标识要对其应用请求的资源。以下是指定 URI 最常用的形式
Request-URI = "*" | absoluteURI | abs_path | authority
序号 | 方法和描述 |
---|---|
1 | 当 HTTP 请求不适用于特定资源,而是适用于服务器本身时,使用星号*,并且仅当使用的方法不一定适用于资源时才允许。例如 OPTIONS * HTTP/1.1 |
2 | 当对代理服务器发出 HTTP 请求时,使用absoluteURI。请求代理转发请求或从有效缓存中提供服务,并返回响应。例如 GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 |
3 | 请求 URI 的最常见形式是用于标识源服务器或网关上的资源的形式。例如,希望直接从源服务器检索资源的客户端将创建到主机“www.w3.org”的端口 80 的 TCP 连接,并发送以下行 GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org 请注意,绝对路径不能为空;如果原始 URI 中不存在任何路径,则必须将其指定为“/”(服务器根目录)。 |
请求报头字段
我们将在单独的章节中学习通用报头和实体报头,届时我们将学习 HTTP 报头字段。现在,让我们检查一下请求报头字段是什么。
请求报头字段允许客户端将有关请求以及客户端本身的附加信息传递给服务器。这些字段充当请求修改器。以下是一些可以根据需要使用的重要请求报头字段的列表
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 请求,以从运行在 tutorialspoint.com 上的 Web 服务器中获取hello.htm页面
GET /hello.htm HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.tutorialspoint.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.tutorialspoint.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 将用于处理传递的数据,并相应地返回响应。这里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.tutorialspoint.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>