HTTP相关

134 阅读3分钟

请求方法

  • GET、POST、PUT、DELETE、OPTIONS、HEAD、CONNECT、TRACE

get和post区别

  • get请求通过URL传输数据;post请求数据放在body里
  • get请求相对比较安全
  • get请求只允许ASCII字符;post请求没有限制
  • get请求是幂等的;post请求是非幂等的
  • get请求后退或刷新无害;post请求会重复提交
  • get语义上是获取数据;post请求语义上是发送数据

post和put的区别

  • post可以操作资源集,向目录下添加东西,post一次添加一次,非幂等
  • put是幂等的,比如编辑某个资源

常用状态码

  • 200: 请求正常处理
  • 301: 永久重定向
  • 302: 临时重定向
  • 401: 请求需要认证
  • 404: 服务器无法找到对应资源
  • 500: 服务器内部错误

常用首部

类型相关

  • Accept(请求头) / Content-Type(响应头)
  • Accept-Encoding:支持的压缩类型(gzip)

缓存相关

  • 强缓存:Cache-Control,Expires(响应头)
  • 协商缓存:Etag(响应头) / If-None-Match(请求头),Last-Modified(响应头) / If-Modified-Since(请求头)

Cookie相关

  • Set-Cookie (响应头)
  • Cookie(请求头)

重定向相关

  • Referer:来源 (请求头)
  • Location:重定向到的地址(响应头)

跨域相关

  • Origin:只会精确到端口 (请求头)
  • Access-Control-Allow-Headers
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Origin

持久连接相关

  • 默认就是持久连接,Connection: close(请求头,关闭持久连接)
  • http1.0 可以使用Connection: keep-alive (请求头)/ Keep-Alive: timeout=3 (响应头,代表TCP连接空闲等待的时间)
  • 客户端如何判断响应数据接收完成
    • Content-Length(响应头)
    • 动态内容可以分块传输。Transfer-Encoding: chunked (响应头,最后内容会传0,说明传输完成)

http/1.1 的优点

持久连接

  • 只要任意一端没有明确提出断开连接,则保持TCP连接状态
  • Chrome同一个域名下最多建立6个TCP连接
  • 虽然TCP连接可以共用,但是http请求还是要串行发送

管线化

  • 可以同时在一个TCP连接内并行发送http请求,不用等待前一个响应
  • 由于http的报文没有序号,所以必须按顺序接收响应;若前一个http请求迟迟收不到响应,会阻塞之后的请求

websocket

特点

  • 全双工(需要客户端先发送连接请求,连接成功后,可以互发信息)
  • 通信量少
  • 基于TCP协议,但是需要先发送一个http请求,将协议转换到websocket
    1. 先发送一个http请求,申请转换协议。其中“Sec-WebSocket-Key”头信息是一个随机到经过base64编码的字符串;
    Connection: Upgrade
    Upgrade: websocket
    Sec-WebSocket-Key: ****
    Sec-WebSocket-Version: 13
    
    1. 服务端接收到该字符串后,会追加一个固定的“魔串”:258EAFA5-E914-47DA-95CA-C5AB0DC85B11,并进行SHA-1加密,然后再次经过base64编码生成一个新的key,作为响应头中的“Sec-WebSocket-Accept”字段的内容返回给浏览器。响应状态码为101
    Connection: upgrade
    sec-websocket-accept: ****
    upgrade: websocket
    
    1. 一旦浏览器接收到来自服务器的响应,便会解析响应中的“Sec-WebSocket-Accept”字段,与自己加密编码后的串进行匹配,一旦匹配成功,便有建立连接的可能了

HTTP/2.0 的优点

二进制分帧

  • HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。
  • 请求响应到消息由一个或多个帧组成

头部压缩

  • 只发送差异数据,而不是全部发送,从而减少头部的信息量

多路复用

  • 一个TCP连接可以并行发送http请求,每个请求有个ID,根据ID来识别该请求

服务端推送

  • 请求html页面时,把相关资源推送过去(遵守同源策略)

HTTPS