70-HTTP 请求方式
根据 HTTP 标准,HTTP 请求可以使用多种请求方法
- HTTP1.0 定义了三种请求方法:GET、POST 和 HEAD 方法。
- HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
1、GET【获取资源】
GET 本质就是发送一个请求来取得服务器上的某一资源。资源通过一组 HTTP 头和呈现数据(如 HTML 文本,或者图片或者视频等)返回给客户端。GET 请求中,永远不会包含呈现数据。即 GET 请求只用来向服务器获取资源,而 GET 请求本身不应该携带任何呈现数据。
- 登录时 GET 获取服务器数据库用户名和密码进行验证。
- 下载文本、图片、音视频等时获取服务器资源。
2、POST【传输实体文本】
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在 POST 请求体中。POST 请求可能会导致新的资源的建立或已有资源的修改。
- 提交用户注册信息。
- 提交修改的用户信息。
3、HEAD【获得报文首部】
类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。欲判断某个资源是否存在,我们通常使用 GET,但这里用HEAD 则意义更加明确。
- 向服务器获取某些易过期或丢失大型文件时,可用 HEAD 方式查询资源是否存在。
4、OPTIONS【询问支持的方法】
客户端询问服务器可以提交哪些请求方法。这个方法很有趣,它用于获取当前 URL 所支持的方法。若请求成功,则它会在 HTTP 头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。极少使用。
5、PUT【传输文件】
从客户端向服务器传送的数据取代指定的文档的内容,即指定上传资源存放路径。这个方法比较少见。HTML 表单也不支持这个。本质上来讲,PUT 和 POST 极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT 通常指定了资源的存放位置,而 POST 则没有,POST 的数据存放位置由服务器自己决定。
如一个用于提交博文的 URL,/addBlog。如果用 PUT,则提交的 URL 会是像这样的 /addBlog/abc123
,其中 abc123 就是这个博文的地址。而如果用 POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT 和 POST 用途是不一样的。具体用哪个还取决于当前的业务场景。
6、PATCH【局部更新文件】
是对 PUT 方法的补充,用来对已知资源进行局部更新 。极少使用。
7、DELETE 【删除文件】
基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
8、TRACE 【追踪路径】
回显服务器收到的请求,客户端可以对请求消息的传输路径进行追踪,TRACE 方法是让 Web 服务器端将之前的请求通信还给客户端的方法。主要用于测试或诊断。极少使用。
9、CONNECT 【要求用隧道协议连接代理】
HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要使用 SSL(安全套接层)和 TLS(传输层安全)协议把通信内容加密后经网络隧道传输,极少使用。
总结
以上的方法,我们可以跟数据库的 CRUD 增删改查操作对应起来,这样一来就实现了 HTTP 和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是 REST 的精髓之一。
GET 请求
- 从字面意思来说,GET 请求是用来向服务器端获取信息而发送的请求。
- 没有特殊设置, 默认情况下浏览器发送的都是 GET 请求,具体的一共有5种,点击超链接,表单提交没有设置 method,表单提交设置 method 为 get 方式,在浏览器地址栏直接输入地址访问,ajax 中设置请求方式为get。
- GET 请求也可以向服务器端发送请求参数, 形式是在 URL 地址后面加上?,请求参数名和值用=连接,多个请求参数之间使用&分隔。例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1。
- HTTP GET 方法提交的数据大小长度并没有限制,HTTP 协议规范没有对URL长度进行限制。目前说的GET长度有限制,GET方法传输的数据量一般限制在2KB-8KB左右,其原因在于:GET是通过URL提交数据,而URL本身对于数据没有限制,但是不同的浏览器对于URL是有限制的,比如IE浏览器对于URL的限制为2KB,而Chrome,FireFox浏览器理论上对于URL是没有限制的,它真正的限制取决于操作系统本身。POST 方法对于数据大小是无限制的,真正影响到数据大小的是服务器处理程序的能力。
POST 请求
- POST 请求的字面含义是向服务器端发送数据,仅在表单中设置method=”post”时,请求方式为 POST 方式,另外在 Ajax 应用中,可以指定请求方式为 POST。
- POST 请求会将请求参数放在请求体中,而不是 URL 地址后面,并且发送数据的大小是没有限制的。
GET方法和POST方法本质上的区别:
GET 一般用来从服务器获取数据,POST 一般用来向服务器发送数据。由于 GET 方式所能够携带的数据是由限制的,其数据大小通常不能超过 4K, 不适于提交大量表单数据, 故而在表单的提交方式中首选 POST 方式。
- GET方法用于信息获取,它携带的数据应该是安全的(安全:指非修改信息,如数据库方面的信息),而POST方法是用于修改服务器上资源的请求。
- GET请求的数据会附在URL之后,而POST方法提交的数据则放置在HTTP报文实体的主体里,所以POST方法的安全性比GET方法要高。
- GET 请求,没有请求体。POST 请求,如果 form 表单提交的方式为 post,则表单项的数据以请求体的形式发送给服务器,没有大小限制。