HTTP协议概述

2021-8-02 15:36:036

#前端#网络协议

30

前言

开始复习计算机网络这一块,web端常用的协议就是应用层的http协议了,因此对http协议的掌握也是非常重要的。

概述

  • 超文本传输协议,基于tcp/ip通信协议传输数据
  • 为web浏览器与服务器之间的通信而设计的

特点

  • 无连接
    • 每次连接只处理一个请求
    • 服务器处理完客户请求,收到客户应答后便断开连接
    • 节省传输时间
  • 媒体独立
    • 任何类型的数据都可以通过HTTP发送,使用Content-Type表示资源媒体类型
  • 无状态
    • 对事务处理没有记忆能力

请求方法

  • HTTP1.0: GET,POST,HEAD
  • HTTP1.1: OPTIONS,PUT,PATCH,DELETE,TRACE,CONNECT
  • *GET:
    • 请求获取Request-URI所标识的资源。
    • 浏览器对URL的长度有限制,一般不超过4k。
    • HTTP规范规定用于获取信息,是安全和幂等的
  • *POST:
    • 提交表单或上传文件
    • 一般会导致资源的修改,幂不等
  • HEAD:用于获取报头
  • PUT:从客户端向服务器传送的数据取代指定的文档的内容
  • DELETE: 请求服务器删除指定的资源
  • CONNECT: 可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道tunnel
  • OPTIONS: 用于获取目的资源所支持的通信选项
  • TRACE: 实现沿通向目标资源的路径的消息环回loop-back测试 ,提供了一种实用的debug 机制
  • PATCH: 是对PUT方法的补充,用来对已知资源进行局部更新

请求头

(请求头种类实在是太多了,而且header是可以自定义的,所以我只在此列举一些常见的)

  • Accept:指定客户端能够接收的内容类型
  • Accept-Charset:浏览器可以接受的字符编码集
  • Accept-Encoding: 指定浏览器可以支持的web服务器返回内容压缩编码类型
  • Accept-Language: 浏览器可接受的语言
  • Connection: 表示是否需要持久连接
  • Host: 指定请求的服务器的域名和端口号

响应头

  • Access-Control-Allow-Origin: 跨域设置
  • Content-Type: 返回内容的MIME类型
  • Date:原始服务器消息发出的时间
  • Keep-Alive: 表明希望 WEB 服务器保持连接多长时间(秒)
  • Transfer-Encoding: WEB 服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked)。例如:Transfer-Encoding: chunked
  • Vary: 告诉下游代理是使用缓存响应还是从原始服务器请求

状态码

  • 1xx: 信息,服务器收到请求,需要请求者继续执行操作。
    • 100: 继续,客户端应继续其请求
    • 101: 切换协议
  • 2xx:成功,操作被成功接收处理
  • 3xx:重定向,需要进一步的操作以完成请求
  • 4xx:客户端错误,请求包含语法错误或无法完成请求
  • 5xx:服务器错误,服务器在处理请求的过程中发生了错误。

HTTP发展版本

HTTP0.9

  • 只有一个请求行,没有HTTP请求头和请求体
  • 服务器没有返回头,只返回数据信息
  • 使用ASCLL字符流传输

HTTP1.0

  • 加入了请求头,响应头,状态码,缓存机制,content-type头等
  • 在HTTP发送请求时,会带上请求头信息,服务器返回数据时,则会先返回响应头信息。
  • 协议版本信息会随着每个请求发送
  • 请求头:在发起请求的时候会通过HTTP请求头告诉服务器它期待服务器返回什么类型的文件,采取什么形式的压缩,提供什么语言的文件以及文件的具体编码。
  • 响应头:服务器以请求头中信息准备数据,并以响应头的信息告诉客户端数据采用何种格式返回,若遇到不支持的格式,返回服务器支持的格式,并在响应头中体现,也就是说最终浏览器是以响应头的信息解析数据。
  • 状态码:在响应开始时发送,使浏览器能了解请求执行成功或失败,并响应调整行为。
  • 缓存机制:通过状态码与If-Modified-SinceExpires等控制更新或使用本地缓存。
  • Content-Type:使HTTP能够传输除纯文本HTML文件以外其它类型文档的能力。

HTTP1.1

  • 目前主流使用的http协议版本
  • 标准化并消除了大量歧义内容引入了多项改进
  • 缓存机制:引入更多缓存控制策略,如Entity tagIf-Unmodified-SinceIf-MatchIf-None-Match等更多可供选择的缓存头来控制缓存策略。
  • 带宽优化: 请求头中引入了range,它允许只请求资源的某一个部分,返回206状态码,方便开发者自由选择以便充分利用带宽和链接,使用Range和'Content-Range'制作断点续传功能。
  • 增加了24个错误状态吗。
  • 增加Host请求头,使不同域名配置在同一个IP地址的服务器上。
  • 长连接:在一个TCP连接上可以传输多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,使用'Connection'头控制是否开启,关闭则将其值设为'close',默认开启
  • 管线化技术:允许在第一个应答被完全发送之前就发送第二个请求,改善队头阻塞问题,但响应的顺序还是会按照请求的顺序返回。
  • 响应分块:头设置为Transfer-Encoding: chunked表示进行分块响应,允许响应的数据分为多个部分,配合服务端尽早释放缓冲获得更快的响应速度。

HTTP2.0

  • 二进制分帧:将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。
  • 多路复用:并行的请求能在同一个链接中处理,在同一域名下所有访问都是从同一个TCP连接中走,HTTP消息被分解为独立的帧,服务端根据标识符和首部将消息重新组装起来,移除了HTTP1.1中顺序和阻塞的约束。
  • 压缩header,移除了重复和传输重复数据的成本。
  • 服务端推送:服务器可以主动向客户端推送资源,无需客户端明确请求。

HTTP3.0

  • 尚在制定和测试阶段
  • 将会是一个全新的协议,而不是2.0的拓展
  • 运行在QUIC协议之上
  • QUIC: 谷歌制定的UDP的低延迟的互联网传输层协议,很好的解决了当今运输层和应用层面临的各种需求,包括处理更多的连接,安全性和低延迟,也融合了包括TCP,TLS,HTTP/2等协议的特性。