今天是参加字节青训营的第7天,学习了有关HTTP的一些实用技巧,主要通过HTTP定义、HTTP协议分析、协议发展和HTTPS协议概述四个方面来介绍,下面一起来看看吧。
HTTP定义
- HTTP是超文本传输协议(HyperText Transfer Protocol),这里的超文本指的就是HTML、CSS、WebAPI等。它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。它的结构可以通过下图清晰的了解。
HTTP工作基本流程:
注意:客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务器建立TCP连接,之后发送HTTP请求与接收HTTP响应都是通过访问Socket接口来调用TCP协议实现。
- HTTP是一种无状态协议,HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。简单来说据说每个HTTP请求都是孤立的。这么做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务,提高效率。
但是,在许多应用场景中,我们需要保持用户登录的状态或者记录用户购物车中的商品,所登录的账号信息等。这是由于HTTP是无状态协议,所以必须引入一些技术来记录管理状态,例如
cookie。
- HTTP协议还具有简单可扩展性,比如可以在请求头的
header部分添加一些携带信息,使通信过程更加方便。
HTTP协议分析
- HTTP发展历程
- HTTP报文组成
请求报文构成主要包括三个部分,分别为:请求行(包括请求方法method、URL、协议/版本)、请求头(Request Header)和请求正文。
常见的请求方法:
Method的特性:
1.Safe(安全):不会修改服务器的数据的方法,例如Get、Head、Options。
2.Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的他,服务器的状态也是一样的。所有的Safe方法都是幂等的,这里还有一些非Safe的幂等方法,例如Put、Delete。
RESTful APL:一种APL设计风格,其中REST--Representational State Transfer。随着人们对Web应用的使用需求的增加,前后端分离且客户端的种类出现多元化,在客户端和服务端需要接口进行通信时,接口的规范性开始被重视,RESTful API应运而生。
它主要包括以下三个特性:
1.每个URL代表一种资源。 2.客户端和服务器之间,传递这种资源的某种表现层。 3.客户端通过HTTP method,对服务器端资源进行操作,实现"表现层状态转化"。
这里对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的
Get、Post、Put和Delete方法。换言之,使用RESTful风格的接口从接口上你只能定位其资源,但具体操作需要通过HTTP请求方法类型进行判断。
具体HTTP方法和方法含义如下:
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
- PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
- DELETE(DELETE):从服务器删除资源。
下面我们通过动物园来举例:
常用请求头
响应报文构成主要包括三个部分,分别为:状态行(版本、状态码和状态)、响应头和响应正文。
这里我们来了解一下状态码。
响应状态码:访问一个网页时,浏览器会向web服务器发出请求。此网页所在的服务器会返回一个包含HTTP状态码的信息头用来响应浏览器的请求。
状态码的分类如下图所示:
常见状态码:
-
200 OK - 客户端请求成功
-
301 - 资源(网页等)被永久转移到其它URL
-
302 - 临时跳转
-
400 - Bad Request - 客户端请求有语法错误,不能被服务器所理解
-
401 - Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
-
404 - 请求资源不存在,可能是输入了错误的URL
-
500 - 服务器内部发生了不可预期的错误
-
503 - Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
-
504 - Gateway Timeout - 网关或者代理的服务器无法在规定的时间内获得想要的响应。
常用响应头:
了解完请求和响应,下面是与HTTP协议应用相关的一些概念。
缓存:分为强缓存和协商缓存两种。
1.强缓存:本地资源可直接调用。 2.弱缓存:本地资源在调用之前需先进行协商验证确定是否为最新的资源,验证之后才可调用。
这里贴上课上的图辅助理解。
缓存的具体工作机制
cookie:类型为"小型文本文件",是某些网站为了辨别用户身份,进行 Session 跟踪而储存在用户本地终端上的数据(通常经过加密),由用户/客户端/计算机暂时或永久保存的信息。
协议发展
HTTP/2:更快、更稳定、更简单,如何进行这些优化呢?我们引入了下面这些概念。
- 帧(frame):HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。
- 重文本会以二进制的形式进行传输,使通信更快。
- 消息:与逻辑请求或响应消息对应的完整的一系列帧。
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条信息。
- 交错发送,接收方重组织。
- HTTP/2连接都是永久的,而且仅需要每个来源的一个连接。
- 流控制:阻止发送方向接收方发送发亮数据的机制。(从某种角度来说可以达到抵御攻击的效果)
HTTPS协议概述
1.基本概念:
Https(HyperText Transfer Protocol over Secure Socket Layer):一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。
加密方式有两种,分别为对称加密和非对称加密。
加密的数据传输流程如下:
2.HTTP vs HTTPS
HTTP协议的缺点:
- 请求信息明文传输,容易被窃听截取。
- 数据的完整性未校验,容易被篡改
- 没有验证对方身份,存在冒充危险
HTTPS协议的缺点:
- HTTPS协议多次握手,导致页面的加载时间延长近50%;
- HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
- 申请SSL证书需要钱,功能越强大的证书费用越高。
- SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。