这是我参与「第四届青训营 」笔记创作活动的第3天
什么是HTTP?
- 超文本传输协议(Hyper Text Transfer Protocol,HTTP)
- 应用层协议,基于TCP协议
- 请求-响应协议
- 简单可扩展
- 无状态
协议分析
HTTP规范定义了9种请求方法,每种请求方法规定了客户和服务器之间不同的信息交换方式,常用的请求方法是GET和POST。服务器将根据客户请求完成相应操作,并以应答块形式返回给客户。
Safe:不会修改服务器数据的方法(GET/HEAD/OPTIONS)
Idempotent:同样的请求执行一次与执行多次的效果是一样的,服务器的状态也是一样的,所有的safe方法都是Idempotent的(GET/HEAD/OPTIONS/PUT/DELETE)
| 状态码 | 请求状态 |
|---|---|
| 200 OK | 请求成功(其后是对GET和POST请求的应答文档。) |
| 201 Created | 请求被创建完成,同时新的资源被创建。 |
| 301 Moved Permanently | 所请求的页面已经转移至新的url。 |
| 302 Found | 所请求的页面已经临时转移至新的url。 |
| 401 Unauthorized | 请求未经授权 |
| 404 Not Found | 服务器无法找到被请求的页面。 |
| 500 Internal Server Error | 请求未完成。服务器遇到不可预知的情况。 |
| 504 Gateway Timeout | 网关超时。 |
RESTful
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。RESTful是一种API设计风格。
- 每个URI表示代表一种资源
- 客户端与服务器之间,传递这种资源的表现层
- 客户端通过HTTP METHOD 对服务器端资源进行操作实现“表现层状态转化”
资源与URI:
- REST全称是表述性状态转移,那究竟指的是什么的表述? 其实指的就是资源。任何事物,只要有被引用到的必要,它就是一个资源。资源可以是实体(例如手机号码),也可以只是一个抽象概念(例如价值) 。
- 要让一个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier)。 URI既可以看成是资源的地址,也可以看成是资源的名称。如果某些信息没有使用URI来表示,那它就不能算是一个资源, 只能算是资源的一些信息而已。URI的设计应该遵循可寻址性原则,具有自描述性,需要在形式上给人以直觉上的关联。
统一接口
RESTful架构风格规定,数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。
即:
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
- PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
- DELETE(DELETE):从服务器删除资源。
无状态
所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个url与之对应,可以通过HTTP中的GET方法得到资源,这是典型的RESTful风格。谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。
HTTP/2概述:更快、更稳定、更安全
概念
- 帧(frame):HTTP/2通信的最小单位,每个帧都包括帧头,至少也会标识出当前帧所属的数据流。
- 消息:与逻辑请求或响应消息对应的完整的一系列帧,
帧可以是无序的。 - 数据流:已建立的连接内的双向字节流可以承载一条或多条消息。
HTTPS
HTTPS是经过TSL或者SSL加密的。加密的方法有分为对称加密与非对称加密。对称加密是指加密与解密都用一个秘钥,非对称是指加密与解密用两个不同的秘钥:公钥与私钥。一般公钥与私钥混合使用加密过程如下图。