[HTTP协议 | 青训营笔记]

53 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天


【HTTP协议】

Content

  • HTTP协议简介
  • HTTP协议的基本结构和发展历程
  • 常见场景中的HTTP协议应用
  • 在不同的环境中发起HTTP请求

HTTP协议简介

什么是HTTP

Hyper Text Transfer Protocol(超文本传输协议)。是一个应用层协议,基于TCP协议。请求响应,简单可扩展,无状态。

HTTP协议的基本结构和发展历程

协议分析

  • HTTP0.9版本称为单行协议,响应只有HTML文档
  • HTTP1.0版本增加了Header,有了状态码,支持多种文档类型
  • HTTP1.1版本(标准化版本)增加了链接复用,缓存以及内容协商的内容。
  • HTTP2版本,增加了使得传输更加稳定,效率更加高的版本

报文分析:

METHOD
GET请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数据
POST用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
PUT用请求有效载荷替换目标资源的所有当前表示
DELETE删除指定资源
HEAD请求一个与GET请求的响应相同的响应,但没有响应体
CONNECT建立一个到由目标资源标识的服务器的隧道
OPTIONS用于描述目标资源的通信选项
TRACE沿着目标资源的路径执行一个消息环回测试
PATCH用于对资源应用部分修改

有些请求是安全的,即不会修改服务器的数据的方法,如GET,HEAD,OPTIONS等; 有些请求是幂等的,即同样的请求被执行一次和执行多次的效果是相等的,服务器的状态也是相等的,所有安全的方法都是幂等的。

状态码

在状态码的设置中,均是使用三位数字来表示。

  • 200 OK -客户端请求成功
  • 301 -资源网页等被永久转移到其他的URL
  • 302 -临时跳转
  • 401 -未经授权访问
  • 404 -请求资源不存在,可能是输入了错误的URL
  • 500 -服务器内部发生了不可预期的错误
  • 504 -网关或者代理的服务器无法在规定的时间内得到想要的响应

RESTful API

一种API的设计风格

  • 每一个URI都代表一种资源
  • 客户端和服务器之间,传递这种资源的某种表现层
  • 客户端通过HTTP method,对服务器端资源进行操作,实现表示层状态转化

缓存

  • 强缓存
    • 本地有一份缓存,是否可以使用需要和服务端进行验证
    • 有Expires协议来规定时间,Cache-Control来规定可缓存性、到期、重新验证或重新加载
  • 协商缓存
    • 本地有缓存直接使用
    • Etag来规定资源的特定版本的标识符,类似于指纹
    • Last-Modified来编写最后修改时间

cookie

set-cookie-response,携带各种cookie的名称和值,cookie的有效期,限制制定的cookie的发送范围的文件目录,限制cookie生效的域名,限制javaScript脚本无法获得cookie等等键值对

HTTP/2

更快、更稳定、更简单

帧:是HTTP2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。

消息:与逻辑请求或响应消息对应的完整的一系列帧。

数据流:已建立的连接内的双向字节流,可以承载一条或多条信息。

HTTP2中的连接都是永久的,而且仅需要每个来源一个连接。

流控制:阻止发送方向接收方发送大量数据的机制。

HTTPS

经过TSL/SSL加密,在HTTPS加密中,对称加密和非对称加密混合使用。

HTTP协议的应用场景分析

静态资源方案:缓存+CDN+文件名hash

登录:跨域解决方案

  • CORS
  • 代理服务器
  • IFrame

登录状态会记录在cookie之中

实战

发起HTTP协议

AJAX之XHR,这是浏览器内置的发起http协议的功能,需要设置传输的信息。

AJAX之Fetch,这是XHR的升级版,使用了Promise,使用模块化设计,通过数据流处理对象,支持分块读取

用户体验

  • 网络优化
  • 稳定性