http 原理及请求组成

http 原理

HTTP 协议工作于客户端-服务端架构上。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。

特点

  1. HTTP 是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  2. HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过 HTTP 发送。客户端以及服务器指定使用适合的 MIME-type 内容类型。
  3. HTTP 是无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

请求组成

起始行

包含三个元素:

  • 一个 HTTP 方法:GET PUT POST OPTION HEAD等;
  • 请求目标:通常是一个 URL,或者是协议、端口和域名的绝对路径;
  • HTTP 版本

由不区分大小写的字符串,紧跟着的冒号 ‘:’ 和一个结构取决于 header 的值组成。 整个 header(包括值)由一行组成,这一行可以相当长。

  • 有许多请求header可用时,它们可以分为几组;

Body

不是所有的请求都有一个 body:例如获取资源的请求,GET,HEAD,DELETE 和 OPTIONS,通常它们不需要 body。 有些请求将数据发送到服务器以便更新数据:常见的的情况是 POST 请求; 大致可以分为两类:

  • Single-resource bodies:由一个单文件组成。该类型 body 由两个 header 定义: Content-TypeContent-Length.
  • Multiple-resource bodies:由多部分 body 组成,每一部分包含不同的信息位。通常是和 HTML Forms 连系在一起

响应组成

状态行

相应的起始行。包含:

  • 协议版本
  • 状态码
  • 状态文本

例:HTTP/1.1 404 Not Found

Header

与请求的 header 类似

Body

与请求的 body 类似,可分为三类:

  • Multiple-resource bodies,由多部分 body 组成,每一部分包含不同的信息位。通常是和 HTML Forms 连系在一起
  • Single-resource bodies,由未知长度的单个文件组成,通过将 Transfer-Encoding 设置为 chunked 来使用 chunks 编码。
  • Multiple-resource bodies,由多部分 body 组成,每部分包含不同的信息段。但这是比较少见的。

其他

浏览器这样的客户端发出的消息叫做 requests,被服务端响应的消息叫 responses

  • HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。
  • 主要用于会话状态管理、个性化设置、浏览器行为跟踪

一般的HTTP回话流程

  • 建立连接
    • 用户输入URL,客户端(浏览器)发起建立连接
    • URL会包含域名和端口,当端口为80(默认)时,可以省略
  • 发送客户端请求
    • 建立连接后,用户代理(一般为浏览器)即可发送请求
    • 请求分为三部分(起始行 header body
  • 服务器响应结构
    • 响应分为三部分(起始行 header body

常见的响应状态码

  • 200 ;OK 请求成功
  • 301 :Moved Permanently. 请求资源的 URI 已被改变
  • 404 : Not Found. 服务器无法找到请求的资源
  • 500 :服务器内部错误