LEEDOM

Mar 02, 2022

网络知识学习笔记-HTTPS

HTTP

HTTP协议(HyperText Transfer Protocol)全称是超文本传输协议,是属于应用层的协议。

版本及差异

到目前为止,主要有三个版本:

  • 1.0:第一个在通讯中指定了版本号的版本

    • 比起0.9版本仅支持GET请求方式新增了POST,DELETE,PUT,HEAD等方式;
    • 增添了请求头和响应头的概念,在通信中指定了 HTTP 协议版本号,以及其他的一些元信息 (比如: 状态码、权限、缓存、内容编码);
    • 扩充了传输内容格式,图片、音视频资源、二进制等都可以进行传输;
  • 1.1:默认采用持续连接(Connection: keep-alive),能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。

    HTTP/1.1相较于HTTP/1.0协议的区别主要体现在:

    • 缓存处理
    • 带宽优化及网络连接的使用
    • 错误通知的管理
    • 消息在网络中的发送
    • 互联网地址的维护
    • 安全性及完整性
    • 断点传输
  • 2.0:

    • 二进制分帧:HTTP 1.x 的解析是基于文本,HTTP 2之后将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码,提高传输效率;
    • 多路复用:在共享TCP链接的基础上同时发送请求和响应,基于二进制分帧,在同一域名下所有访问都是从同一个tcp连接中走,http消息被分解为独立的帧,乱序发送,服务端根据标识符和首部将消息重新组装起来;
    • 头部压缩:由于 HTTP 是无状态的,每一个请求都需要头部信息标识这次请求相关信息,所以会造成传输很多重复的信息,当请求数量增大的时候,消耗的资源就会慢慢积累上去。所以 HTTP 2 可以维护一个头部信息字典,差量进行更新头信息,减少头部信息传输占用的资源;

组成格式

请求报文

其组成格式如上图,在请求行中,首先是方法,这里对应的就是GET、POST等,其次空格隔开,然后是请求的地址,对应的是服务端的文件路径或者路由,然后是HTTP的协议版本,最后是换行符。

接下来的部分是HEADER的内容,是一个一个的键值对;

然后是消息体,这里的内容会使用HEADER中定义的Content-Type来描述,还会根据方法来决定是否使用消息体,如GET方法一般不会使用到消息体

响应报文

响应报文的格式如上图,从整体的格式上和请求报文是差不多的,从上至下依次是状态行、HEADER和消息体。

状态行中主要的信息是包含了对状态的描述,如状态码和状态描述,并带有HTTP版本,响应的HEADER和消息体与请求报文没有太大的区别。

请求方法

HEADER说明

HEADER里的数据被称为**元数据(用于描述数据的数据)**,主要的一些HEADER说明

Field Name 说明
Content-Type 内容的格式,

状态码

状态码对应的一系列的状态响应,可以根据状态码大致判断是什么范围的问题

  • 1XX:1开头的状态码主要是消息响应,比如服务端收到了客户端的请求,返回102告诉客户端正在处理;
  • 2XX:2开头的响应代表成功,最常见的是200,服务端响应成功了;
  • 3XX:重定向响应,如301代表访问的URL已经修改,需要重定向到其他的URL去;
  • 4XX:客户端错误,这个也比较常见,一般指的是客户端发出的请求存在服务端解析错误,比如请求一个不存在的地址,就是404;
  • 5XX:服务端错误,返回这个代表服务端出现了问题,如500,代表服务端接受到请求后,服务端因为某种原因无法处理该请求,但是请求是合法的,可能是服务端内部出现了连接错误的问题。

更多细致的状态码查看HTTP状态码

HTTPS建立连接的过程

Android 中使用HTTPS

OLDER > < NEWER