素材牛VIP会员
POST和GET的根本区别是什么?
 钱***8  分类:PHP代码  人气:1703  回帖:16  发布于6年前 收藏
  1. POST和GET的根本区别是什么?(请不要回答POST安全或POST传递的信息容量大)
  2. 请从数据包报文的角度分析POST和GET的区别

谢谢

 标签:postgetphp

讨论这个帖子(16)垃圾回帖将一律封号处理……

Lv3 码奴
销***表 PHP开发工程师 6年前#1

如果非得说不同的话,那就是浏览器处理这两种协议的方式不同,GET想刷新几次刷新几次,POST刷新就会提示“重复提交表单”,非要给这两个扣个帽子,那就应该是根据流传下来的习惯,这两个东西的“幂等性”不同。

至于后台处理POST和GET有没有不同,那就不好说了。
以前貌似试过,jsp的servlet.getParameter取不到POST放在URL的参数。我不确定。

Lv6 码匠
飞***神 PHP开发工程师 6年前#2

可以看看这篇文章 链接描述

Lv3 码奴
mo***id 站长 6年前#3

哎,你真是天天没事干,这种问题搞清楚了对开发来说又有什么帮助啊?程序是用来解决问题的,你是纯搞理论研究的,反正我是无知者无畏,it知识是学不完的,能会用一些都不错了,死抠这个你可以抠十年,最后抠出来了还没有什么应用场景骚年

Lv3 码奴
郑***y 其它 6年前#4

协议角度来说, POST和GET只有报文第一行的METHOD不同,GET也是可以携带CONTENT-BODY的

补充,post也可以接收query string,最简单的栗子就是

<form method="post" action="/query.do?type=1">

get也可以有body,协议中只说了服务器无需关心get的body(默许了可以带),但并未明文禁止携带,评论中也有同学提到elasticsearch的栗子

get post的语义,幂等差异,我觉得已经超出了协议或者提主想要的抓包的范畴

Lv2 入门
逸***S JS工程师 6年前#5

get 一万遍 得到的都是同一个东西 post就不一样了 这个就是等幂和非等幂

Lv6 码匠
捂***功 移动开发工程师 6年前#6

题主提出这个问题应当是因为现在很多人使用GET来提交数据。从协议规范上来说这是一种取巧(或者说偷懒)的办法。因为GET原本是被设计用于获取数据的(HTTP协议中指出:GET和HEAD方法仅仅应该获取资源而不是执行动作)。但是GET的使用比较简单,使用POST需要在网页上创建表单,相对而言比较麻烦,所以大家就这么做了。
举个不太恰当的例子就是:POST是笔,被设计用来写字的。GET是口红,不是被设计用来写字的,但是有时候也被用来写字了。
但是仍然需要指出,使用GET代替POST并不是一个好习惯。因为GET操作可能会被一些设计粗糙的系统不正确地缓存,这会导致相应的请求没有被执行。同时,使用GET代替POST也容易产生XSS问题。

从HTTP协议规范上来说,xelz已经回答了。HTTP协议没有明确说明GET不允许带消息体(我简单查阅了一下似乎是没有,如有错误请指出),但是也没有定义GET消息体的任何功用。所以目前Web服务器接收到带有消息体的GET请求也能够正确地处理,但是消息体会被忽略。

Lv4 码徒
麦***6 站长 6年前#7

本质区别是数据放在哪里。

性质性的区别是幂等。

Lv1 新人
阿***扫 JAVA开发工程师 6年前#8

抓包的时候可以发现:
get一般就1到2个tcp包(信息头和数据都在一起,如果信息头内容很多就会产生2个或者多个包),而post至少2个包(第一个包是信息头,第二个才是数据)。

Lv6 码匠
qq***42 PHP开发工程师 6年前#9
  1. 有没有BODY部分,也就是说除了URL和头部,有没有信息体是根本区别。所以GET不能用来从客户端传送大量数据到服务器端。因为GET所有的参数都在URL(浏览器地址栏)里。
  2. HTTP是应用层协议,一般基于TCP协议的可靠数据流。所以分析HTTP不必分析报文和数据包。

举例:
GET方法:
GET /index.html?name=leo HTTP/1.1
Accept: / <这是头部>
<空行>
结束

POST方法:
POST /index.html HTTP/1.1
Acept: /
Content-Length: 10
<空行>
1234567890
<空行>
结束

Lv1 新人
袜***了 PHP开发工程师 6年前#10

GET获取与POST给予的关系

上一页12下一页
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取