《图解HTTP》读书笔记

用假期时间读了一下《图解HTTP》。
像作者所说,《HTTP权威指南》单是厚度就已经让人望而生畏了,再加上各种专业术语,大概读了两页就直接崩溃了。

《图解HTTP》则非常非常非常适合新手入门,把广泛上需要了解的HTTP相关知识都讲通,又不会觉得泛泛或者小儿科。
前端朋友可能很多都非科班出身,用这本来入门是再适合不过了。

在这里,我做一个读书笔记以加深印象。


第1章 了解Web及网络基础

  • Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成客户端到服务器端一系列运作流程,也就是说,Web是建立在HTTP协议上通信的。

  • 通常互联网是在 TCP/IP 协议族的基础上运作的,HTTP属于这个族的一个子集。

  • TCP/IP 协议很重要的一个概念就是分层。按层次分别为:
    应用层 >>> 传输层 >>> 网络层 >>> 链路层。
    一个HTTP请求发出后,大致的流程即是这样的:
    首先客户端在应用层发出一个想看某个Web页面的HTTP请求 >>>
    为方便传输,传输层把从应用层收到的数据(HTTP请求报文)分割成多个数据包并标记序号后,转发给网络层 >>>
    在网络层增加作为通信目的地的MAC地址后转发给链路层。
    至此,发往网络的通信请求就准备好了。

  • 发送端或者接收端,层与层之间传递数据时,每一层会被打上或消去该层所属的首部信息。

  • DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址的解析服务。

  • TCP 协议位于传输层,提供可靠的字节流服务。因为传输层将数据分割,TCP 协议采用三次握手(three-way handshaking)策略以确保数据准确送达:首先发送一个带有 SYN 标志的数据包给对方 >>>
    接收端收到后回传一个带有 SYN/ACK 标志的送达确认信息 >>>
    最后发送端再回传一个带有 ACK 标志的数据包。
    至此,“握手”结束。

  • IP 协议位于网络层。作用是把各种数据包发送给对方。在此期间,会通过一个 ARP 协议将 IP 地址解析为 MAC 地址。


第2章 简单的 HTTP 协议

  • HTTP 协议规定,请求从客户端发出,最后服务器端响应请求并返回。也就是说,一定是从客户端开始建立通信,服务器端没有接收到请求之前不会发送响应。

  • 请求报文是由请求方法、请求URI、协议版本、请求首部字段(可选)和内容实体构成的。

GET /html/index.html HTTP/1.1
Host: ddrenched.com
name=ddrenched
  • 响应报文是由协议版本、状态码、状态码原因短语、响应首部字段(可选)和主体构成。
HTTP/1.1 200 OK
Date: Fri, 30 Jua 2017 10:59:19 GMT

...
  • HTTP 是不保存状态的协议:不对请求和响应的通信状态进行保存。
    每当有新的请求发送时,就会有对应的新响应产生。
    这是为了快速处理大量任务。

  • HTTP 方法

    • GET:获取资源。该方法用来请求访问已经 URI 识别的资源。
    • HEAD:获取报文首部。和 GET 方法一样,只是不返回报文主体。常用来确认 URI 的有效性和资源的更新时间等。
    • POST:传输实体资源。该方法用来传输实体的主体。虽然 GET 方法也可以传输实体的主体,但一般用 POST 方法。
    • PUT:用来传输文件。要求在请求报文的主体中包含内容,然后保存到请求的 URI 指定的位置。
    • DELETE:用来删除文件。与PUT方法相反,DELETE 方法按照请求 URI 删除指定资源。
    • OPTION:用来查询请求的 URI 资源支持的方法。
    • CONNECT:要求与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要是为了使用 SSL(Secure Socket Layer,安全套接)和 TLS(Transport Layer Security,传输层安全)协议把信息内容加密后经网络隧道传输。
  • 持久连接:只要任意一方(客户端和服务器端)没有明确提出断开连接,则保持 TCP 连接状态。
    在 HTTP1.1 中,所有连接默认都是持久的。

  • Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端状态。
    Cookie 会根据服务器端发送的响应报文内的一个叫 Set-Cookie 的首部字段,通知客户端保存 Cookie。当下次客户端发送请求到服务器端时,客户端会在报文中加入 Cookie 值再发送出去。


