图解HTTP读书笔记
图解HTTP读书笔记
Web及网络基础
HTTP/0.9
不是http的正式标准,临时版本
HTTP/1.0
RFC1945
HTTP/1.1
目前应用较广 RFC2616
HTTP/2.0
大幅提高了web性能
TCP/IP
互联网运行与TCP IP协议族之上,HTTP包含于其中
ip,dns,udp,ftp,http,tcp。。。
TCP/IP的分层管理
应用层:决定了向用户提供服务时通信的活动,ftp,dns,http
传输层:对应用层提供连接的两台计算机的数据传输,TCP Transmission Control Protocol传输控制协议和UDP User Data Protocol用户数据报协议
网络层:处理网络上的数据包,数据包是网络传输的最小数据单位,规定如何传输路线,传输数据包
数据链路层:处理连接网络的硬件,网络适配器NIC网卡
物理层
层次化好处:1.设计好接口,每个层次内部的设计可以自由改动 2.使设计变得更简单,应用层上的应用不需要考虑接收方的地理位置等
IP、TCP、DNS
IP
IP协议位于网络层
mac地址为网卡的固定地址,使用ARP协议(address resolution Protocol地址解析协议)凭借mac地址进行通信,解析ip到mac地址
选择传输路线叫做路由选择
TCP协议的可靠性
位于传输层
将大数据块分割为报文段segment确保传输准确可靠
将请求报文按照序号分为多个报文段,将每个报文段可靠的传输,收到后再根据序列号重组报文
确保数据可到达:
三次握手three way handshaking
TCP标志 SYN synchronize和ACK acknowledgement
具体过程:
- 发送端发送一个带有SYN标志的数据包
- 接收端收到后回传带有SYN/ACK标志的数据包
- 发送端传回带有ACK标志的数据包,握手结束
如果握手中的某个阶段中断,TCP协议会再次发送相同的数据包
DNS
域名解析
URI和URL
URL是URI的子集
HTTP协议
http是无状态协议
使用cookie管理状态
使用URI定位资源
持久连接:任意一端未提出断开,则保持tcp连接状态,减少tcp连接重复建立和断开的开销
HTTP 1.1中,所有连接默认为持久连接
pipeline技术:连续发送请求,不必等待上一个请求返回
Cookie
服务器响应报文中Set-Cookie header字段,告知客户端保存
客户端再次请求时自动在header中加入cookie
HTTP报文
换行符CR+LF,CR回车符0x0d
,LF换行符0x0a
header + CR+LF + Body
报文message是通信基本单位,8位组字节流
实体entity 请求或响应的在和,包含实体header和实体body
传输过程中可以对实体进行压缩
实体可以分割传输
获取部分内容的请求
传输中断的恢复机制
在header中加Range
Range: bytes= 1-5000
断点续传
HTTP状态码
1XX,正在处理 信息性状态 2XX,处理完毕 成功 3XX,重定向状态码 4XX,客户端错误状态码 5XX,服务器错误状态码
200 OK
HEAD方法不会返回body
204 No Content 处理成功,但是response中不包含实体
206 Partial Content 客户端进行了范围请求
301 Moved Permanently 永久重定向,资源分配了新的URI
302 Found 临时重定向
303 See Other 客户端用GET,临时重定向(比如POST访问时返回303,需要改GET方法重定向到另一个URI)
304 Not modified 我有你要的资源但是不让你访问
307 Temporary Redirect 临时重定向
400 Bad request
401 Unauthorized
403 Forbidden 不允许访问
404 Not Found 找不到资源
500 Internal Server Error 内部错误
503 Service Unavailable 服务器超负荷
Web服务器
虚拟主机
一台服务器可以绑定多个域名
通过dns解析
代理 网关 隧道
代理
转发中间人
每次转发会追加写入via首部
代理服务功能:缓存技术,访问控制,获取日志
缓存代理:将资源缓存在代理服务器上,不从原服务器获取(有点像redis
透明代理:转发请求和响应,不添加其他内容
网关
转发客户端请求到实际程序
网关与服务器使用非http通信
隧道
在客户端和服务器直接中转,保持双方的通信连接
本身不解析http请求,只传输
缓存
客户端缓存和服务器缓存
客户端缓存存储在浏览器
各种header的作用
Cookie相关header
Set-Cookie: 后跟name=value的序列
Cookie: 发送cookie
HTTPS
http缺点:
- 明文被窃听
- 不验证双方身份,可伪装
- 无法验证完整性,可以篡改
使用SSL secure socket layer或TLS transport layer security安全层传输协议
SSL使用证书确定身份
防止篡改:使用md5或sha-1等校验方法校验报文完整性
HTTP+通信加密+证书+完整性保护
通信接口部分用ssl和tls协议代替
http先和ssl通信,ssl再和tcp通信
非对称加密 公钥进行加密,私钥进行解密
通信步骤
- 客户端发送client hello开始ssl通信
- 服务器响应server hello
- 服务器发送certificate报文,包含公钥证书
- 服务器发送server hello done
- 客户端发送client key exchange报文响应,ssl握手部分结束
- 客户端发送change cipher spec
- 客户端发送finished
- 服务器发送change cipher spec
- ssl连接建立成功,开始进行http请求