学习笔记 HTTP权威指南 第3章 HTTP报文

165 阅读4分钟

第一章从整体上介绍了HTTP的组成部分及大致的工作方式.接下来就是分别介绍各个组成部分,第二章介绍了其中的URL和资源. 而HTTP就是把这些资源变成报文在网上传输的.所以这章就详细的介绍了HTTP报文,包括他是什么,由哪些部分组成,以前各组成部分的详细介绍.

3.1 报文流

报文是数据块.在客户端和服务器之间流动的数据块.

3.1.1 流入流出

  • 向服务器发送数据叫流入
  • 向客服端发送数据叫流出

3.1.2 上游下游

数据会从发出方流向接收方

  • 发送数据的一方是上游
  • 接收数据的一方是下游
  • 客户端和服务器都可以成为上游/下游

3.2 报文的组成部分

报文由3部分: 起始行 + 首部 + 主体

  • 起始行是ASCii文本
    • 这就是为什么HEADER头里不能传递汉字的原因
  • 主体可以是二进制也可以是文本

3.2.1 报文的语法

请求报文

<method> <request-url> <version>
<headers>

<entity-body>

响应报文

<version> <status> <reason-phase>
<headers>

<entity-body>

3.2.2 起始行

详细介绍了起始行的每个构成要素,基本上是常识了,这里只记2个重点

  • 方法里面,除了POST和PUT,其他的都不带请求主体
  • 版本号中的数字单独比较,所以1.11比1.2的版本大

3.2.3 首部

概要介绍首部的4个组成部分,这个可以参考图解HTTP第6章,这里不做笔记

  • 首部延续行
    • 其中提到一个新概念,就是字符串太长需要换行时的处理方式,必须在前面多一个tab制表符
    • 这个有点类似于IDE限制编辑器宽度自动换行的效果

3.3 方法

所有方法在图解HTTP中有详细介绍和笔记,这里只记录一些新的概念和之前没搞懂的东西,其余的可参考图解HTTP第2章

3.3.1 安全方法

  • 像GET/HEAD这类请求就是安全方法
    • 不会产生副作用
    • 请求是幂等的,即不管请求多少次,结果都是一样
  • 使用不安全方法时,应该给出警告
    • 比如DELETE
    • 这个可以应用在REST接口的请求基类里面

3.3.2 TRACE

这个在图解HTTP里面没有看太明白,这里讲的清楚一些

TRACE请求行程最后一站的服务器,会把请求首部全部返回给客户端.这样客户端就可以分析,服务器收到的请求首部和自己发出的请求首部有哪些不同了.

通过这些东西的学习.觉得REST接口还是有很多好处的

  • 可读性更强,方法即代表动作
  • 代码更加规范,某种操作能用某种方法
  • 有利于封装,根据规范约定的状态码进行响应处理
  • 加速,相比POST带主体,很多方法是不需要主体的

3.3.9 扩展方法

WebDAV里面的方法就属于扩展方法,但是WebDAV到底是个啥呢.实际中有什么代表性的软件没呢?

3.4 状态码

书上介绍的非常详细.也没必要每一个都抄一遍,抄了也记不住.简单的可以参考图解HTTP第4章.完成的可以参考MDN文档 developer.mozilla.org/en-US/docs/…

302,303,307的区别

  • 302是HTTP/1.0之前的应用程序使用的
  • 303是HTTP/1.1使用的
  • 307这个还是没绕明白,应该有了303就没必要要307了嘛

3.5 首部

这里只记录各种首部的分类,这里的分类比图解HTTP要详细很多,这样有助于理清思路.具体的首部字段参考图解HTTP第6章

3.5.1 通用首部

  • 信息性首部
    • Connection
    • Date
    • MIME-Version
    • Trailer
    • Transfer-Encoding
    • Update
    • Via
  • 缓存首部
    • Cache-Control
    • Pragma

3.5.2 请求首部

  • 信息性首部
    • Client-IP
    • From
    • Host
    • Referer
    • UA-Color
    • UA-CPU
    • UA-Disp
    • UA-OS
    • UA-Pixels
    • User-Agent
  • Accept首部
    • Accept
    • Accept-Charset
    • Accept-Encoding
    • Accept-Language
    • TE
  • 条件请求首部
    • Except
    • If-Match
    • If-Modified-Since
    • If-None-Match
    • If-Range
    • If-Unmodified-Since
    • Range
  • 安全请求首部
    • Authorization
    • Cookie
    • Cookie2
  • 代理请求首部
    • Max-Forward
    • Proxy-Authorization
    • Proxy-Connection

3.5.3 响应首部

  • 信息性首部
    • Age
    • Public
    • Retry-After
    • Server
    • Title
    • Warning
  • 协商首部
    • Accept-Ranges
    • Vary
  • 安全响应首部
    • Proxy-Authenticate
    • Set-Cookie
    • Set-Cookie2
    • WWW-Authenticate

3.5.4 实体首部

  • 信息性首部
    • Allow
    • Location
  • 内容首部
    • Content-Base
    • Content-Encoding
    • Content-Language
    • Content-Length
    • Content-Location
    • Content-MD5
    • Content-Range
    • Content-Type
  • 实体缓存首部
    • ETag
    • Expires
    • Last-Modified