第4章 返回结果的 HTTP 状态码

  • 状态码的职责是描述客户端发出请求的返回结果,状态码以三位数字和原因短语组成。
    数字中的第一位指定了响应类别:

    • 1XX:Informationao(信息性状态码)接受的请求正在处理
    • 2XX:Success(成功状态码)请求正常处理完毕
    • 3XX:Redirection(重定向状态码)需要附加操作以完成请求
    • 4XX:Client Error(客户端错误状态码)服务器无法处理请求
    • 5XX:Server Error (服务器错误状态码)服务器处理请求错误
  • 2XX 成功

    • 200 OK:客户端发来的请求被服务器正常处理了。
    • 204 No Content:服务器正常处理,但返回的响应报文实体中没有主体。
  • 3XX 重定向

    • 301 Moved Permanently:永久性重定向。表示请求的的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。
      如果已经把资源对应的 URI 保存为书签,这时应该按照 Location 首部字段提示的 URI 重新保存。
    • 302 Found:临时性重定向。表示请求的资源已被分配了新的 URI,希望用户(本次)使用新的 URI 访问。
      和301状态码相似,但302只是临时的,比如 URI 被保存成书签,但不会像301那样去更新书签。
    • 303 See Other:表示由于对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求资源。
    • 304 Not Modified:表示客户端发送附带请求时(If-Match,If-None-Match,If-Modified-Since,If-Unmodified-Since,If-Range,中任一首部),服务器端允许请求访问资源,但因发生了未满足条件的情况,直接返回304。
      304状态码返回时,不包含任何响应主体部分。
      304虽然被划分在3XX中,其实和重定向没什么关系。
    • 307 Temporary Redirect:临时重定向。与302有着相同含义。
  • 4XX 客户端错误

    • 400 Bad Request:表示请求报文中语法错误。当错误发生时,需要求改请求内容后再次发送请求。
    • 401 Unanthorized:表示发送的请求需要通过 HTTP 认证。
    • 403 Forbidden:表示对请求资源的访问被服务器拒绝了。
      未获得系统访问权限,访问权限出现问题等情况都可能发生403。
    • 404 Not Found:表示服务器上无法找到请求的资源。
  • 5XX 服务器错误

    • 500 Internal Server Error:表示服务器执行请求时发生错误。
    • 503 Service Unavailable:表示服务器暂时超载无法处理。

第5章 与 HTTP 协作的 Web 服务器

  • HTTP/1.1 协议允许一台服务器搭建多个 Web 站点。

  • Web 托管服务可以用一台服务器为多个域名运行,这是使用了 Virtual Host(虚拟主机)的功能。

  • 客户端使用 HTTP 协议访问服务器时,会经常采用域名的方式。在互联网上,域名通过 DNS 服务映射到 IP 地址。可见,当请求发送至服务器时,已经是 IP 地址形式的访问了。

  • 由于用作寄存的服务器的 IP 地址是相同的,多个虚拟主机寄存的不同 Web 站点如何区分呢? 必须在 Host 首部内指定主机名或域名的 URI。

  • 代理。代理服务器的基本行为就是接受客户端的请求后转发给其它服务器。代理不改变 URI,直接发送给前方持有资源的目标服务器(称为源服务器)。从源服务器返回的响应经过代理服务器后再传给客户端。

  • 在 HTTP 通信中,可以级联多台代理服务器。请求和响应的转发会经由数台类似锁链一样链接起来的代理服务器。每次转发,需要附加 Via 首部字段以标示经过的主机信息。

  • 网关工作机制和代理十分相似,网关能使通信线路上的服务器提供非 HTTP 协议服务。

  • 隧道的目的是确保客户端与服务器进行安全的通信 。
    隧道可以按要求建立一条与服务器的通信线路,届时使用加密手段进行通信。


