一、请求分类
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:PUT, OPTIONS, DELETE, TRACE 和 CONNECT 方法。
HTTP2.0新增了一些请求方法,最常用的为:PATCH方法。
1.GET:从服务器请求数据,并返回实体主体。
2.POST:向服务器提交要被处理的数据。数据被包含在请求体body中。可能会导致新的资源的建立或已有资源的修改。
3.HEAD:与 GET 类似,但只返回服务器 HTTP 报头,不返回实体主体。
4.PUT:向服务器提交数据更新指定资源的全部内容。
5.PATCH:与PUT类似,但一般用于更新指定资源的部分内容。可能会导致新的资源的建立。
6.DELETE:请求服务器删除URI(统一资源标识符,Uniform Resource Identifier)所标识的资源。
7.OPTIONS:返回服务器支持的 HTTP 方法,与HEAD类似,常用于测试服务器的性能。
8.TRACE:回显服务器收到的请求,主要用于测试或诊断。
9.CONNECT:HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。
二、幂等性
HTTP的幂等方法,是指无论调用这个请求多少次,都会获得相同结果的HTTP方法。
幂等 | GET、PUT、DELETE |
非幂等 | POST、PATCH |
三、GET与POST
GET | POST | |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交) |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 可缓存 | 不可缓存 |
历史 | 参数保留在浏览器历史中 | 参数不会保存在浏览器历史中 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码 |
对数据长度的限制 | 有限制。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符) | 无限制 |
对数据类型的限制 | 只允许 ASCII 字符 | 无限制。允许二进制数据 |
可见性 | 可见,数据在URL中 | 不可见,数据在HTTP请求体中 |
安全性 | 两者中较差,因为数据可见且可被保存。在发送密码或其他敏感信息时绝不要使用 GET | 两者中较好,因为数据不可见且参数不会被保存在浏览器历史或 web 服务器日志中 |
GET请求可以带body,但最好不要这么做。HTTP 1.1 协议Rfc7231中写到,按照规范,GET等是不可以加body的,否则出问题了不要怪规范没有提醒你。就算服务器不会忽略 GET 请求的body,各种代理和缓存可能也会过滤body。
参考文档:
《Rfc7231》
《Postman工具——请求与响应》
《Get和Post区别》
《HTTP请求方法:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE》