一、HTTP请求方法
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
(非完整)
最基本的方法有4种,分别是GET,POST,PUT,DELETE。
可以这样理解:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。
二、get和post的联系和区别
1. get和post的联系
- get和post本质上建立的都是TCP连接,所以get和post能做的事情是一样的。你要给get加上request body,给post带上url参数,技术上也是完全行的通的。
- 主要是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
- 总的来说get主要用于向服务器索取数据,而post主要用于向服务器提交数据。
2. get和post的区别
- 回退,get在浏览器回退时是无害的,即不会产生副作用,而post会再次提交请求,产生一些副作用
- 传递方式,get参数通过url传递,而post放在request body中
- 编码格式,get请求只能进行url编码,而post支持多种编码方式
- 容量, get可传递的数据长度较小,post可传递的数据长度较大
实际上HTTP协议对url的长度是没有限制的,限制URL长度大多数是浏览器或者服务器的配置参数。同理post理论上来说也没有大小限制,实际上post所能传递的数据量取决于服务器的设置和内存大小。 - 缓存,get请求会被浏览器主动缓存,而post不会,除非手动设置。而且get请求参数会被完整保留在浏览器历史记录里,而post中的参数不会被保留。
- 安全性,post请求比get请求相对安全一些,因为get请求的参数直接暴露在url上,而且数据会保存在浏览器历史纪录中。由于HTTP是明文传输,所以post请求通过开发者工具或者抓包也可以看到。
- 数据包,get产生一个TCP数据包;post产生两个TCP数据包。
对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于post,浏览器先发送header,服务器响应100 continue后,浏览器再发送data,服务器响应200 (返回数据)。(并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次)
注: 关于get和post的区别参考了很多博客,发现水还有点深,并且说法不一,本文并不想将其复杂化,仅从简单的层面谈一谈对它们的认识,