第6章 HTTP 首部

  • HTTP 首部字段根据用途划分为4种类型:

    • 通用首部字段(General Header Fields)
    • 请求首部字段(Request Header Fields)
    • 响应首部字段(Response Header Fields)
    • 实体首部字段(Entity Header Fields)
  • HTTP/1.1通用首部字段

    • Cache-Control
      操作缓存的工作机制。
      • Cache-Control: public
        表明其它用户也可以利用缓存。
      • Cache-Control: private
        与 public 相反,响应只对特定用户,对于其它用户发送的请求,代理服务器不会返回缓存。
      • Cache-Control: no-cache
        目的是为了防止从缓存中返回过期的资源。
        客户端不会接受缓存过的响应,于是,代理服务器必须把请求转发给源服务器。
      • Cache-Control: no-store
        暗示请求或响应中包含机密信息。该指令规定缓存不能再本地存储请求或响应的任一部分。
    • Connection
      Connection 首部字段具备两个功能:一、控制不再转发给代理的首部字段,二、管理持久连接。
      • Connection: close
        HTTP/1.0默认持久连接。当明确断开连接时,使用 Connection: close 字段。
      • Connection:Keep-Alive
        旧版本 HTTP 协议则需要使用这个字段保持持久连接。
    • Date
      Date 字段表明创建报文的时间。
    • Transfer-Encoding
      该字段规定了传输报文主体时采用的编码方式。
    • Upgrade
      该字段用于检测 HTTP 协议是否可使用更高版本进行通信。
    • Via
      该字段用来追踪客户端与服务器端之间的请求和响应报文的传输路径。
      报文经过代理或网关时,会在首部字段 Via 中附件该服务器的信息后再进行转发。
    • Waring
      通常用来告知用户一些与缓存相关的警告信息
  • 请求首部字段

    • Accept
      告知服务器用户代理能够处理的媒体类型及优先级。
    • Accept-Charset
      告知服务器用户代理支持的字符集及优先级。
    • Accept-Encoding
      告知服务器用户代理支持的内容编码及优先级。
    • Accept-Language
      告知服务器用户代理能够处理的自然语言集及优先级。
    • Authorization
      告知服务器用户代理的认证信息。
      通常通过服务器认证的用户代理会在接收到返回401状态码后,把首部字段 Authorization 加入请求中。
    • Expect
      告知首部字段期望出现某种特定行为。
    • From
      告知服务器用户代理的用户电子邮件地址。
    • Host
      告知服务器请求的资源所处的主机名和端口号。
      Host 是 HTTP/1.0 规范内唯一一个必须包含在请求内的首部字段。
    • If-Match
      形如 If-XXX 这样的请求首部字段,可称为条件请求。服务器接受到带有附加条件的请求后,只要判断条件为真时才会执行请求。
      If-Match 告知服务器资源所用的实体标记(ETag)值。
    • If-None-Match
      与 If-Match 相反,只有当 ETag 与请求资源的 ETag 不一致时,告知服务器处理该请求。
    • If-Range
      告知服务器若指定的 If-Range 字段值和请求资源的 ETag 值相一致时处理请求。
    • If-Modified-Since
      告知服务器若 If-Modified-Since 字段值早于资源更新时间,则希望能处理该请求。
    • If-Unmodified-Since
      和 If-modified-Since 作用相反。它告知服务器,指定的请求资源只有在字段内指定的日期时间之后,未发生更新的情况下,才能处理请求。
    • Max-Forwards
      通过 TRACE 方法或 OPTIONS 方法,发送包含 Max-Forwards 字段的请求时,该字段指定可经过的服务器最大数目。
    • Proxy-Authorization
      与 Authorization 作用类似,接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段 Proxy-Authorization 的请求,以告知服务器所需要的信息。
    • Range
      包含 Range 即可告知服务器资源指定范围。
    • User-Agent
      将创建请求的浏览器和用户代理等信息传达给服务器。
  • 响应首部字段

    • Accept-Ranges
      告知客户端服务器是否能处理范围请求。
      可处理范围请求值为 bytes,反之则为 none。
    • Age
      告知客户端,源服务器在多久前创建了响应。
    • ETag
      告知客户端实体标示。
      它是一种将资源以字符串形式做唯一性标识的方式。每份资源都会分配对应的 ETag 值。
    • Location
      将响应接收方引导至某个与请求 URI 位置不同的资源。
      该字段通常配合3XX,提供重定向的 URI。
    • Proxy-Authenticate
      该字段会把由代理服务器所要求的认证信息发送给客户端。
    • Retry-After
      该字段告知客户端在多久之后再次发送请求。
      通常配合503响应。
    • Server
      告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。
  • 实体首部字段

    • Allow
      告知客户端能够支持的 Request-URI 指定资源的 HTTP 方法。
    • Content-Encoding
      告知客户端服务器对实体的主体部分选用的内容编码方式。
    • Content-Language
      告知客户端,实体主体使用的自然语言。
    • Content-Length
      告知客户端,实体主体部分的大小。
    • Content-Location
      给出报文主体部分相对应的 URI。
    • Content-Range
      告知客户端作为响应返回的实体的那个部分符合范围请求。
    • Content-Type
      说明了实体主体内对象的媒体类型。
    • Expires
      将资源失效的日期告知客户端。
    • Last-Modified
      致命资源最终修改时间。

第7章 确保 Web 安全的 HTTPS

  • HTTP 的缺点:
    通信使用明文,可能会被窃听
    不验证通信双方的身份,可能遭遇伪装
    无法证明报文的完整性,可能遭篡改

  • HTTP 没有加密机制,但可以通过 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全传输协议)的组合使用,加密 HTTP 通信内容。

  • 证书手段: 证书由第三方机构颁发,用以证明服务器和客户端的实际存在。

  • HTTP 加上加密处理和认证以及完整性保护后即是 HTTPS。

  • HTTPS 并非是应用层的新协议。只是 HTTP 通信接口部分用 SSL和 TSL 协议代替而已。
    通常, HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信。

[完]

你可能感兴趣的:(《图解HTTP》读书笔记)