《HTTP权威指南》阅读笔记

前言

  历时两个多月,终于把经典图书《HTTP权威指南》读完了。虽然看上去厚厚的一本,实际上只要有一些计算机网络基础,读起来还是很顺利的,并没有想象中那么难啃。
  全书讲的很细致,涵盖了HTTP的方方面面,其中有一些都是些众所周知的常识,比如前几张关于HTTP的基本介绍、URL与资源等,但是也值得读一读,能够把之前碎片化的认知给系统起来。
  本文着重记录一些笔者在读书过程中印象比较深刻有趣的点。

第三章 HTTP报文

报文的格式
请求报文

HTTP请求报文

响应报文

HTTP响应报文

方法
方法简述是否包含主体详述
GET从服务器获取一份文档
HEAD获取文档的HTTP首部,而不需要具体内容主要用于在不获取资源的情况下获取资源的状态,比如资源的类型,是否存在,是否过期等信息
POST向服务器发送需要处理的数据
PUT将请求的主体部分存储到服务器上
DELETE从服务器上删除一个文档
TRACE对可能经过代理服务器传送到服务器上去的报文进行追踪
OPTIONS决定可以在服务器上执行那些方法

方法不仅仅只有这七种,还有一些扩展的方法,另外服务器不一定把这七种全部都实现。

状态码
范围简述典型
1xx信息提示100:让客户端继续它的表演,,用的不多
101:切换协议,根据Update首部来切换协议,比如切换websocket协议
2xx成功200:成功
3xx重定向300:返回多个资源的URL供客户端选择,比如返回多种语言的相同文档
301:永久重定向
302、303:临时重定向
304:资源没有被改变,比如客户端发送了一个特殊的If-Modified-Since首部,说明只读取某个时间之后修改的文档,而该文档实际没被修改,服务端就会返回一个304
4xx客户端错误401:授权错误
402:需要host字段
403:禁止访问
404找不到
5xx服务端错误502
首部
通用首部
首部名描述备注
Connection描述连接有关的选项,比如keep-alive
data日期和时间标志,说明报文是什么时候创建的
Update给出发送端想要升级的新版协议
Via显示了报文经过的中间节点(代理和网关)
请求首部
首部名描述备注
client_ip客户端IP
From客户端用户的email地址
User-Agent将发起请求的应用程序名称告知服务器
Host给出了接收请求的服务器的主机号和端口号
Referer从哪里来的
Accept告诉服务器能够发送的媒体类型,比如text,html,mp3等
Accept-charset告诉服务器能够发送哪些字符集,比如utf-8
Accept-language告诉服务器能够发送哪些语言
Accept-Encoding告诉服务器能够发送哪些编码方式,这个编码方式是对实体进行编码,比如gzip
if-match如果实体标记与文档当前的实体标记相匹配,就获取这份文档,比如MD5值匹配
if-modified-since如果在某个时间之后该文档被修改过,就获取这份文档
if-none-match如果标记不匹配就获取,说明文档可能被修改过
if-Range允许对文档的某个范围进行条件请求,常用于断点续传
if-unmodified-since如果某个时间之后该文档没被修改过,就获取这份文档
Range如果服务器支持范围请求,就请求资源的指定范围,用于断点续传
Authorization包含客户端提供给服务器的认证数据
cookie客户端向服务器传送一个令牌
Max-forward从客户端到服务器的路上,最大能经过的次数
Proxy-Authorization代理认证时使用
Proxy-connnect与代理建立连接时使用
响应首部
首部名描述备注
server服务器应用程序软件的名称和版本
Accept-ranges对此资源来说,服务器可接收的范围类型
set-cookie在客户端设置一个令牌
实体首部
首部名描述备注
location资源的实际位置,用于重定向
Content-Base解析实体中的相对URL时使用的基础URL
Content-Length实体的长度
Content-Encoding实体的编码方式,比如gzip
Content-Language实体的语言,比如en-US
Content-MD5主体的MD5校验和
Content-Range在整个资源中此实体表示的字节范围
Content-Type这个主体的对象类型
Expires过期时间,缓存时使用
Last-modified最后一次被修改的时间

第四章 连接管理

TCP对HTTP时延的影响
  • TCP的三次握手
  • TCP慢启动
  • 数据聚集的Nagle算法,攒够一波再发送
  • 捎带确认的TCP延迟确认算法,TCP可能不会立即确认而是要等一会看在确认报文里能不能捎带一些其他报文
  • TIME_WAIT累积与端口耗尽

