HTTP - 消息

  • 简述

    HTTP 基于客户端-服务器架构模型和无状态请求/响应协议,该协议通过跨可靠的 TCP/IP 连接交换消息来运行。
    HTTP“客户端”是一个程序(Web 浏览器或任何其他客户端),它建立到服务器的连接以发送一个或多个 HTTP 请求消息。HTTP“服务器”是一个程序(通常是一个 Web 服务器,如 Apache Web 服务器或 Internet 信息服务 IIS 等),它接受连接以便通过发送 HTTP 响应消息来为 HTTP 请求提供服务。
    HTTP 使用统一资源标识符 (URI) 来标识给定资源并建立连接。建立连接后,HTTP 消息以类似于 Internet 邮件 [RFC5322] 和多用途 Internet 邮件扩展 (MIME) [RFC2045] 使用的格式传递。这些消息包括requests 从客户端到服务器和 responses 从服务器到客户端,格式如下:
    
     HTTP-message   = <Request> | <Response> ; HTTP/1.1 messages
    
    HTTP 请求和 HTTP 响应使用 RFC 822 的通用消息格式来传输所需的数据。这种通用消息格式由以下四项组成。
    
    
    
    • 一个起始行
    • 0或多个报头字段后面跟着CRLF
    • 表示报头字段结束的空行(即在CRLF之前没有任何内容的行)
    • 一个可选的消息体
    
    
    在以下部分中,我们将解释 HTTP 消息中使用的每个实体。
  • 消息起始行

    起始行将具有以下通用语法:
    
    start-line = Request-Line | Status-Line
    
    我们将在分别讨论 HTTP 请求和 HTTP 响应消息的同时讨论 Request-Line 和 Status-Line。现在,让我们看看请求和响应情况下的起始行示例:
    
    GET /hello.htm HTTP/1.1     (This is Request-Line sent by the client)
    HTTP/1.1 200 OK             (This is Status-Line sent by the server)
    
  • header 字段

    HTTP 标header 字段提供有关请求或响应或有关消息正文中发送的对象的必需信息。HTTP 消息头有四种类型:
    • General-header: 这些头字段对请求和响应消息都具有普遍适用性。
    • Request-header: 这些头字段仅适用于请求消息。
    • Response-header: 这些头字段仅适用于响应消息。
    • Entity-header: 这些头字段定义了关于实体主体的元信息,或者如果没有主体存在,则定义关于请求标识的资源的元信息。
    上面提到的所有头都遵循相同的通用格式,每个头字段都由一个名称后跟一个冒号(:) 和字段值如下:
    
    message-header = field-name ":" [ field-value ]
    
    以下是各种标头字段的示例:
    
    User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
    Host: www.example.com
    Accept-Language: en, mi
    Date: Mon, 27 Jul 2009 12:28:53 GMT
    Server: Apache
    Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
    ETag: "34aa387-d-1568eb00"
    Accept-Ranges: bytes
    Content-Length: 51
    Vary: Accept-Encoding
    Content-Type: text/plain
    
  • 邮件正文

    消息正文部分对于 HTTP 消息是可选的,但如果它可用,则它用于携带与请求或响应关联的实体正文。如果关联实体主体,则通常Content-TypeContent-Length 标题行指定相关联的正文的性质。
    消息体是承载实际 HTTP 请求数据(包括表单数据和上传的数据等)和来自服务器的 HTTP 响应数据(包括文件、图像等)的消息体。下面显示的是消息正文的简单内容:
    
    <html>
       <body>
       
          <h1>Hello, World!</h1>
       
       </body>
    </html>
    
    接下来的两章将利用上面解释的概念来准备 HTTP 请求和 HTTP 响应。