HTTP请求方法
一:http版本
- HTTP/0.9
这是http在1991年最早大规模使用的版本,如今已不再使用,在这个版本中只有GET一种请求方法,没有指定版本号,也没有请求头信息,客户端向服务器传递信息的能力非常有限。 - HTTP/1.0与HTTP/1.1
从http1.0到http1.1发生了非常大的改动,现如今被广泛使用的为http1.1,http1.0主要用在代理服务器中,支持GET、POST、HEAD三种方法,http1.1新增了OPTIONS、PUT、DELETE、TRACE、CONNECT五种方法。两个版本性能上的主要区别体现在如下所示:
1:缓存处理,在http1.0中主要使用header的if-Modified-Since、Expires来作为缓存判断的标准,http1.1则引入了更多的缓存控制策略如Entity Tag
If-Unmodified-Since,If-Match,If-None-Match来作为缓存策略。
2:带宽优化及网络连接的使用,在http1.0存在浪费带宽的现象,例如客户端只需要某个对象的一部分,而服务器将对象全部传送过来,并且不支持断点续传
功能,http1.1在请求头引用了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就能更充分利用带宽和连接。
3:错误通知的管理,在http1.1中新增了24个错误状态响应码
4:Host头处理,在http1.0中认为每台服务器都绑定一个唯一的IP地址,因此请求消息中的URL并没有传递主机名(hostanme),但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且共享一个IP地址。http1.1的请求消息和响应消息
都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误
5:长连接,http1.1支持长连接(persistentConnection)和请求的流水线处理。在一个tcp连接上可以传送多个http请求和响应,减少了建立和关闭连接的消耗和延迟,在http1.1中默认开启Connection:keep-alive,一定程度上弥补了http1.0每次请求都要创建连接的缺点。 - HTTP/2.0
这个版本于2015正式发布,主要通过支持请求与响应的多路重用来减少延迟,通过压缩http头字段将协议开销降到最低,同时增加了对请求优先级和服务器推送的支持。
二:请求方法
请求方法 | 方法作用 |
---|---|
GET | GET请求会显示请求指定的资源,一般由于数据资源的读取操作,在url末尾可以追加查询字符串,请求的body中只能包含很少数据,依据浏览器和服务器的不同而不同 |
POST | 主要用来向服务器新增数据,请求的主体理论上可以包含任意多数据 |
HEAD | HEAD与GET方法一样,只是不返回报文的主体部分,主要用于确认url的有效性及资源更新的日期时间。判断类型、查看响应中的状态码、测试资源是否被修改过、查看服务器性能 |
PUT | 用来传输文件,在请求报文的主体内容中包含文件内容,保存到请求URL指定的位置,http1.1的PUT方法自身不带验证机制,任何人都可以请求,上传文件,会有安全问题 |
DELETE | 删除服务器上某个资源 |
OPTIONS | 查询服务器支持的请求方法 |
TRACE | 可以对请求消息的传输路径进行追踪 |
CONNECT | 要求在与代理服务器通信时建立隧道,实现用隧道协议进行tcp通信。主要使用ssl(安全套接层)和tls(传输层安全)协议把通信内容加密后经网络隧道传输 |
PATCH | 与PUT请求类似,同样用于资源的更新,但有两点不同,一是PATCH一般用于资源的部分更新,而PUT用于资源的整体更新;二是当资源不存在时,PATCH会创建一个新的资源,而PUT只会对已存在的资源进行更新 |
GET与POST区别:
1:GET用于信息获取,对服务器来说它是安全的,而POST请求用于修改服务器上的资源。
2:GET请求的数据附在URL之后,POST方法提交的数据则放置在http报文实体的主体所以对于数据来说,POST安全性比GET高
3:GET传输数据量一般在2kb,原因在于GET提交数据是附在URL之后,http虽然对于URL数据长度没有限制,但是不同的浏览器或服务器对于URL长度是有限制的。理 论上,POST是没有大小限制的,但出于安全角度考虑,服务器软件在实现时会做 一定限制。
三:方法特性
幂等性: 同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。
安全性: 请求不会影响到资源的状态。
请求方法 | 幂等性 | 安全性 |
---|---|---|
GET | ✔️ | ✔️ |
POST | ✖️ | ✖️ |
HEAD | ✔️ | ✔️ |
PUT | ✔️ | ✖️ |
DELETE | ✔️ | ✖️ |
OPTIONS | ✔️ | ✔️ |