某个TCP端点关闭连接时,会在内存中维护一个小的控制块,用来记录最近所关闭链接的IP地址和端口号。这类信息会保存一段时间(称为2MSL,通常为两分钟),用来确保两分钟内不会创建具有相同地址和端口号的新连接。
客户端在两分钟内无法重复使用同一个端口,而且端口的数量有限。所以连接率就被限制在了60000/120=500次/秒了。

连接管理
  • 串行连接
  • 并行连接
    建立多条连接,不一定会更快。
  • 持久连接
    复用同一条连接,避免了TCP的慢启动的拥塞适应阶段
  • 管道化连接
    可以一次性发送多条请求,但是请求和响应的顺序必须一一对应。可能会有队头阻塞的问题 。

关于连接管理,HTTP/2版本做出了很多优化,可以参考《HTTP/2基础教程》协议、特性、详解

第二部分 HTTP结构

代理

代理的作用:内容过滤、安全防火墙、缓存、文档访问控制、匿名者、转码器
流量如何通过代理?

  • 修改客户端,比如浏览器设置代理
  • 修改网络,修改网络的基础设施,比如修改交换机,将HTTP请求转发给代理
  • 修改DNS,将DNS解析的IP地址直接指向代理服务器
  • 修改服务器,服务器在302重定向报文中填写代理服务器的地址
缓存

缓存的处理步骤:接收、解析、查询、新鲜度检测、构造响应、发送、日志
新鲜度检测相关:Expires首部说明过期时间,max-age最大生存时间。if-modified-since和if-none-match等首部可以与服务器验证是否新鲜、

网关

协议网关:Web网关在一侧使用HTTP协议,在另一侧使用其他协议,比如邮件协议、FTP、HTTPS协议等
资源网关:收到HTTP请求,调用其他应用程序API返回相应的资源。

隧道

HTTP隧道中可以传输一些其他协议,比如SSH等,这样就可以通过80端口传输其他协议使得其他协议可以通过防火墙。
HTTPS:在SSL隧道中的HTTP,SSL先握手建立安全的隧道,然后在隧道中进行HTTP协议的传输。

中继

没毛用

第十一章 客户端识别与cookie机制

个性化接触
服务端想为每个用户提供个性化的服务,就需要能够区分不同的客户端,有以下几种机制:

  • HTTP首部
    客户端在HTTP首部填写一些信息,比如User-Agent等
  • IP地址
    服务端根据客户端的IP地址区分客户端
  • 用户登陆
    每次请求都需要用户登陆一下
  • 胖URL
    根据不同的用户产生特殊的URL
  • cookie
    最常用的机制

第十二章 基本认证机制

服务端返回401要求客户端输入认证信息
客户端将认证信息(用户名、密码)填在Authorization首部中,Base64加密,传送给服务端。
基本认证是非常不安全的,多用于企业内部。

第十三章 摘要认证

摘要认证还没有得到广泛应用
主要思想是通过随机数和密码摘要来进行握手。

第十四章 安全HTTP

  • 对称秘钥加密技术
    双方拿的秘钥一致。常见算法DES。优点是加解密迅速。缺点是不安全、繁杂。
  • 非对称秘钥
    分为私钥和公钥。常见算法RSA。尽管每个人都可以用同一个密钥发给X的报文进行编码,但是除了X,其他人都无法对报文进行解码。
  • 混合加密
    非对称加密虽然安全,但是比较慢,常见的实现是用非对称加密建立安全会话,然后再通过对称秘钥进行数据传输。
  • 数字签名
    数字签名不可否认,防止报文被篡改。通过私钥加密,可以达到数字签名的效果。
  • 数字证书
    权威机构可以颁发数字证书,证书中包含发布者的基本信息和对象的公开秘钥以及证书颁发机构的签名。
  • HTTPS
    先建立TCP连接,在进行SSL握手对加密参数进行沟通并交换秘钥。然后在SSL隧道中进行HTTP传输。

第四部分 实体、编码和国际化

  • 内容编码
    对具体的内容进行编码,比如对一个HTML文档进行压缩。内容编码代号有:gzip、compress、deflate、identity
  • 传输编码
    传输编码是为了改变报文中的数据再网络上的传输方式。最新的HTTP规范只定义了一种传输编码,就是分块编码
  • 分块编码
    允许服务器把主题逐块发送

第二十章 重定向与负载均衡

重定向的方法:

  • HTTP重定向
  • DNS重定向
  • 任播寻址
    几个地理上分散的Web服务器拥有完全相同的IP地址。任播寻址仍然是项实验性技术
  • MAC转发
  • IP地址转发
  • 网元控制协议

参考

HTTP报文解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值