HTTP - 请求

  • 简述

    HTTP 客户端以请求消息的形式向服务器发送 HTTP 请求,请求消息包括以下格式:
    • 一个起始行
    • 0或多个报头字段后面跟着CRLF
    • 表示报头字段结束的空行(即在CRLF之前没有任何内容的行)
    • 一个可选的消息体
    以下部分解释了 HTTP 请求消息中使用的每个实体。
  • Request-Line

    Request-Line 以方法令牌开头,后跟 Request-URI 和协议版本,并以 CRLF 结尾。元素由空格 SP 字符分隔。
    
    Request-Line = Method SP Request-URI SP HTTP-Version CRLF
    
    让我们讨论请求行中提到的每个部分。
  • 请求方法

    请求 方法 指示要在给定资源标识的资源上执行的方法 Request-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
    执行消息环回测试以及目标资源的路径。
  • Request-URI

    Request-URI 是一个统一资源标识符,用于标识应用请求的资源。以下是指定 URI 的最常用形式:
    
    Request-URI = "*" | absoluteURI | abs_path | authority
    
     
    SN 方法和说明
    1 星号 *当 HTTP 请求不适用于特定资源,而是适用于服务器本身时使用,并且仅在使用的方法不一定适用于资源时才允许使用。例如:
    OPTIONS * HTTP/1.1
    2 absoluteURI在向代理发出 HTTP 请求时使用。请求代理从有效缓存转发请求或服务,并返回响应。例如:
    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。现在,让我们检查一下 Request 标头字段是什么。
    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
    如果您要编写自己的自定义客户端和 Web 服务器,您可以引入自定义字段。
  • 请求消息示例

    现在让我们把它们放在一起形成一个 HTTP 请求来获取 hello.html 来自 cainiaoya.com 上运行的 Web 服务器的页面
    
    GET /hello.htm HTTP/1.1
    User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
    Host: www.cainiaoya.com
    Accept-Language: en-us
    Accept-Encoding: gzip, deflate
    Connection: Keep-Moove
    
    这里我们没有向服务器发送任何请求数据,因为我们正在从服务器获取一个纯 HTML 页面。Connection 是一个通用头,其余的头是请求头。以下示例显示如何使用请求消息正文将表单数据发送到服务器:
    
    POST /cgi-bin/process.cgi HTTP/1.1
    User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
    Host: www.cainiaoya.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: length
    Accept-Language: en-us
    Accept-Encoding: gzip, deflate
    Connection: Keep-Moove
    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.cainiaoya.com
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    Accept-Language: en-us
    Accept-Encoding: gzip, deflate
    Connection: Keep-Moove
    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://clearforest.com/">string</string>