网络

69 阅读5分钟

http与https

http 是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl 加密传输协议。使用不同的链接方式,端口也不同,一般而言,http 协议的端口为80,https 的端口为443。 http 的连接很简单,是无状态的;https协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全,https 协议需要 ca 证书,费用较高。

http2.0

HTTP1.1存在问题:
  • 线头阻塞:TCP连接上只能发送一个请求,前面的请求未完成前,后续的请求都在排队等待。
  • 多个TCP连接:虽然HTTP/1.1管线化可以支持请求并发,但是浏览器很难实现,chrome、firefox等都禁用了管线化。所以1.1版本请求并发依赖于多个TCP连接,建立TCP连接成本很高,还会存在慢启动的问题。
  • 头部冗余:采用文本格式 HTTP/1.X版本是采用文本格式,首部未压缩,而且每一个请求都会带上cookie、user-agent等完全相同的首部。
  • 客户端需要主动请求。
HTTP2.0特点:
  • 二进制协议: HTTP/1.1版本的头部信息是文本,数据部分可以是文本也可以是二进制。HTTP/2版本的头部和数据部分都是二进制,且统称为‘帧’。
  • 多路复用: 废弃了 HTTP/1.1 中的管道,同一个TCP连接里面,客户端和服务器可以同时发送多个请求和多个响应,并且不用按照顺序来。由于服务器不用按顺序来处理响应,所以避免了“对头堵塞”的问题。
  • 头部信息压缩: 使用专用算法压缩头部,减少数据传输量,主要是通过服务端和客户端同时维护一张头部信息表,所有的头部信息在表里面都会有对应的记录,并且会有一个索引号,这样后面只需要发送索引号即可。
  • 服务端主动推送: 允许服务器主动向客户推送数据。

http 常用请求头

  • Accept:可接受的响应内容类型(Content-Types)。
  • Accept-Charset:可接受的字符集 Accept-Encoding 可接受的响应内容的编码方式。
  • Accept-Language:可接受的响应内容语言列表。
  • Accept-Datetime:可接受的按照时间来表示的响应内容版本。
  • Authorization:用于表示 HTTP 协议中需要认证资源的认证信息。
  • Cache-Control:用来指定当前的请求/回复中的,是否使用缓存机制。

http请求方式

41a13b5df7386b09ea43be06106e6fc1.png

get 和 post 的区别

  • get用来获取数据,post用来提交数据。
  • get参数有长度限制(受限于url长度,具体的数值取决于浏览器和服务器的限制,最长2048字节),而post无限制。
  • get请求的数据会附加在url之 ,以 " ? "分割url和传输数据,多个参数用 "&"连接,而post请求会把请求的数据放在http请求体中。
  • get是明文传输,post是放在请求体中,但是开发者可以通过抓包工具看到,也相当于是明文的。
  • get请求会保存在浏览器历史记录中,还可能保存在web服务器的日志中。

http请求状态码

  • 200: '请求被正确处理并返回了结果'
  • 201: '新增或修改数据成功'  
  • 202: '请求已进入任务队列,被异步处理', 203: '令牌或登录状态失效', 204: '删除数据成功' 
  • 301: '请求的资源被永久重定向到新的位置,将从新的地址重新请求'
  • 302: '请求的资源被临时重定向到新的位置'  
  • 400: '请求参数错误,服务器没有对数据做新建或修改' 
  • 401: '无访问权限,用户名、密码、令牌错误' 
  • 403: '得到访问授权,但访问是被禁止' 
  • 404: '访问的是不存在的资源'
  • 405: '请求方式不正确' 
  • 406: '请求的数据格式不是服务接收的类型'  
  • 410: '请求的资源被永久删除'
  • 422: '服务器创建对象时发生错误' 
  • 500: '服务器不可用,未返回正确的数据' 
  • 502: '服务器网关错误'
  • 503: '服务器过载或维护中' 
  • 504: '服务器响应超时'

http缓存

  • 强制缓存:由Cache-Control,Exipres(HTTP1.0)控制。浏览器直接读本地缓存,不会再跟服务器端交互,状态码 200。
  • 协商缓存:由Last-Modified / IfModified-Since, Etag /If-None-Match实现,每次请求需要让服务器判断一下资源是否更新过,从而决定浏览器是否使用缓存,如果是,则返回 304,否则重新完整响应。
  • Expires 响应头,它是 HTTP/1.0 的产物。代表该资源的过期时间,其值为一个绝对时间。它告诉浏览器在过期时间之前可以直接从浏览器缓存中存取数据。由于是个绝对时间,客户端与服务端的时间时差或误差等因素可能造成客户端与服务端的时间不一致,将导致缓存命中的误差。如果在Cache-Control响应头设置了 max-age 或者 s-max-age 指令,那么 Expires 会被忽略。
  • Cache-Control 出现于 HTTP/1.1。可以通过指定多个指令来实现缓存机制。主要用表示资源缓存的最大有效时间。即在该时间端内,客户端不需要向服务器发送请求。优先级高于 Expires。其过期时间指令的值是相对时间,它解决了绝对时间的带来的问题。