HTTP请求中GET与POST方法的本质区别

在做完一个大的项目以后又产生了一些思考,重新审视了一个面试中常常被问到的问题,GET方法与POST方法的区别,其实网上有许多“标准”答案,但看过以后感觉与自己的想法有些许的出入,最后看到了几篇非常有见解的文章,产生了一些自己的理解。详细分析:语义之争,get与post区别的真相,HTTP|GET 和 POST 区别?网上多数答案都是错的!。(RFC2616)

HTTP请求中GET与POST方法究竟有什么区别呢? 

个人认为最本质的区别只有一个,就是语义上的区别,GET的语义是请求获取指定的资源,POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。换句通俗的话说,其两者均为HTTP中的请求方法,报文的格式相同,底层也都需要借助TCP连接进行实现,只是在设计HTTP官方文档RFC的时候,GET和POST被设定为了两种不同的用途,并在此基础上根据用途的不同,进行不同的默认配置(包括是否安全,是否幂等,是否可缓存,信息存储位置等等)。

但是规范毕竟是规范,并不是强制要求,你可以在POST方法的URL中添加数据,也可以使用GET方法传输的参数对数据库进行操作,只是这些并不符合规范可能会产生一些问题,比如你在浏览器中输入域名后,浏览器会使用GET方法进行网站的信息获取,再进行页面渲染,如果这时候使用POST方法对网站会对新的信息进行处理,可能会引发加载或渲染错误等问题,又比如在提交表单时不使用POST方法,再进行页面刷新或后退等操作时,就可能会产生重复提交等问题。但最后话又说回来了,在某些自己配置的接口上,若对于GET和POST的语义并没有较大区分,不会产生错误的情况下,则可替换的使用GET和POST方法使用AJAX等实现发送HTTP请求。

你可能感兴趣的:(HTTP请求中GET与POST方法的本质区别)