MJingv / jehol-person-blog

Jehol's Blog 🙋 (hexo+react)
https://mjingv.github.io/JeholBlog/
0 stars 1 forks source link

http 再来复习一遍吧 #14

Open MJingv opened 5 years ago

MJingv commented 5 years ago

http网络相关填坑

协议走起

UDP

  1. 面向无链接
  2. 不可靠性
  3. 高效
  4. 传输方式
  5. 适用场景

    • 直播/视频
    • 游戏

    TCP

1. 头部

2. 状态机

image

3. 超时重传 ARQ协议

4. 滑动窗口

滑动窗口是一个很重要的概念,它帮助 TCP 实现了流量控制的功能。接收方通过报文告知发送方还可以发送多少数据,从而保证接收方能够来得及接收数据,防止出现接收方带宽已满,但是发送方还一直发送数据的情况

  1. 发送端窗口包含【已发送但未收到应答】的数据和【可以发送但是未发送】的数据
  2. 发送端窗口是由接收窗口剩余大小决定的

在发送报文的过程中,可能会遇到对端出现零窗口的情况。在该情况下,发送端会停止发送数据,并启动 persistent timer 。该定时器会定时发送请求给对端,让对端告知窗口大小。在重试次数超过一定次数后,可能会中断 TCP 链接

5. 拥塞处理

  1. 防止过多的数据拥塞网络,避免出现网络负载过大的情况
  2. 拥塞处理了四个算法:慢开始,拥塞避免,快速重传,快速恢复
    • 慢开始
      1. 在传输开始时将发送窗口慢慢指数级扩大,从而避免一开始就传输大量数据导致网络拥塞
      2. 步骤:初始化拥塞窗口=》每过一个 RTT 就将窗口大小乘二 =》阈值限制

总结

  1. 建立连接需要三次握手,断开连接需要四次握手
  2. 滑动窗口解决了数据的丢包、顺序不对和流量控制问题
  3. 拥塞窗口实现了对流量的控制,保证在全天候环境下最优的传递数据
  4. 拥塞控制四个算法 慢开始、拥塞避免、快速重传、快速恢复

    HTTP

请求的内容

get vs post

get post
请求可以缓存 不行
请求内容在url中,不安全 安全一点点
url长度有限制
支持多种编码类型,对数据类型无限制

常见状态码

HTTPS 还是通过了 HTTP 来传输信息,但是信息通过 TLS 协议进行了加密

TLS

  1. 二进制
  1. header头压缩

  2. 多路复用

    • 帧(frame)代表着最小的数据单位,每个帧会标识出该帧属于哪个流
    • 多个帧组成流(stream)
    • 多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。
  3. server push

    • 主动推送,减少延迟时间
    • prefetch

HTTP 3(HTTP-over-QUIC)

问题

  1. 问题根源TCP
  2. HTTP/2 使用了多路复用,一般来说同一域名下只需要使用一个 TCP 连接。当这个连接中出现了丢包的情况,那就会导致 HTTP/2 的表现情况反倒不如 HTTP/1 了
  3. Google 就更起炉灶搞了一个基于UDP 协议的 QUIC 协议

QUIC 特性

多路复用、0-RTT、使用 TLS1.3 加密、流量控制、有序交付、重传等等

  1. 多路复用

    • 移动端表现好,连接速度快 :TCP连接【ip+prot】vs QUIC【id】
  2. 0-RTT

    • 通过使用类似 TCP 快速打开的技术,缓存当前会话的上下文
  3. 纠错机制

    • 多发一个校验包
MJingv commented 5 years ago

headers

缓存相关总结

MJingv commented 5 years ago

post

提交方式

post提交方式总结---- postman测试请选择type :)

application/x-www-form-urlencoded

multipart/form-data

application/json

text/xml

MJingv commented 5 years ago

RESTful架构

概念先行

资源与uri

uri-tips

统一资源接口

get post put delete
获取表示 使用服务端管理的(自动产生)的实例号创建资源 用客户端管理的实例号创建一个资源 删除资源
变更时获取表示(缓存) 创建子资源 部分更新资源 如果没有被修改,则不过更新资源(乐观锁) 通过替换的方式更新资源 如果未被修改,则更新资源(乐观锁)
安全 不安全 不安全 不安全
幂等 不幂等 幂等 幂等
MJingv commented 5 years ago

finally -- 三次握手

过程

原因

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

finally -- 四次挥手

过程

原因

客户端发送了 FIN 连接释放报文之后,服务器端收到了这个报文,就进入了 CLOSE-WAIT 状态。

这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器端会发送 FIN 连接释放报文。

MJingv commented 1 year ago

https://coolshell.me/articles/40-picture-4d-long-text-wins-http.html

1989年,lee在论文中提到在互联网构建超链接有3点

http是什么

hypertext transport protocol 超文本传输协议

http版本

http/0.9

http/1.0

http/1.1

http/2

http/3.0

cookie

http是无状态、无记忆的,浏览器的cookie来记忆