http

85 阅读4分钟

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

    1. URG:URG=1时,注解此报文应尽快传送
    2. ACK:ACK=1表示确认号字段有效
    3. PSH:PSH=1时,接收方应该尽快将本报文段立即传送给其应用层。
    4. RST:RST=1时,表示出现连接错误,必须释放连接,然后再重建传输连接。还用来拒绝一个连接
    5. SYN:SYN=1,ACK=0时表示请求建立一个连接
    6. FIN:发端完成发送任务
  • 窗口 占2B,滑动窗口的概念来进行流量控制,表示接收端所能提供的缓冲区大小。单位字节,因此最大能表示65535B

  • 检验和 占2B,TCP头部和TCP数据进行校验和计算,接收端用于对收到的数据包进行验证

  • 紧急指针 URG=1时生效

tcp连接

  1. 发送端发送SYN标志以及随机seq=x,变成了SYN-SENT状态
  2. 接收端发送SYN,ACK标志,ack=x+1以及随机seq=y,变成SYN-REVD状态
  3. 发送端发送ACK标志seq=x+1,ack=y+1,变成ESTABLISHED状态,接收端接收到后也变成该状态

为什么3次

2次时如果接受端不能确定自己是否发送正常,序列号seq防止数据包接收时顺序颠倒的问题

tcp 传输

  • 重传机制
    • 超时重传
    • 快速重传
  • 流量控制
    • 通过窗口字段,针对接收端的处理速度不如发送端发送速度快的问题
    • 慢开始 指数提高发送数据包的数量
    • 拥塞避免 到慢启动阈值线性增加,堵塞重置到慢启动并且阈值减半
    • 快速重传 接受端没收到一个数据就会按数据确认 三次相同ack会触发重传

关闭连接(TCP 的连接是全双工可同时接收发送)

假设主动方seq=100,ack=200,主动断开方A,被动断开B

  1. A发送seq=100,FIN标志进入FIN_WAIT_1状态 -> B返回ack=101,ACK标志进入CLOSE_WAIT状态
  2. 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构成了证书

  1. 客户端发起https请求
  2. 服务端发送CA给的证书
  3. 浏览器信任CA机构会有CA公钥,获取算法H计算信息D的hash值与解密的数字签名hash对比。相同则确定信息是安全的
  4. 浏览器生成对称加密的密钥利用服务端公钥加密后传给服务端
  5. 服务端使用死钥解密获得对称加密密钥
  6. 后续使用只有双方才知道的对称加密加密传输