图解HTTP读书笔记
最近抽空读完了图解 HTTP 这本书,顺便写了一些笔记,没有包含 HTTPS 的内容,有机会单独写一篇,知识点整理如下:
1.通常使用的网络是在 TCP/IP 协议族基础上运作的。HTTP 属于内部的一个子集
2.TCP/IP 是互联网关联各类协议集合总称。计算机与网络设备互相通信,双方必须基于相同的方法,比如,如何探测通信目标,哪一边发起通信,使用什么语言,如何结束,都需要一种规则,这种规则被称为协议(protocol)
3.TCP/IP 协议按照层分别是:应用层、传输层、网络层、数据链路层
1 | |

4.ip:internet protocol 网际协议,位于网络层。IP 协议作用是把各种数据包传送给对方。需要的条件是 IP 地址和 MAC 地址(Media Access Control Address)网卡所属固定地址
5.通过 ARP 协议解析 MAC 地址。IP 通信需要依赖多台计算机和网络设备。利用下一站中转 MAC 地址来搜索下一个中转目标
6.TCP 位于传输层,提供可靠的字节流服务,为了确保数据可以准确无误的到达目标,TCP 采用了三次握手(three-way handshaking)策略。。握手过程使用了 TCP 标志————SYN(synchronize)和 ACK(acknowledgement)
发送端首先发送一个带 SYN 标志的数据包给对方,接收端接收到后,回传一个带有 SYN/ACK 标志的数据包以确认传达确认信息,最后,发送端在回传一个 ACK 标志的数据包,代表握手结束
7.DNS,提供 IP 到域名的解析服务,ip 不符合记忆习惯,所以需要域名,为了解决这个问题,DNS 应用而生,想通过域名知道 ip 地址,就要用 DNS 协议查找 ip
8.URI 用字符转标志某一互联网资源,URL 表示资源地点,URL 是 URI 的子集
1 | |
HTTP
9.请求报文:是由请求方法,请求 URI,协议版本,可选的请求首部字段和内容实体构成的
请求报文的构成
1 | |
10.响应报文基本上由协议版本,状态码,原因短语。可选的首部字段和内容实体构成
响应报文的构成
1 | |
11.HTTP 是一种无状态(stateless)协议,HTTP 协议自身不对请求和响应之间通信状态进行保存。为了保持浏览一些网站还能保留登录状态,于是引入了 Cookie,有了 Cookie 再使用 HTTP 协议,就可以管理状态。Cookie 可以从服务端获取一个 set-cookie 的首部字段,通知客户端保存 cookie,下次发送请求,客户端会自动在报文中加入 Cookie,cookie 的工作机制是用户识别以及状态管理
12.持久连接:HTTP 协议 1.0 中,每进行一次通信会断开一次 TCP 连接,为了解决这个问题,HTTP1.1 想出了 HTTP keep-alive,所有默认连接都是持久连接,好处在于减少 TCP 连接的重复和额外开销,减轻了服务器负载
HTTP 报文
13.报文结构:请求行、请求头部、空行、请求数据
请求报文首部结构:请求行,请求首部字段,通用首部字段,实体首部字段,其他
1 | |
14.范围请求:中断续传恢复之前下载内容对,对 10000 字节大小的资源,通过范围请求 5001-10000 字节内的资源
1 | |
15:内容协商,客户端和服务端就响应资源内容交涉,提供给客户端最合适的资源,比如 google 会根据请求头 Accept-Language 来返回对应语言网站
状态码
1xx 接收请求正在处理
2xx 成功状态码
3xx 重定向状态码
4xx 客户端错误错误状态码
5xx 服务器错误状态码
| 状态码 | 释义 |
|---|---|
| 200 | 正常处理 |
| 204 | 服务器请求已被成功处理,但是不会返回内容,页面不会更新 |
| 206 | 客户端进行了范围请求,响应报文包含 Content-Range 指定的实体内容 |
| 301 | 永久重定向,请求的资源重新分配了 URI |
| 302 | 临时重定向 |
| 303 | 表示由于请求资源存在另外一个 URI,应使用 GET 方法定向获取请求资源,与 302 区别是明确需要 GET 请求 |
| 304 | 服务端资源未改变,直接使用客户端未过期的缓存 |
| 400 | 请求报文存在语法错误 |
| 401 | 需要 HTTP 认证的信息,未授权 |
| 403 | 服务器拒绝访问 |
| 404 | 未找到资源 |
| 500 | 服务端执行请求出错 |
| 503 | 服务端处于超载或停机维护 |
1 | |
与 HTTP 协作的 web 服务器
16:虚拟主机:HTTP1.1 允许一个服务器搭建多个 web 站点,物理层面只有一台
17:代理服务器:接收客户端请求再转发给其他服务器,使用代理服务器理由有:利用缓存减少网络带宽流量,内部针对特定网站的访问控制,代理有多种使用方法,一种是是否使用缓存,另外一种是是否会修改报文
1 | |
18:网关:和代理类似网关可以使通信线路上的服务器提供非 HTTP 协议服务,利用网关能提高通信的安全性,客户端与网关之间通信线路上加密确保连接的安全
19:隧道:建立一条与其他服务器的通信线路,使用 SSL 等加密手段,目的是确保客户端和服务端安全通信
20:缓存代理服务器:缓存是指代理服务器或者客户端本地磁盘保存的资源副本,利用缓存减少对资源服务器的访问,缓存服务器是代理服务器的一种。当代理服务器从服务器返回响应时候,代理服务器会保存一份资源副本,缓存有效期失效,服务器会再次从源服务器拉取资源
21:客户端缓存:浏览器缓存有效,就不会向服务器请求相同资源,可以直接从本地磁盘读取
HTTP 首部
22:使用首部字段是为了给浏览器和服务器提供报文主体大小,所使用语言,认证信息等内容,如果重复,不同浏览器有不同处理情况,有的是按照第一次处理,有的是按照最后一次
23:4 种 HTTP 首部字段类型:通用首部字段,请求首部字段,响应首部字段,实体首部字段
首部字段一览
通用首部字段是指,请求和响应报文都会使用的首部
通用首部字段名 | 说明
—|—
Cache-Control | 控制缓存行为
Connection | 连接的管理
Date | 创建报文的日期时间
Pragma|报文指令
Trailer|报文末端首部一览
Transfer-Encoding|指定报文主体传输编码方式
Upgrade|升级为其他协议
Via|代理服务器相关信息
Warning|错误通知
| 请求首部字段名 | 说明 |
|---|---|
| Accept | 用户代理可处理的媒体类型 |
| Accept-Charset | 优先的字符集 |
| Accept-Encoding | 优先的内容编码 |
| Accept-Language | 优先的语言 |
| Authorization | web 认证信息 |
| Expect | 期待服务器的特定行为 |
| From | 用户的电子邮箱地址 |
| Host | 请求资源所在服务器 |
| if-Match | 比较实体标记(Etag) |
| if-Modified-Since | 比较资源的更新时间 |
| if-None-Match | 比较实体标记(与 if-Match 相反) |
| if-Range | 资源未更新时发送实体 Byte 的范围请求 |
| if-Unmodified-Since | 比较资源更新时间(与 if-Modified-Since 相反) |
| Max-Forwards | 最大传输逐跳数 |
| Proxy-Authorization | 代理服务器要求客户端的认证信息 |
| Range | 实体的字节范围请求 |
| Referer | 对请求中 URI 的原始获取方 |
| TE | 传输编码的优先级 |
| User-Agent | HTTP 客户端程序信息 |
| 响应首部字段名 | 说明 |
|---|---|
| Accept-Ranges | 是否接受字节范围请求 |
| Age | 推算资源创建经过时间 |
| ETag | 资源的匹配信息 |
| Location | 令客户端重定向至指定 URI |
| Proxy-Authenticate | 代理服务器对客户端认证信息 |
| Retry-After | 对再次发起请求的时机要求 |
| Server | HTTP 服务器的安装信息 |
| Vary | 代理服务器缓存的管理信息 |
| WWW-Authenticate | 服务器对客户端的认证信息 |
| 实体首部字段 | 说明 |
|---|---|
| Allow | 资源可支持的 HTTP 方法 |
| Content-Encoding | 实体主体适用的编码方式 |
| Content-Language | 实体主体的自然语言 |
| Content-Length | 实体主体的大小 |
| Content-Location | 替代对应资源的 URI |
| Content-MD5 | 实体主体的报文摘要 |
| Content-Range | 实体主体的媒体类型 |
| Content-type | 实体主体的媒体类型 |
| Expires | 实体主体过期的日期 |
| Last-Modified | 资源的最后修改日期 |
通用首部字段释义
Cache-Control:用来操作缓存的工作机制,可以用于请求以及响应,参数多选通过,分割
1 | |
Connection:1.管理持久连接,2.控制不转发给代理的首部字段
1 | |
Date:创建 HTTP 报文时间
1 | |
Pragma:HTTP/1.1 之前的遗留字段,和 cache-control 区别是他只用在客户端发送请求过程中。作用是要求中间服务不返回不返回缓存资源,一般两个都会存在,因为不可能所有的中间服务器都是 HTTP1.1 版本
1 | |
请求首部字段
Accept:用户能处理的媒体类型
1 | |
Accept-Language 告知服务器用户能处理的语言
1 | |
Authorization:用户认证信息
Host:请求资源的互联网主机名和端口号
if-Match
1 | |
if-Modified-Since 304 状态码
1 | |
if-None-Match
1 | |
if-Range
1 | |
if-Unmodified-Since
1 | |
Proxy-Authorization
1 | |
Range
1 | |
Referer
1 | |
user-agent
1 | |
响应首部字段
Accept-Ranges
1 | |
Age
1 | |
ETag
1 | |
Location
1 | |
Retry-after
1 | |
Server
1 | |
Vary
1 | |
WWW-Authenticate
1 | |
控制缓存的几个字段
1 | |
实体首部字段
是指包含在请求报文和响应报文实体部分所使用的首部,请求和响应两方都含有与实体相关的首部字段
Allow
1 | |
Content-language
1 | |
Content-length
1 | |
Content-Range
1 | |
Content-Type
1 | |
Expires
1 | |
Last-Modified
1 | |
Cookie 首部字段
1 | |
其他首部字段
x-frame-options
1 | |
X-XSS-Protection
1 | |
DNT
1 | |
HTTPS
http 的不足和缺点
1 | |
https 的不足
1 | |
http 加密方式:
通信加密和内容本身加密
1.通信的加密:HTTP 没有加密机制,但是可以通过 SSL(安全套接层)或者 TLS(安全层传输协议)组合使用加密。
用 SSL 建立安全通信协议之后,就可以在这条线路上进行 HTTPS(超文本传输安全协议)通信
2.内容加密:对传输内容本身加密
不验证通信方可能遭遇伪装
服务器只要接受到请求,不管对方是谁都会返回响应(在 ip 没有限制情况下)
- 客户端无法确定发送目标 web 服务器是不是伪装的服务器
- 服务端无法确定响应返回的客户端是不是伪装的客户端
- 无法确定是否具有访问权限,无意义的请求也会照收。无法阻止海量 Dos 攻击
使用 SSL 的证书手段可以确定客户端和服务端是实际存在的
HTTP/2.0
消除 HTTP 瓶颈的 SPDY
谷歌 2010 年发布了 SPDY(SPeeDY),目标在解决 HTTP 的性能瓶颈,缩短 web 页面 50%的加载时间。
SPDY 没有改写 HTTP 协议,在 TCP/IP 的应用层与传输层增加了会话层,SPDY 规定使用 SSL。
使用 SPDY,HTTP 获得以下功能
- 多路复用:
通过单一的 TCP 连接,可以处理无限多的 HTTP 请求,所有的处理都在一个 TCP 上完成,因此 TCP 处理效率提高 - 请求优先级:可以对请求逐个分配优先级。主要是为了解决发送多个请求时候,解决因带宽低导致响应变慢的问题
- 压缩 HTTP 首部:压缩 HTTP 请求和响应首部,通信产生的数据包会减少
- 推送功能:支持服务器主动向客户端推送
- 服务器提示:服务器可以主动提示客户端请求所需资源,在资源已经缓存情况下,可以避免发送不必要的请求
http2.0 建立在 SPDY 和 websocket 基础之上
7 项技术以及讨论
- 压缩
- 多路复用
- TLS 义务化
- 协商
- 客户端拉拽/服务器推送
- 流量控制
- websocket
web 攻击技术
http 是一个单纯的协议机制,安全方面呈劣势,针对 web 攻击方式有两种
1.主动攻击
1 | |
2.被动攻击
1 | |
web 安全对策
1.输入值验证
2.输出值转义
其他术语
| 术语 | 释义 |
|---|---|
| LAN | 同一局域网 |
| routing | 路由选择 |
| ARP 协议 | 解析地址的协议 |
| 字节流服务(Byte Stream Service) | 为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理 |
| TCP | 传输控制协议(Transmission Control Protocol) |
| UDP | 用户数据报协议(User Datagram Protocol) |
| DNS | 提供 IP 到域名的解析服务(domain Name System) |
| URL | 统一资源定位符(Uniform Resource Locator) |
| URI | 统一资源标志符 |
本文标题:图解HTTP读书笔记
文章作者:Niuhk
发布时间:2021-05-28
最后更新:2022-01-23
原始链接:https://www.niuhk.cn/2021/05/28/图解HTTP读书笔记/
版权声明:转载请注明出处!
分享