HTTP - 请求

HTTP客户端以请求消息的形式向服务器发送HTTP请求,请求消息包括以下格式:

  • Request-Line(请求行)
  • 零个或多个标头(常规|请求|实体)字段,后跟 CRLF
  • 空行(即 CRLF 前面没有任何内容的行)指示标头字段的结尾
  • 可选消息正文

以下部分解释了 HTTP 请求消息中使用的每个实体。

Request-Line(请求行)

请求行以方法令牌开头,后跟请求 URI 和协议版本,并以 CRLF 结尾。 元素之间用空格 SP 字符分隔。

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

让我们讨论请求行中提到的每个部分。

请求方法

请求方法指示要对给定Request-URI标识的资源执行的方法。 该方法区分大小写,并且应始终以大写形式提及。 下表列出了HTTP/1.1中所有支持的方法。

S.N. 方法和说明
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
 
S.N. Method and Description
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。 现在,让我们检查一下请求标头字段是什么。

请求标头字段允许客户端将有关请求以及客户端本身的附加信息传递给服务器。 这些字段充当请求修饰符。以下是一些重要的请求标头字段的列表,可以根据要求使用这些字段:

  • 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>