GET 和 POST 请求的区别
HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口,HTTPS的默认端口为443。
1. HTTP请求的方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序号 | 方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|---|
1 | GET | 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中。 | 1.0;1.1 |
2 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。可能会导致新的资源的建立和/或已有资源 的修改。 | 1.0;1.1 |
3 | HEAD | 只获取响应头的信息,不获取响应主体内容。向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回,可用于欲判断某个资源是否存在。 | 1.0;1.1 |
4 | OPTIONS | 试探性请求,在CORS跨域请求中,所以正常请求发送前,先发送一个试探请求,验证是否可以和服务器正常的建立连接。 | 1.1 |
5 | PUT | 向指定资源位置上传其最新内容。 | 1.0;1.1 |
6 | DELETE | 请求服务器删除Request-URI所标识的资源。 | 1.0;1.1 |
7 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 | 1.1 |
8 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 | 1.1 |
9 | LINK | 请求服务器建立链接关系。 | 1.0 |
10 | UNLINE | 断开链接关系 | 1.0 |
注意:
方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,返回状态码501(Not Implemented)。
2. GET 和 POST 请求方法的区别
GET 和 POST 最本质的区别是“约定和规范”上的区别,在规范中,定义 GET 请求是用来获取资源的,也就是进行查询操作的,而 POST 请求是用来传输实体对象的,因此会使用 POST 来进行添加、修改和删除等操作。
GET | POST | |
---|---|---|
请求参数 url 可见性 | 可见 | 不可见 |
传递参数方式 | 一般是通过 ? 跟在 URL 后面的,多个参数通过 & 连接,即请求参数在 URL 中传输 | 一般是包含在 request body 体传输 |
缓存机制 | ||
时间消耗 | ||
请求报文 | 第一行是:GET /uri HTTP/1.1 \r\n | 第一行则是:POST /uri HTTP/1.1 \r\n |
请求编码 | 只进行 url 编码(application/x-www-form-urlencoded),只接受ASCII字符的数据类型 | 支持多种编码方式(application/x-www-form-urlencoded 或 multipart/form-data),可以传输二进制数据 |
传输的数据大小 | URL 的长度是有限制的,通常为 2k-4k | 存放在请求正文(request body)中,取决于后端配置 |
时间消耗 | ||
请求过程 |
|
|
安全性 | 请求底层都是基于 TCP/IP 协议实现的,均为明文传输 |
3. URL中特殊字符的处理
URI 中的保留字不参与编码。保留字符一共有两大类:
gen-delims:: / ? # [ ] @
sub-delims:! $ & ' ( ) * + , ; =
URI 的编码规则:把非限定范围的字符转为 16 进制,然后前面加百分号。
如:空格字符转为十六进制是 0x20,前面再加上百分号,就是 %20。
URL字符转义
字符 | 含义 | 转义 |
---|---|---|
+ | URL 中+号表示空格 | %2B |
空格 | URL中的空格可以用+号或者编码 | %20 |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的URL和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL 中指定的参数间的分隔符 | %26 |
= | URL 中指定参数的值 | %3D |
注:
表单提交的空格转换后的编码是加号;
----
作者:快乐随行
著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明原文作者及出处。
许可: CC BY-SA 4.0
----