99. 在HTTP中GET和POST有何区别

HTTP协议是服务器和客户端之间的网络协议,是应用层协议。GET和POST都是 客户端的请求方法。都是向服务端发起请求,然后获取响应。

GET消息,通常是获取服务器的内容,服务器处理Get消息之后状态不会发生任何改变。 例如获取www.sohu.com的一个页面内容信息。

POST消息通常设计为是修改服务器的状态。例如客户下一个订单,创建一个帖子等, 调用一次后,服务器的状态就发生了变化,例如已经创建一个订单。

这些都是是RESTful规范的要求。具体到消息内容,GET请求消息在报文头,而POST消息 通常封装在消息体里。

从方法定义上说,get是幂等的,等幂性的意思就是一个请求和多次请求,资源的状态 是一样的。get,head,put,delete都有等幂性。因此会被浏览器和代理服务器缓存。 而post每次请求可能不一样,因此不被缓存。这些不同导致了POST和GET服务器器处理 的一些区别。

区别1

GET因为是从服务器获取资源,因此通常会被服务器或代理缓存,因此在多次存取时 速度较快。

误解1 POST比GET更安全

这个说法是错误的,这是非安全领域的外行看法,这其实相当于说英文比说中文安全, 想当然认为别人听不懂。其实对于HTTP的POST和GET都没有任何安全性可言,都是明文传输的。 在网络嗅探器及DPI(深度报文识别)等都 在网络大量部署的情况下,这些报文都是可以保存下 来并进行分析的。

如果需要保证最低的安全性,对于密码等内容请采用摘要认证算法;如果需要对实际的报文内 容进行保护,那请使用HTTPS协议来传输。

请参考超文本传输协议 RFC 2616 https://www.ietf.org/rfc/rfc2616.txt