HTTP实用指南| 青训营笔记

125 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

什么是HTTP?

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

0e421a533db9a829fc6abc0d5894293.png

协议分析

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设计风格。

  1. 每个URI表示代表一种资源
  2. 客户端与服务器之间,传递这种资源的表现层
  3. 客户端通过HTTP METHOD 对服务器端资源进行操作实现“表现层状态转化”

资源与URI:

  1. REST全称是表述性状态转移,那究竟指的是什么的表述? 其实指的就是资源。任何事物,只要有被引用到的必要,它就是一个资源。资源可以是实体(例如手机号码),也可以只是一个抽象概念(例如价值) 。
  2. 要让一个资源可以被识别,需要有个唯一标识,在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定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。

### [部分内容转载自](https://www.zybuluo.com/cmd/)

HTTP/2概述:更快、更稳定、更安全

概念

  1. 帧(frame):HTTP/2通信的最小单位,每个帧都包括帧头,至少也会标识出当前帧所属的数据流。
  2. 消息:与逻辑请求或响应消息对应的完整的一系列帧,帧可以是无序的
  3. 数据流:已建立的连接内的双向字节流可以承载一条或多条消息。

3dc168bf98035556a7d97a26803d6e5.png

02bb3b2b6a840615c3174ef93b2194a.png

HTTPS

HTTPS是经过TSL或者SSL加密的。加密的方法有分为对称加密与非对称加密。对称加密是指加密与解密都用一个秘钥,非对称是指加密与解密用两个不同的秘钥:公钥与私钥。一般公钥与私钥混合使用加密过程如下图。

a909f322052668c374f2ff4b76aa7ee.png