谢谢
PHP中文网2017-04-10 15:36:46
从RESTful视角来看:
1. GET是查询资源,POST是增加资源
2. 幂等特性。
GET,PUT,DELETE都是幂等操作。
POST不是。
具体你可以google一个restful相关文章。阮一峰这个也可以看看:http://www.ruanyifeng.com/blog/2011/09/restful.html
伊谢尔伦2017-04-10 15:36:46
协议角度来说, POST和GET只有报文第一行的METHOD不同,GET也是可以携带CONTENT-BODY的
补充,post也可以接收query string,最简单的栗子就是
1 2 |
|
get也可以有body,协议中只说了服务器无需关心get的body(默许了可以带),但并未明文禁止携带,评论中也有同学提到elasticsearch的栗子
get post的语义,幂等差异,我觉得已经超出了协议或者提主想要的抓包的范畴
高洛峰2017-04-10 15:36:46
前面对restful的概念都说的很清楚了,我这里补充一点,下面是个get请求, 我这里就懒得抓包了,直接在chrome的console中拷贝来的,你说的从报文的方式分析, 我可以直接告诉你本质区别
我觉得get和post的本质区别应该是参数放在哪里的区别,
get是放在header中的(所以长度有限制,是浏览器对url长度的限制),post是放在body中的(长度没有限制),
如果你问我header和body有什么区别,我也只能呵呵了(建议自己抓包看), 都是tcp数据流,header和body是 两个 /r/n 分开的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
我觉得get和post的本质区别应该是参数放在哪里的区别,
get是放在header中的(所以长度有限制,是浏览器对url长度的限制),post是放在body中的(长度没有限制),
我这里贴的post是form-data 格式的,
有很多人会把post中的 x-www-form-urlencoded方式 和get 请求搞混,因为在服务端,好多语言框架对这两种请求获取参数的方式差不多
下面可以看一下 x-www-form-urlencoded 方式
1 2 3 4 5 6 |
|
这篇文章 讲的很清楚
PHP中文网2017-04-10 15:36:46
题主提出这个问题应当是因为现在很多人使用GET来提交数据。从协议规范上来说这是一种取巧(或者说偷懒)的办法。因为GET原本是被设计用于获取数据的(HTTP协议中指出:GET和HEAD方法仅仅应该获取资源而不是执行动作)。但是GET的使用比较简单,使用POST需要在网页上创建表单,相对而言比较麻烦,所以大家就这么做了。
举个不太恰当的例子就是:POST是笔,被设计用来写字的。GET是口红,不是被设计用来写字的,但是有时候也被用来写字了。
但是仍然需要指出,使用GET代替POST并不是一个好习惯。因为GET操作可能会被一些设计粗糙的系统不正确地缓存,这会导致相应的请求没有被执行。同时,使用GET代替POST也容易产生XSS问题。
从HTTP协议规范上来说,xelz已经回答了。HTTP协议没有明确说明GET不允许带消息体(我简单查阅了一下似乎是没有,如有错误请指出),但是也没有定义GET消息体的任何功用。所以目前Web服务器接收到带有消息体的GET请求也能够正确地处理,但是消息体会被忽略。
巴扎黑2017-04-10 15:36:46
这可能多多少少有RESTful的功劳,POST/DELETE/PUT/GET和数据操作对应起来,网上资料很多。
1 2 3 4 5 |
|
另外GET的话, URL是有长度限制的,(虽然很长,但是有时候不一定足够)
PHPz2017-04-10 15:36:46
推荐你看2篇文章,第一个比第二个通俗一些,第二个在后面讲了一些http协议的东西,其实他们的区别也就这些了。
GET和POST有什么区别?
HTTP POST GET详解