HTTP

216 阅读3分钟

HTTP

  • 超文本传输协议,即服务器和浏览器之间通过应答请求模式传输超文本内容的一种协议
  • 请求报文
    请求类型、请求URL、协议版本和扩展内容
    请求头部域信息(Accept、Cookie、Cache-Control、Host)
    
  • 响应报文
    状态码、状态描述、协议版本和扩展内容
    响应头部域信息(Date、Content-Type、Cache-Control、Expires)
    

HTTP1.1

- 长链接:复用前面的连接传输、Connection: keep-alive、传输开销
- 协议扩展切换
    ```
    Connection: Upgrade
    Upgrade: websocket
    备用协议
    HTTP => WebSocket
    101状态码
    ```
- 缓存控制
    ```
    HTTP1.1之前: Expires头部、控制绝对时间
    HTTP1.1: Cache-Control头域、max-age、相对过期时间、Etag、Last-Modified、200/304
    ```
- 部分内容传输优化: 超文本文件的部分传输
  • 报文头部域
    • Accept: 告诉服务器自己能接收什么媒体类型
    • Accept-Charset: 浏览器能接收内容的字符集,utf-8
    • Accept-Encoding:浏览器接收内容的编码方法
    • Accept-Language:浏览器接收内容的语言
    • Accept-Ranges: 服务器能否部分文件传输
    • Age:服务器用自己的缓存的实体去响应请求,表明实体过了多久, 3600
    • Allow:服务器支持哪些HTTP请求方法
    • Authorization:用该头部携带自己的身份验证信息给服务器验证
    • Cache-Control
    # 请求
    no-cache 不实用缓存实体,从服务器请求内容
    max-age: 只接受Age小于max-age值的内容
    max-stale: 可接收过去的对象, 过期时间小于max-stale
    min-fresh: 接收大于当前Age和min-fresh值之和的对象
    
    # 响应
    public: 用Cache中内容回应任何用户
    private: 只能用缓存内容回应先前请求该内容的具体用户
    no-cache: 设置哪些内容不被缓存
    max-age: 对象的过期时间
    ALL: no-store 不允许缓存
    
    • Connection
    close: 响应后断开
    keep-alive: 响应后保持连接
    
    • Content-Encoding: 服务器何种方式压缩、 gzip
    • Content-language:服务器响应的媒体对象语言
    • Content-Length: 请求内容的长度、1024
    • Content-Range:响应的是哪部分的部分对象
    • Content-Type: 响应对象的类型、applicatin/xml
    • Etag: 服务器对比判断一个对象(如HTML文件)是否改变
    • Expires:实体什么时候过期
    • Host: 服务器的域名/IP地址/端口号
    • If-None-Match: 上次文件返回头有Etag, 这次请求带上该头信息
    • If-Modified-Since: 上次返回头有Last-Modified, 这次请求带上该头信息
    • Last-Modified: 服务器设置的对象最后修改时间
    • Location: 服务器告诉浏览器访问的对象被转移到别位置
    • Proxy-Authenticate: 一代理,代理服务器响应浏览器,该代理提供身份验证信息
    • Range: 浏览器告诉服务器,想读取对象哪部份
    • Referer:告诉服务器,从哪跳转来到这个请求的URL
    • User-Agent: 浏览器代理名词,服务器根据这个获取浏览器版本相关信息
    • Transfer-Encoding: 服务器对响应传输消息体做的怎样的编码(chunkedd是否分块)

HTTP2

- 完全二进制格式传输数据
    ```
    HTTP1.x默认文本格式
    HPACK压缩传输
    ```
- TCP多路复用方式
    ```
    降低网络请求连接建立和关闭的开销
    多个请求,一个TCP连接并发完成
    TCP复用传输发生在传输层,同时进行流式传输
    keep-alive连接复用在应用层,串行的
    ```
- 传输优先级高的文件
    ```
    先传输CSS文件,保证页面渲染
    这种情况下,CSS不用写在顶部,脚本也不一定要放在最底部
    ```
- 服务器端推送

Book

《现代前端解析》

微信公众号