安全测试 - HTTP 请求



HTTP 请求

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

  • 请求行

  • 零个或多个报头(通用|请求|实体)字段,后跟 CRLF

  • 空行(在 CRLF 之前没有任何内容的行),表示报头字段的结束

  • 可选的消息体

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

消息请求行

请求行以方法标记开头,后跟请求 URI、协议版本,并以 CRLF 结尾。这些元素由空格 SP 字符分隔。

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

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

请求方法

请求方法指示对由给定请求 URI标识的资源执行的操作。方法区分大小写,应始终以大写形式提及。HTTP/1.1 支持以下方法:

序号 方法和描述
1

GET

用于使用给定的 URI 从给定的服务器检索信息。使用 GET 的请求应该只检索数据,并且不应对数据产生任何其他影响。

2

HEAD

与 GET 相同,但仅传输状态行和报头部分。

3

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 https://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: https://www.w3.org/

注意 - 绝对路径不能为空。如果原始 URI 中不存在,则必须将其指定为 "/"(服务器根目录)

请求报头字段

请求报头字段允许客户端将有关请求以及客户端本身的附加信息传递给服务器。这些字段充当请求修改器,并且可以使用以下重要的请求报头字段,具体取决于需求:

  • 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>
http_protocol_basics.htm
广告