URI
Uniform Resource Identifier统一资源标识符
- URL 上来指定 Web 上资源文件的具体位置
| 方案 | 描述 |
| ----------- | ---------------------------------------------- |
| data | Data URIs
data:[<mediatype>][;base64],<data>| | file | 指定主机上文件的名称 | | ftp | 文件传输协议 | | http/https | 超文本传输 协议/安全的超文本传输协议 | | mailto | 电子邮件地址 | | ssh | 安全 shell | | tel | 电话 | | urn | 统一资源名称 | | view-source | 资源的源代码 | | ws/wss | (加密的)WebSocket (en-US) 连接 | - URN 是在给定的命名空间用名字指向具体的资源
http
-
可扩展的 同过headers
-
无状态有会话 通过Cookies共享上下文信息,达成相同的状态
常用header
Accept: image/*;q=0.9,*/*;q=0.8 //
// 响应头
Age:1 //缓存时间秒
// 请求头
Accept-Encoding: gzip // 期望接收的编码类型
| 描述 | |
|---|---|
| Accept | 用户代理期望的 MIME 类型列表 |
- Referer 表示这个请求是从哪个url跳过来的
重定向
- 协议重定向3xx
- HTML重定向
<meta http-equiv="Refresh" content="0; URL=http://test.com" /> window.location
tcp
-
源端口和目的端口 各占2个字节
-
序号(seq)确认序号(ack) 序号(Sequence Number)确认序号(Acknowledgment Number)各4个字节。
-
数据偏移 占4bit,首部长度不固定数据便宜量表示首部的长度,单位4字节因此最大首部最大60字节
-
保留字段和标志位 保留字段6b标志位1b
- URG:URG=1时,注解此报文应尽快传送
- ACK:ACK=1表示确认号字段有效
- PSH:PSH=1时,接收方应该尽快将本报文段立即传送给其应用层。
- RST:RST=1时,表示出现连接错误,必须释放连接,然后再重建传输连接。还用来拒绝一个连接
- SYN:SYN=1,ACK=0时表示请求建立一个连接
- FIN:发端完成发送任务
-
窗口 占2B,滑动窗口的概念来进行流量控制,表示接收端所能提供的缓冲区大小。单位字节,因此最大能表示65535B
-
检验和 占2B,TCP头部和TCP数据进行校验和计算,接收端用于对收到的数据包进行验证
-
紧急指针 URG=1时生效
tcp连接
- 发送端发送SYN标志以及随机seq=x,变成了SYN-SENT状态
- 接收端发送SYN,ACK标志,ack=x+1以及随机seq=y,变成SYN-REVD状态
- 发送端发送ACK标志seq=x+1,ack=y+1,变成ESTABLISHED状态,接收端接收到后也变成该状态
为什么3次
2次时如果接受端不能确定自己是否发送正常,序列号seq防止数据包接收时顺序颠倒的问题
tcp 传输
- 重传机制
- 超时重传
- 快速重传
- 流量控制
- 通过窗口字段,针对接收端的处理速度不如发送端发送速度快的问题
-
- 慢开始 指数提高发送数据包的数量
- 拥塞避免 到慢启动阈值线性增加,堵塞重置到慢启动并且阈值减半
- 快速重传 接受端没收到一个数据就会按数据确认 三次相同ack会触发重传
关闭连接(TCP 的连接是全双工可同时接收发送)
假设主动方seq=100,ack=200,主动断开方A,被动断开B
- A发送seq=100,FIN标志进入FIN_WAIT_1状态 -> B返回ack=101,ACK标志进入CLOSE_WAIT状态
- B发送seq=102, FIN标志进入LAST_ACK状态 -> A返回 ack=202 ACK标志进入CLOSE_WAIT状态进入TIME_WAIT状态,B收到进入CLOSED状态
https
HTTPS(SSL/TLS)的加密机制 通信方式 http->ssl->tcp CA机构拥有非对称加密的私钥和公钥
- 证书
服务端需要提交公钥,组织信息、个人信息(域名)等信息这里称为D,CA机构将D使用一种hash算法(称为H)生成对hash值进行私钥加密生成数字签名S。信息D、算法H、数字签名S构成了证书
- 客户端发起https请求
- 服务端发送CA给的证书
- 浏览器信任CA机构会有CA公钥,获取算法H计算信息D的hash值与解密的数字签名hash对比。相同则确定信息是安全的
- 浏览器生成对称加密的密钥利用服务端公钥加密后传给服务端
- 服务端使用死钥解密获得对称加密密钥
- 后续使用只有双方才知道的对称加密加密传输