TTP 请求方法 GET、POST、PUT、DELETE 杂谈
2017年10月19日 21:07:47 zhiboer 阅读数:1868 标签: http协议getpostputdelete 更多
个人分类: Java编程
所属专栏: Java编程
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/claram/article/details/78289478
什么是HTTP?
HTTP的全称是超文本传输协议,通俗的讲它是一个客户端和服务器端请求和应答的标准,也是互联网上应用最为广泛的一种网络协议。
通常,由HTTP客户端发起一个请求(请求报文),建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个响应报文。
HTTP的报文结构
参考我之前的一篇文章:HTTP报文结构及请求数据大小
简单说明如下:
HTTP 请求报文
请求行
请求头
(此处必须有一空行)
请求体
- 1
- 2
- 3
- 4
示例:
POST /user HTTP/1.1
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
(此处必须有一空行)
name=world
- 1
- 2
- 3
- 4
- 5
- 6
HTTP 响应报文
响应行
响应头
(此处必须有一空行)
响应体
- 1
- 2
- 3
- 4
示例:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
(此处必须有一空行)
helloworld!
- 1
- 2
- 3
- 4
- 5
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中包含参数
- 上一篇:python3--map()函数的使用
- 下一篇:【HTTP】HTTP状态码详解