学习笔记 图解HTTP 第2章 简单的HTTP协议

455 阅读3分钟

2.1 HTTP协议用于客户端与服务器端之间的通信

就是要明确三个概念,只有客户端/服务端/通信线路存在时才会有HTTP协议的用武之地

这个可以用打电话来类比,要打一个电话,至少得有一个打电话的,一个接电话的,再就是有一条卫星线路/电话线才行.把声音置换成光波传送到另一个人的电话里,就是HTTP协议要做的事了.

2.2 通过请求与响应报文交换数据

那HTTP究竟是怎么发挥它的用武之地的呢?就是通过在客户端发送请求报文,服务器端发送响应报文来交换数据,达到通信的目的.

  • 请求报文
    • 请求首部
      • 方法
      • URI
      • 协议版本
    • 内容实体
  • 响应报文
    • 响应首部
      • 协议版本
      • 状态码
      • 状态码原因短语
    • 响应主体

这个用打电话来类比就是,怎么把声音传到另外一个人的耳朵里

2.3 HTTP是不保存状态的协议

使用HTTP协议,每当有新的请求发送,就会有新的响应产生.感觉这个现在看起来是好多余的说明,这不就是和1+1等于2一样正常的事么?为什么还要拿出来讲呢?不是越讲越让人糊涂吗?

用打电话来类比就是,如果你不开通来电显示功能(虽然现在都是默认开通的),你根本不知道这次是谁给你打电话的.

2.4 请求URI定位资源

  • 访问一个域名
  • 会在请求首部的host里面自动带上域名
  • 然后在请求首部指定URI
    • 如果把URI指定为*号,只是查询HTTP服务器支持哪些HTTP方法
GET /UpdateCheck.aspx?isBeta=False HTTP/1.1
Host: www.fiddler2.com
GET * HTTP/1.1
Host: www.fiddler2.com

2.5 告知服务器意图的HTTP方法

在向服务器发送请求的时候,至少要指定下面中的任何一种

  • GET: 获取资源
  • POST: 发送数据
    • 比GET传送的数据量更大
  • PUT: 传送文件
  • HEAD: 获得报文首部
    • 比GET更快,用于确认资源有效性和更新时间等
  • DELETE: 删除文件
  • OPTIONS: 查询针对请求URI可使用的方法
  • TRACE: 追踪代理路径
    • 这个怎么去模拟复现一下呢?
  • CONNECT: 要求用隧道协议连接代理
    • 同上,如何复现

2.6 持久连接节省通信量

正常情况下,每进行一次HTTP通信都要断开一次连接.即TCP握手建立连接 -> 数据通信 -> TCP挥手断开连接.这样消耗的资源大,访问速度慢.

2.6.1 持久连接

通过keep-alive或connection reuse保持TCP的链接状态,只要没有一方明确提出断开,就一直连接.

  • 减少重复连接断开TCP的开销
  • 加快Web页面的显示速度
  • HTTP/1.1默认都是持久连接

2.6.2 管线化

实际上就是让请求的链式执行变成并发执行.这个可以通过Chrome开发者工具的Network面板观察的到

2.7 使用Cookie的状态管理

默认情况下,建立链接后,服务器根本不知道这个链接背后的客户端是谁.

  • 在响应报文中设置Set-Cookie首部,通知客户端保存Cookie
  • 客户端再次发起请求时,就带上之前服务端返回的那个Cookie
  • 服务端收到请求后,发现就Cookie,就可识别是谁了

TODO

2.4 CGI到底是个啥子东西,起什么作用

2.5 跨域拦截后为什么要报一个OPTIONS的错误呢

2.6.1 怎么看或者测试一个链接是处于连接状态还是关闭状态?