引言
超文本传输协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。 它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。 HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。 HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。
HTTP的请求方法有哪些?
HTTP 定义了一组请求方法, 以表明要对给定资源执行的操作。指示针对给定资源要执行的期望动作。
| 方法 | 描述 |
|---|---|
| GET | GET方法是请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数据。 |
| HEAD | HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体。 |
| POST | POST方法用于将请求提交到指定的资源,通常导致在服务器上的状态变化或副作用。 |
| PUT | PUT方法用请求有效载荷替换目标资源的所有当前表示。 |
| DELETE | DELETE方法删除指定的资源。 |
| CONNECT | CONNECT方法建立一个到由目标资源标识的服务器的隧道。 |
| OPTIONS | OPTIONS方法用于描述目标资源的通信选项。 |
| TRACE | TRACE方法沿着到目标资源的路径执行一个消息环回测试。 |
| PARCH | PATCH方法用于对资源应用部分修改。 |
POST和GET请求的区别
在日常的开发中最常见的就是GET和POST,我们就这两者的区别探讨一下,什么时候使用POST什么时候使用GET。
区别一:
从上文的表格不难看出,GET请求常用于获取服务端的数据,POST接口常用去修改服务端的数据,对应到数据库就是『查』和『改』的区别。
区别二:
从日常使用中我们知道GET的请求参数是拼接在URL后面的,所以GET参数的大小是有限制的(url的长度)。POST的参数是在请求体中的,理论上大小是没有限制的,最大值取决于服务器设置的大小。
区别三:
| 对比项 | GET | POST |
|---|---|---|
| 安全 | 是 | 否 |
| 幂等 | 是 | 否 |
| 可缓存 | 是 | Only if freshness information is included |
安全
这里的安全本质上指的是只读。如果一个方法是只读的,就不会引起服务端的状态变化,那么这个方法就是安全的
幂等
幂等的意思是指一个请求方法执行一次和多次的效果完全相同。GET只做读取操作,所以是幂等的。标准POST请求会修改服务端状态,因此不是幂等。
可缓存
可缓存指请求方法是否可被浏览器缓存。某些情况下的GET,POST都是可缓存的。但是绝大部分浏览器仅仅支持GET缓存。
区别四:
GET和POST本质上都是TCP链接。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。GET产生一个TCP数据包;POST产生两个TCP数据包。
GET实际发送一次请求
POST实际发送两次请求
参考
developer.mozilla.org/en-US/docs/…