Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

http协议相关 #18

Open
zonglang opened this issue Jul 11, 2019 · 0 comments
Open

http协议相关 #18

zonglang opened this issue Jul 11, 2019 · 0 comments

Comments

@zonglang
Copy link
Owner

zonglang commented Jul 11, 2019

掘金文章

  • HTTP请求的方法有哪些
  • HTTP请求响应报文
  • HTTP状态码
  • HTTP缓存
  • HTTP2.0

HTTPS

HTTP的缺点:明文无法校验来源无法验证完整性
都存在安全私密问题: 来源 => 传输 => 内容
HTTPS = HTTP + SSL/TLS
HTTP先跟SSL通信,再由SSL和tcp通信
不能保证不被窃听 => 加密 => 公开密钥加密(更安全) + 共享密钥加密(处理快)
不能保证来源可靠 => 认证 => 权威机构的证书
不能保证报文完整 => 摘要 =>

  1. 服务器 =公钥=> 权威机构
  2. 权威机构 =私钥加密生成数字证书=> 服务器
  3. 服务器 =数字证书=> 客户端
  4. 客户端内置权威机构公钥校验通过
  5. 客户端 =使用服务器公钥加密私钥=> 服务器
  6. 开始使用共享密钥通信

HTTP的进阶史

http1.x的缺陷
1. 连接无法复用
    三次握手的延时已经慢启动对大量小文件影响比较大
    1.0默认每次请求都需要重新建立连接
    2.0采用keep-alive可以复用一部分连接,
    但是域名分片的情况还是要建立多个连接
2. HOLB(Head-Of-Line Blocking)
    1.0必须一个请求之后才能下一个请求
    1.1使用流水线(pipeline),即同一域名,同一tcp中可以发送多个请求
    但是返回的请求必须是按顺序的,所以前一个可能也会阻塞后一个
3. 协议开销大
    header携带的内容过大,并且header基本上不怎么变化
4. 安全性
    明文传输,客户端服务端无法验证对方身份
二进制分帧,多路复用(stream的概念),
实际上,http1.x的问题出现在了同步请求上,
http1.0的请求必须是一个接一个的同步请求,
有一种hack的方法就是域名分片(利用多个tcp进行异步)
http1.1从协议层次上进行了优化,加入流水线(pipeline),可以实现异步发送请求,但是响应还是同步的,并且不能设置优先级。
http2又从协议的层次上优化,利用二进制分帧,实现了并行交错的请求与响应,并且可以设置优先级。

对header进行处理,
客户端与服务端共同维护一个‘首部表’,指发送header的差异

server push,
服务器主动推送,遵守同源策略,客户端可以拒绝
http2是从http协议上进行优化,
而http3是从传输层上优化,基于UDP实现了QUIC协议
由于stream的概念还是在http层次,所以tcp一旦丢包,就得全部重传,
在udp的层次实现stream的概念
0-RTT(减少了TCP握手和TLS握手)(利用无连接的特性)
多路复用(实现stream的概念)
加密认证
向前纠错(解决不可靠)

TCP和UDP的比较
一文读懂HTTP2,HTTP3
MDN HTTP1.x

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant