整理-网络

108 阅读8分钟

1、http、https、http2的区别

http特点

  • 客户端/服务端模式,请求/响应模式
  • 无连接:限制每次连接只处理一个请求,通过cookie、session弥补
  • 无状态: 无记忆,上次信息下次还需要则要重传
  • 简单快速明文

http和https的区别

  • https = http + SSL/TLS
  • 端口:http:80,https:443
  • 耗时:https更慢
  • 安全:https更安全

https比http多的一个耗时

  1. 客户端请求连接https
  2. 服务端返回公钥(证书)
  3. 验证公钥,发送一个随机字符串
  4. 服务端将随机字符串用私钥加密后返回
  5. 客户端用公钥将加密后的随机字符串解密,如果和原来自己发送的一致则说明服务端是ok的
  6. 客户端生成对称加密算法和密钥,通过公钥加密后发出
  7. 此后双方通过上面的对称加密算法和密钥进行通信 更详细的请点击此处

问题

  1. https的数据使用对称加密,密钥是公开的,劫持了怎么办?

http发展历程

  • 0.9单行协议
  • 1.0构建可扩展性
  • 1.1标准化的协议
  1. 长连接,一个TCP连接上可以传送多个http请求和响应,默认开启keep-alive。但是因为需要按次序进行,存在队头堵塞
  2. 增加管线化技术,允许在第一个应答被完全发送之前就发送第二个请求,以降低通信延迟。
  3. 支持响应分块。
  4. 引入额外的缓存控制机制。(If-Modified-Since,Expires -》 ETag等)
  5. 引入内容协商机制,包括语言,编码,类型等,并允许客户端和服务器之间约定以最合适的内容进行交换。
  6. Host头,能够使不同域名配置在同一个IP地址的服务器上。
  • 2为了更优异的表现
  1. 二进制分帧:HTTP/2是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建,改善的优化技术现在可被实施。
  2. 多路复用:这是一个复用协议。并行的请求能在同一个链接中处理,移除了HTTP/1.x中顺序和阻塞的约束。
  3. Head压缩:压缩了headers。因为headers在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
  4. 服务端推送:其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。
  5. 请求优先级

2、TCP三次握手,四次挥手

三次握手

  1. 客户端发送请求(服务端确认客户端的发送能力、服务端的接收能力是正常的)
  2. 服务端返回响应(客户端确认客户端的发送、接收能力,服务端的发送、接收能力是正常的)
  3. 客户端再发送请求(服务端确认客户端的接收能力、服务端的发送能力是正常的)

四次挥手

  1. 客户端发送关闭请求,并停止发送数据
  2. 服务端响应自己已收到,进入关闭等待的状态(客户端收到响应后,等待服务端发送连接释放报文,进入终止等待状态
  3. 服务端发送完最后的数据后,发送释放连接报文给客户端(最后确认)
  4. 客户端发送确认关闭(服务端收到后关闭连接)

了解更多点这里

3、http常用请求头、响应头

请求报文:

  • 请求行(request line): GET /index.html HTTP/1.1。
  • 请求头(header)
  • 空行: 发送回车符和换行符,通知服务器以下不再有请求头。
  • 请求数据: get无post有

常用请求头

  • Accept:text/html。。。
  • Accept-Encoding:gzip。。。
  • Accept-Language:zh-CN。。。
  • Accept-Charset:utf-8。。。
  • Connection: keep-alive。。。
  • Host:
  • Referer: 请求的上一步的url
  • User-Agent: 客户端的软件环境
  • 其他对应响应头的看下面哦

响应报文: 状态行、响应头、空行、响应正文

常用响应头

  • Content-Length
  • Accept-Ranges: bytes(客户端可以分段请求,断点续传,多线程下载),对应请求头Range
  • Content-Type
  • Content-Encoding
  • Expires
  • Cache-Control:对应请求头Cache-Control
  • Last-Modified:对应请求头If-Modified-Since
  • ETag:对应请求头If-None-Match
  • Set-Cookie
  • Access-Control-Allow-Origin
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Credentials

Content-Type 实体头部用于指示资源的MIME类型

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

常见的媒体格式类型如下:

  • text/html : HTML格式
  • text/plain :纯文本格式
  • text/xml : XML格式
  • image/gif :gif图片格式
  • image/jpeg :jpg图片格式
  • image/png:png图片格式 以application开头的媒体格式类型:
  • application/xhtml+xml :XHTML格式
  • application/xml: XML数据格式
  • application/atom+xml :Atom XML聚合格式
  • application/json: JSON数据格式
  • application/pdf:pdf格式
  • application/msword : Word文档格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式) 另外一种常见的媒体格式是上传文件之时使用的:
  • multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

4、http缓存

  • 强缓存Expires / Cache-Control

直接取缓存,失效了才会重新请求。Cache-Control的no-cache转向协商缓存

  • 协商缓存Last-Modified+If-Modified-Since / Etag+If-None-Match

先发起请求向服务器确认,再根据返回的响应是200还是304决定是否读缓存

5、跨域

6、get、post的区别

7、预检请求?

简单请求

不会触发CORS预检的请求。GET、POST、HEAD,还有其他一些条件

预检请求options

  1. 使用了PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH方法
  2. 人为设置了非规定内的其他首部字段,参考上面简单请求的安全字段集合,还要特别注意Content-Type的类型
  3. XMLHttpRequestUpload 对象注册了任何事件监听器
  4. 请求中使用了ReadableStream对象

了解更多点此

8、websocket

全双工通信。服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
(1)建立在 TCP 协议之上,服务器端的实现比较容易。

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

(5)没有同源限制,客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

Connection: Upgrade
Upgrade: websocket

从http升级到websocket的头部

了解更多看这里

9、http状态码

  • 100 客户端应继续其请求

  • 101 切换协议

  • 200 成功

  • 201 成功请求并创建了新的资源

  • 203 非授权信息

  • 204 无内容

  • 206 部分内容

  • 301 永久重定向

  • 302 临时重定向

  • 304 使用缓存

  • 305 使用代理

  • 400 客户端语法错误

  • 401 需要身份认证

  • 403 拒绝执行

  • 404 找不到

  • 408 超时

  • 410 资源不存在

  • 413 请求实体过大

  • 500 服务器内部错误

  • 501 服务器不支持

  • 502 网关错误

  • 503 服务器不可用

了解更多请点此

10、加密算法

对称加密

加密和解密用的是同一个密钥
优点:算法公开、计算量小、加密速度快、加密效率高。
缺点:在数据传送前,发送方和接收方必须商定好密钥,然后双方保存好密钥。如果一方的密钥被泄露,那么加密信息也就不安全了
使用场景:本地数据加密、https通信、网络传输等
AES(crypto-js)

非对称加密

加密和解密用的不是同一个密钥,一般分公钥和私钥
优点:非对称加密与对称加密相比其安全性更好
缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
使用场景:https会话前期、CA数字证书、信息加密、登录认证等
RSA(jsencrypt)

Hash算法

将任意长度的消息压缩到某一固定长度的消息摘要的函数。
优点:不可逆、易计算、特征化
缺点:可能存在散列冲突
使用场景:文件或字符串一致性校验、数字签名、鉴权协议
md5(JavaScript-MD5)