HTTP协议

HTTP协议是基于TCP协议的应用层协议,Hypertext Transfer Protocol,规定应用进程之间的通信准则;

工作方式:请求&响应
交互数据方式:报文(请求报文/响应报文)

请求报文:请求行+请求头+请求体

请求行:

作用:声明请求方法,主机域名,资源路径,协议版本
结构:请求方法+请求路径+协议版本

GET /chn/ysz/index.html/ HTTP/1.0

请求方法:

  • GET:请求读取资源信息
  • POST:为服务器添加信息
  • HEAD:请求读取资源的首部信息
  • DELETE:删除资源信息
  • PUT:添加文档信息
请求头:

作用:声明报文的部分信息
结构:Header:Header的值

请求头的Header:

请求体:

作用:存放需要发送给服务器的信息
形式:键值对,key1=value1&key2=value2

响应报文:状态行+响应头+响应体

状态行:

作用:声明协议版本,状态码,状态码信息描述
组成: 协议版本+状态码+状态信息

HTTP/1.0 202 Accepted
状态码:
响应头:

作用:声明报文的部分信息(同请求头)
组成:Header:Header的值


响应体:

同请求体

补充:

请求头和响应头公共的Header

HTTP断点续传实现

HTTP1.1默认支持断点续传

关联的Header如下:
  • Range:用于客户端到服务端的请求,指定传输的某一段的文件字节序号;
    Ranges:bytes=0~300 表示下载序号为0~300的字节

  • If-Range:客户端到服务端,必须与Range配合使用,判断实体是否发生改变;

  • Accept-Ranges:服务端到客户端的应答,客户端通过此判断服务端是否支持断点续传,
    Accent-Ranges:bytes 表示支持以byte为单位的断点续传

  • Content-Ranges:服务端到客户端,指定返回文件资源的字节范围

服务端如果返回部分资源就返回响应头的状态码206,如果返回整个文件就是200

HTTP缓存

第一次请求数据流程

强制缓存:

服务器返回的数据带一个Cache-Control字段,表明这个数据的有效缓存时间,如果在有效时间内直接从缓存中取;

  • Cache-Control:
    Cache-Control:max-age=3600 表示改资源缓存的有效时间为1小时
    Cache-Control:no-cache 表示不使用缓存,每次都需要发送请求,并且不会被缓存到零时文件

对比缓存:

服务器会给数据带上一个最后修改时间,每次请求数据都会带上这个时间和服务端进行比较,如果服务端的最后修改时间没有改变,就返回304,从缓存中取;

两种实现方式:
  • Last-Modified/If-Modify-Since:
  • ETag/If-None-Match:
  1. Last-Modify:服务端到客户端,标识改资源的最后修改时间

  2. If-Modify-Since:客户端到服务端,当客户端再次请求一个资源时,会带上服务端给他的Last-Modify时间;

  3. ETag:服务器会返回一个ETag字段,表示文件唯一标识,客户端请求会带上这个字段标识(放在If-None-Match),服务端会通过此判断是否命中缓存;
    ETag由以下几个因素生成:

  • 文件的i-node编号(Linux下的识别文件编号)
  • 文件的最后修改时间
  • 文件大小
  1. If-None-Match:客户端到服务端,再次请求该数据带上的ETag标识;

相对于Last-Modify,ETag的优势体现在哪里?

  1. Last-Modify只能精确到秒
  2. 服务器与代理服务器时间不一致

304:未修改 自上次请求后,改资源未发生修改,可以使用缓存,不需要再次返回网页内容

HTTPS加密

HTTPS的特点:
  • 加密传输,无法被窃听
  • 校验机制,无法被修改
  • 身份证书,无法被冒充

对称加密:加密和解密的密钥相同
缺点:

  1. 密钥需要提前商定,不可以通信传输密钥
  2. 服务端需要维护多个密钥对

非对称加密:加密和解密的密钥不同(RSA)
优点:

  1. 不存在密钥传输问题
  2. 解决了密钥管理问题

公钥加密,私钥解密;私钥签名,公钥验证

HTTPS的建立过程

HTTP处理长连接

你可能感兴趣的:(HTTP协议)