HTTP实用指南 | 青训营笔记

70 阅读6分钟

今天是参加字节青训营的第7天,学习了有关HTTP的一些实用技巧,主要通过HTTP定义HTTP协议分析协议发展HTTPS协议概述四个方面来介绍,下面一起来看看吧。

4bc396c9d00f240.gif

HTTP定义

  • HTTP是超文本传输协议(HyperText Transfer Protocol),这里的超文本指的就是HTML、CSS、WebAPI等。它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。它的结构可以通过下图清晰的了解。

屏幕截图 2022-08-07 201754.png

HTTP工作基本流程:

屏幕截图 2022-08-07 202026.png

注意:客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务器建立TCP连接,之后发送HTTP请求与接收HTTP响应都是通过访问Socket接口来调用TCP协议实现。


  • HTTP是一种无状态协议,HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。简单来说据说每个HTTP请求都是孤立的。这么做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务,提高效率。

但是,在许多应用场景中,我们需要保持用户登录的状态或者记录用户购物车中的商品,所登录的账号信息等。这是由于HTTP是无状态协议,所以必须引入一些技术来记录管理状态,例如cookie

  • HTTP协议还具有简单可扩展性,比如可以在请求头的header部分添加一些携带信息,使通信过程更加方便。

HTTP协议分析

  • HTTP发展历程

屏幕截图 2022-08-07 203622.png


  • HTTP报文组成

请求报文构成主要包括三个部分,分别为:请求行(包括请求方法method、URL、协议/版本)、请求头(Request Header)和请求正文。

常见的请求方法:

屏幕截图 2022-08-07 222724.png

Method的特性:

1.Safe(安全):不会修改服务器的数据的方法,例如GetHeadOptions

2.Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的他,服务器的状态也是一样的。所有的Safe方法都是幂等的,这里还有一些非Safe的幂等方法,例如PutDelete

RESTful APL:一种APL设计风格,其中REST--Representational State Transfer。随着人们对Web应用的使用需求的增加,前后端分离且客户端的种类出现多元化,在客户端和服务端需要接口进行通信时,接口的规范性开始被重视,RESTful API应运而生。

它主要包括以下三个特性:

1.每个URL代表一种资源。 2.客户端和服务器之间,传递这种资源的某种表现层。 3.客户端通过HTTP method,对服务器端资源进行操作,实现"表现层状态转化"。

这里对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GetPostPutDelete方法。换言之,使用RESTful风格的接口从接口上你只能定位其资源,但具体操作需要通过HTTP请求方法类型进行判断。

具体HTTP方法和方法含义如下:

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
  • DELETE(DELETE):从服务器删除资源。

下面我们通过动物园来举例:

屏幕截图 2022-08-07 230037.png

常用请求头

屏幕截图 2022-08-07 224143.png


响应报文构成主要包括三个部分,分别为:状态行(版本、状态码和状态)、响应头和响应正文。

这里我们来了解一下状态码。

响应状态码:访问一个网页时,浏览器会向web服务器发出请求。此网页所在的服务器会返回一个包含HTTP状态码的信息头用来响应浏览器的请求。

状态码的分类如下图所示:

屏幕截图 2022-08-07 223735.png

常见状态码:

  • 200 OK - 客户端请求成功

  • 301 - 资源(网页等)被永久转移到其它URL

  • 302 - 临时跳转

  • 400 - Bad Request - 客户端请求有语法错误,不能被服务器所理解

  • 401 - Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

  • 404 - 请求资源不存在,可能是输入了错误的URL

  • 500 - 服务器内部发生了不可预期的错误

  • 503 - Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

  • 504 - Gateway Timeout - 网关或者代理的服务器无法在规定的时间内获得想要的响应。

常用响应头:

屏幕截图 2022-08-07 224223.png


了解完请求和响应,下面是与HTTP协议应用相关的一些概念。

缓存:分为强缓存和协商缓存两种。

1.强缓存:本地资源可直接调用。 2.弱缓存:本地资源在调用之前需先进行协商验证确定是否为最新的资源,验证之后才可调用。

这里贴上课上的图辅助理解。

屏幕截图 2022-08-07 230515.png

缓存的具体工作机制

屏幕截图 2022-08-07 230751.png

cookie:类型为"小型文本文件",是某些网站为了辨别用户身份,进行 Session 跟踪而储存在用户本地终端上的数据(通常经过加密),由用户/客户端/计算机暂时或永久保存的信息。

屏幕截图 2022-08-07 231537.png


协议发展

HTTP/2:更快、更稳定、更简单,如何进行这些优化呢?我们引入了下面这些概念。

  • 帧(frame):HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。
  • 重文本会以二进制的形式进行传输,使通信更快。
  • 消息:与逻辑请求或响应消息对应的完整的一系列帧。
  • 数据流:已建立的连接内的双向字节流,可以承载一条或多条信息。
  • 交错发送,接收方重组织。
  • HTTP/2连接都是永久的,而且仅需要每个来源的一个连接。
  • 流控制:阻止发送方向接收方发送发亮数据的机制。(从某种角度来说可以达到抵御攻击的效果)

HTTPS协议概述

1.基本概念:

  • Https(HyperText Transfer Protocol over Secure Socket Layer):一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。

加密方式有两种,分别为对称加密和非对称加密。

屏幕截图 2022-08-07 232928.png

加密的数据传输流程如下:

屏幕截图 2022-08-07 233021.png

2.HTTP vs HTTPS

HTTP协议的缺点:

  • 请求信息明文传输,容易被窃听截取。
  • 数据的完整性未校验,容易被篡改
  • 没有验证对方身份,存在冒充危险

HTTPS协议的缺点:

  • HTTPS协议多次握手,导致页面的加载时间延长近50%;
  • HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
  • 申请SSL证书需要钱,功能越强大的证书费用越高。
  • SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。