http协议中get和post的区别:

参考:http://hui.sohu.com/infonews/article/6337670107929509889

参考:https://www.cnblogs.com/yueyueyao/p/9068652.html

参考:https://zhanglin.blog.csdn.net/article/details/103059900?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

http协议最常见的两种方法GET和POST,这几点答案其实有几点并不准确

  • 请求缓存:GET 会被缓存,而post不会

  • 收藏书签:GET可以,而POST不能

  • 保留浏览器历史记录:GET可以,而POST不能

  • 用处:get常用于取回数据,post用于提交数据

  • 安全性:post比get安全

  • 请求参数:querystring 是url的一部分get、post都可以带上。 get的querystring(仅支持urlencode编码),post的参数是放在body(支持多种编码)

  • 请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制。

  • TCP包数不同:GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

1#get把请求的参数放在url上,即HTTP协议头上,其格式为:以?分割URL和传输数据,参数之间以&相连。 数据如果是英文字母/数字,原样发送,如果是空格,转换为+, 如果是中文/其他字符,则直接把字符串用BASE64加密,及“%”加上“字符串的16进制ASCII码”。 post把参数放在HTTP的包体内(requrest body)。

2#GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

3#Get 方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 Post 方法好;而 Post 方式传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制(实际上IIS4中最大量为80KB,IIS5中为100KB),这是为了避免对服务器用大量数据进行恶意攻击。

4#GET是从服务器上获取数据,POST是向服务器传送数据。

5#GET在浏览器回退时是无害的,POST会再次提交请求。

这句话简单理解就是,get会将请求参数放在请求的url中,回退操作实际上浏览器会从之前的缓存中拿结果;post每次调用都会创建新的资源。还有人说从method的定义上说,get是幂等的,老衲查了一下,等幂性的意思就是一个请求和多次请求,资源的状态是一样的。get,head,put,delete都有等幂性。

6#对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。

7#GET产生的URL地址可以加入书签,而POST不可以

8#GET请求会被浏览器主动cache,而POST不会,除非手动设置。

9#GET请求只能进行url编码,而POST支持多种编码方式。(

参考:https://www.jianshu.com/p/0fd3d0e2d415

四种常见的 POST 提交数据方式:

Enctype是指定将数据回发到服务器时浏览器使用的编码类型

1.application/x-www-form-urlencoded(提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码)

2.multipart/form-data(我们使用表单上传文件时,必须让 form 的 enctype 等于这个值。这种方式一般用来上传文件。)

3.application/json(告诉服务端消息主体是序列化后的 JSON 字符串)

4.text/xml(XML 作为编码方式)

10#GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

11#GET只接受ASCII字符数据类型的参数,而POST理论上没有限制

12#GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。GET参数通过URL传递,POST放在Request body中。

真相

由于POST需两步,时间消耗要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但并不一定是对的。

1. GET与POST都有语义,最好不要随便混用,要不然还不如合并为一个。

2. 据研究,在网络环境好的情况下,发一次包和发两次包的时间差别基本无差。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,比如Firefox只发送一次。

总结

1. 两者协议上是一样的,单从restful的角度看,是有语义上的区别的

2. 实践中,理解GET是取,不安全、幂等、可缓存;POST是给,安全、非幂等

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值