我们常见的Get和Post,到底有什么区别

发表于:2021-7-27 10:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:手辰lz    来源:掘金

#
开发
分享:
  概述
  GET请求在URL中传送的参数是有长度限制的,而POST没有。
  GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。而POST数据不会显示在URL中。是放在Request body中。
  对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  GET请求参数会被完整保留在浏览器历史记录里;相反,POST请求参数也不会被浏览器保留。
  GET请求只能进行url编码( application/x-www-form-urlencoded),而POST支持多种编码方式。
  GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
  GET在浏览器回退时是无害的,而POST会再次提交请求。

  问1
  Get请求有Request body么?如果有的话参数可以像Post请求一样放在里面么?
  答: HTTP 只是一种协议规范,底层还是TCP/IP。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

  问2
  URL中传送参数的长度限制在Get和Post中都是怎么样的呢?
  业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略。所以,虽然GET可以带request body,却不能保证一定能被接收到。

  问3
  Get、Post请求发送的数据包有什么不同吗?
  GET:浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
  POST:有可能会先发送请求头,服务端返回 100-continue 然后自己在发送后面的数据包,也有可能会之间将所有的数据都发送过去,这和浏览器的设定有关系。常见的浏览器,内部设定一次POST的数据超过1KB就先只发“请求头”,否则就一次性全发。

  问4
  转发 和 重定向的区别
  转发是服务器行为,重定向是客户端行为。
  转发——>客户浏览器发送HTTP请求——>web服务器接受请求——>调用内部一个方法在容器内部完成请求处理和转发动作——>再将转发跳转到的那个网页资源返回给客户;  转发只能在同一个容器内完成 转发的时候浏览器地址是不会变的,在客户浏览器里只会显示第一次进入的那个网址或者路径,客户看不到这个过程,只是得到了想要的目标资源。转发行为浏览器只做了一次请求。(转发只能跳转一次)
  重定向——>客户浏览器发送HTTP请求——>web服务器接受请求后发送302状态码以及新的位置给客户浏览器——>客户浏览器发现是302响应,则自动再发送一个新的HTTP请求,请求指向新的地址(302:Found  临时移动,但资源只是临时被移动。即你访问网址A,但是网址A因为服务器端的拦截器或者其他后端代码处理的原因,会被重定向到网址B。)——>服务器根据此请求寻找资源发个客户;再客户浏览器中显示的是重定向之后的路径,客户可以看到地址的变化。重定向行为浏览器做了至少两次请求。(重定向可以跳转多次)

  问5
  重定向 301 和302 的区别
  在客户端是无感的,就是url 变换了下就没了。
  301 Moved Permanently 永久重定向。 浏览器会去做一些优化操作。比如更新书签的地址,更新历史记录,下次访问就直接访问新的地址了。爬虫也会去更新自己的数据库
  302 Moved Temporarily 临时重定向。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号