HTTP 请求方法 GET、POST、PUT、DELETE 杂谈

一、什么是HTTP?

HTTP的全称是超文本传输协议,通俗的讲它是一个客户端和服务器端请求和应答的标准,也是互联网上应用最为广泛的一种网络协议。

通常,由HTTP客户端发起一个请求(请求报文),建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个响应报文。

二、HTTP的报文结构

参考我之前的一篇文章:HTTP报文结构及请求数据大小
简单说明如下:
HTTP 请求报文

请求行
请求头
(此处必须有一空行)
请求体

示例:

POST /user HTTP/1.1
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
(此处必须有一空行)
name=world

HTTP 响应报文

响应行
响应头
(此处必须有一空行)
响应体

示例:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
(此处必须有一空行)
helloworld!

三、HTTP的请求方法

HTTP/1.1协议中共定义了八种方法,来表明对 Request-URL 指定的资源不同请求方式。

1、OPTIONS

返回服务器对指定资源提供的的 HTTP 请求方法。

2、HEAD

该方法与 GET 方法类似,获取指定的资源,但该方法不返回请求体。

3、GET

获取指定的资源,而且应该是安全的和幂等的。幂等是一个数学的概念,通俗的讲就是一次请求和多次请求返回的结果是一致的。该方法一般用来查询数据,但是需要考虑查询条件的长度问题,参考HTTP报文结构及请求数据大小,例如:

  • 根据用户ID获取用户信息,该接口只包含固定长度的用户ID信息,因此该接口可以使用 GET 方法提供服务。
  • 根据多个查询条件获取用户列表数据,查询条件可能会包含用户姓名、单位名称、岗位名称等不确定的长度的字段,不建议使用 GET 方法,建议使用 POST 方法。

4、POST

向指定资源提交数据进行请求处理,如:提交表单或者上传文件。

5、PUT

向指定资源上传其最新内容。

6、DELETE

删除指定的资源。

7、TRACE

回显服务器收到的请求,主要用于测试或诊断。

8、CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

注意:
根据RFC2616,HTTP Method是区分大小写的,而Header是不区分的。
当指定资源不支持对应的请求方法的时候,服务器返回状态码405(Method Not Allowed)。
当服务器不认识或者不支持对应的请求方法时,服务器返回状态码501(Not Implemented)。

四、对于网上传言的看法

1、GET、POST与安全没有太大关系

从以下几个方面讲 POST 确实比 GET 安全一些:

  • GET 方法容易被浏览器缓存
  • 在浏览器的历史记录中会保留请求的地址
  • 使用 GET 提交数据还可能会造成Cross-site request forgery攻击。

上述内容只是些“小儿科”的解释,对于真正意义上的安全起不到任何作用,比如:我对你的整个 HTTP 请求进行了代理,不管是 GET 还是 POST 方法提交的请求,所有数据一览无余。要正真的解决安全问题就需要用到对称加密、非对称加密、摘要算法、数字签名、数字证书。所以安全与 GET、POST基本没有关系,对请求信息、响应信息进行加密才是最重要的。

2、 GET、POST对数据请求长度的限制

参考我之前的一篇文章:HTTP报文结构及请求数据大小

3、GET、POST与请求数据如何传递没有关系

GET 和 POST 是由 HTTP 协议定义的。HTTP协议中没有定义:GET请求的数据要放在URL中,POST请求的数据就要放在BODY中,而不能放在BODY中。是 HTML 标准对 GET、POST进行了以上的约定。现在的Web Server大都是支持GET中包含BODY这样的请求。

总结:我们可以在 GET 请求中通过 body 传递参数,但是需要后端服务进行相应的解析,在复杂的网络环境中需要考虑中转服务器、代理服务器对 body 数据的处理,避免参数丢失。

参考资料
浅谈HTTP中Get与Post的区别
99%的人都理解错了HTTP中GET与POST的区别
不再以讹传讹,GET和POST的真正区别
不能在HTTP GET请求的body中包含参数

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值