HTTP Requests 怎么发?HTTP 请求方法有哪些?

文章导读
上一个 测验 下一个 HTTP 请求是由客户端发送到服务器的消息,用于请求特定资源。它包括请求行、头部和可选的主体。HTTP 客户端以请求消息的形式向服务器发送 HTTP 请求。
📋 目录
  1. A HTTP 请求组件
  2. B 请求行
  3. C 请求方法
  4. D Request-URI
  5. E 请求头字段
  6. F 请求消息示例
A A

HTTP - 请求



上一个
测验
下一个

HTTP 请求是由客户端发送到服务器的消息,用于请求特定资源。它包括请求行、头部和可选的主体。HTTP 客户端以请求消息的形式向服务器发送 HTTP 请求。

HTTP request message

HTTP 请求组件

HTTP 请求消息包含以下四个组件:

  • 请求行:<Method> <Request-URI> <HTTP-Version>
  • 零个或多个头部(General|Request|Entity)字段,后跟 CRLF
  • 一个空行(即,在 CRLF 之前没有任何内容的行),表示头部字段的结束
  • 可选的消息主体

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

请求行

请求行以方法令牌开头,后跟 Request-URI 和协议版本,并以 CRLF 结束。各元素由 SP(空格)字符分隔。

<Method> <Request-URI> <HTTP-Version>

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

请求方法

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

方法 描述
GET GET 方法用于使用给定的 URI 从给定的服务器检索信息。使用 GET 的请求应仅检索数据,且不应对数据产生其他影响。
HEAD 与 GET 相同,但仅传输状态行和头部部分。
POST POST 请求用于向服务器发送数据,例如客户信息、文件上传等,使用 HTML 表单。
PUT 使用上传的内容替换目标资源的所有当前表示。
DELETE 删除由 URI 给定的目标资源的所有当前表示。
CONNECT 建立到由给定 URI 标识的服务器的隧道。
OPTIONS 描述目标资源的通信选项。
TRACE 沿到目标资源的路径执行消息回环测试。

Request-URI

Request-URI 是一个 Uniform Resource Identifier,用于标识应用请求的资源。以下是指定 URI 的最常用形式:

Request-URI = origin form | absoluteURI | "*" | authority
方法 描述
星号(*) 形式 当 HTTP 请求不针对特定资源,而是针对服务器本身时使用,且仅在所用方法不一定适用于资源时允许。例如:OPTIONS * HTTP/1.1
绝对形式 当向代理发出 HTTP 请求时使用。要求代理转发请求或从有效缓存中提供服务,并返回响应。例如:GET https://www.example.com HTTP/1.1
源形式 Request-URI 的最常见形式是用于标识源服务器或网关上的资源。 例如,客户端希望直接从源服务器检索资源,会创建到主机“www.w3.org”端口 80 的 TCP 连接,并发送以下行:

GET /tailwind_css/index.htm HTTP/1.1

Host: www.example.com

注意,绝对路径不能为空;如果原始 URI 中没有,则必须指定为“/”(服务器根目录)。

权威形式 仅与 CONNECT 方法一起使用。

请求头字段

我们将在单独的一章中学习 General-headerEntity-header,届时将学习 HTTP 头字段。现在,让我们先了解什么是 Request header fields

请求头字段允许客户端向服务器传递有关请求的附加信息,以及有关客户端本身的信息。这些字段充当请求修饰符。以下是一些根据需求可用的重要 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

如果您要编写自己的自定义 Client 和 Web Server,可以引入自定义字段。

请求消息示例

现在让我们将所有内容组合起来,形成一个 HTTP 请求,从运行在 example.com 上的 web server 获取 hello.htm 页面。

GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.example.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

在这里,我们没有向服务器发送任何请求数据,因为我们是从服务器获取一个纯 HTML 页面。Connection 是一个 general-header,其余的头部是 request headers。以下示例展示了如何使用请求消息体向服务器发送表单数据:

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.example.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 将是消息体中数据的实际长度。以下示例展示了如何向你的 web server 传递纯 XML:

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.example.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>