得到(get)和邮递(post)的区别

HTTP POST请求在消息体中从客户端(浏览器)向服务器提供附加数据。相反,GET请求在URL中包含所有必需的数据。HTML中的表单可以通过在<中指定method=“POST”或method=“GET”(默认)来使用任何一种方法;表格>元素。指定的方法确定表单数据提交到服务器的方式。当方法为GET时,所有表单数据都被编码到URL中,作为查询字符串参数附加到动作URL。对于POST,表...

HTTP POST请求在消息体中从客户端(浏览器)向服务器提供附加数据。相反,GET请求在URL中包含所有必需的数据。HTML中的表单可以通过在<中指定method=“POST”或method=“GET”(默认)来使用任何一种方法;表格>元素。指定的方法确定表单数据提交到服务器的方式。当方法为GET时,所有表单数据都被编码到URL中,作为查询字符串参数附加到动作URL。对于POST,表单数据显示在HTTP请求的消息体中。

对比图

get与post比较图
得到 邮递
额定电流为4.13/512345(1175额定值) 额定电流为4.44/512345(1297额定值)
历史 参数保留在浏览器历史记录中,因为它们是网址的一部分 参数不会保存在浏览器历史记录中。
书签 可以添加书签。 无法添加书签。
后退按钮/重新提交行为 如果html格式存储在浏览器缓存中,得到请求将重新执行,但可能不会重新提交到服务器。 浏览器通常会提醒用户需要重新提交数据。
编码类型(enctype属性) 应用程序/x-www-form-url编码 多部分/窗体数据或应用程序/x-www-form-urlencoded对二进制数据使用多部分编码。
参数 可以发送,但参数数据仅限于我们可以填充到请求行(网址)中的内容。最安全的做法是使用不到2公里的参数,有些服务器最多可处理六万四千的参数 可以向服务器发送参数,包括上载文件。
更容易为脚本小子黑客 更难破解
表单数据类型限制 是,只允许ascii码字符。 没有限制。也允许使用二进制数据。
安全 由于发送的数据是网址的一部分,因此得到比邮递更不安全。所以它以明文形式保存在浏览器历史记录和服务器日志中。 邮递比得到安全一点,因为参数不存储在浏览器历史记录或网状物服务器日志中。
表单数据长度限制 是的,因为表单数据在网址中,并且网址长度受到限制。安全网址长度限制通常为2048个字符,但因浏览器和网状物服务器而异。 没有限制
可用性 发送密码或其他敏感信息时不应使用得到方法。 发送密码或其他敏感信息时使用的邮递方法。
能见度 得到方法对每个人都可见(它将显示在浏览器的地址栏中),并且对要发送的信息量有限制。 邮递方法变量不显示在网址中。
缓存 可以缓存 未缓存

表格提交的差异

METHOD=“GET”和METHOD=“POST”之间的根本区别在于,它们对应于HTTP规范中定义的不同HTTP请求。这两个方法的提交过程以相同的方式开始—表单数据集由浏览器构造,然后以enctype属性指定的方式进行编码。对于METHOD=“POST”,enctype属性可以是multipart/form data或application/x-www-form-urlencoded,而对于METHOD=“GET”,只允许application/x-www-form-urlencoded。然后将此表单数据集传输到服务器。

对于METHOD=“GET”的表单提交,浏览器通过获取action属性的值并附加一个?然后附加表单数据集(使用application/x-www-form-urlencoded内容类型编码)。然后,浏览器处理这个URL,就像在链接后面一样(或者就像用户直接键入URL一样)。浏览器将URL分成几个部分并识别主机,然后向该主机发送GET请求,URL的其余部分作为参数。服务器从那里接收。注意,这个过程意味着表单数据被限制为ASCII码。当以ASCII格式通过URL时,应特别注意对其他类型的字符进行编码和解码。

使用METHOD=“POST”提交表单会使用action属性的值和根据enctype属性指定的内容类型创建的消息发送POST请求。

利弊

因为在使用GET时表单数据是作为URL的一部分发送的--

  • 表单数据仅限于ASCII码。当以ASCII格式通过URL时,应特别注意对其他类型的字符进行编码和解码。另一方面,二进制数据、图像和其他文件都可以通过METHOD=“POST”提交
  • 所有填写的表单数据都可以在URL中看到。此外,它还存储在浏览器的用户web浏览历史/日志中。这些问题使我们变得不那么安全。
  • 但是,表单数据作为URL的一部分发送的一个优点是,可以将URL作为书签直接使用,完全绕过表单填充过程。
  • 由于URL长度有限,因此可以发送多少表单数据是有限制的。
  • 脚本小子可以更容易地暴露系统中的漏洞进行黑客攻击。例如,花旗银行是通过更改URL字符串中的帐号而遭到黑客攻击的。[1]当然,有经验的黑客或web开发人员可以暴露这些漏洞,即使使用POST;只是有点难。通常,服务器必须怀疑客户端发送的任何数据,并防止不安全的直接对象引用。

服务器端处理的差异

原则上,对提交的表单数据的处理取决于它是用METHOD=“GET”还是METHOD=“POST”发送的。由于数据以不同的方式编码,因此需要不同的解码机制。因此,一般来说,改变方法可能需要改变处理提交的脚本。例如,当使用CGI接口时,脚本在使用GET时接收环境变量(QUERYSTRING)中的数据。但是当使用POST时,表单数据在标准输入流(stdin)中传递,要读取的字节数由Content-length头给出。

推荐用法

当提交“幂等”形式时,建议使用GET—那些不会“显著改变世界状态”的形式。换句话说,只涉及数据库查询的表单。另一个观点是,几个幂等查询将具有与单个查询相同的效果。如果涉及数据库更新或触发电子邮件等其他操作,建议使用POST。

从Dropbox开发者博客:

a browser doesn’t know exactly what a particular HTML form does, but if the form is submitted via HTTP GET, the browser knows it’s safe to automatically retry the submission if there’s a network error. For forms that use HTTP POST, it may not be safe to retry so the browser asks the user for confirmation first.

“GET”请求通常是可缓存的,而“POST”请求很难缓存。对于查询系统,这可能会对效率产生相当大的影响,特别是在查询字符串很简单的情况下,因为缓存可能服务于最频繁的查询。

在某些情况下,即使对于幂等查询,也建议使用POST:

  • 如果表单数据将包含非ASCII字符(例如重音字符),那么METHOD=“GET”原则上不适用,尽管它在实践中可能会起作用(主要用于ISO拉丁1字符)。
  • 如果表单数据集很大(比如数百个字符),那么METHOD=“GET”可能会导致无法处理那么长URL的实现出现实际问题。
  • 您可能希望避免使用METHOD=“GET”,以减少用户对表单工作方式的了解,特别是通过不在URL中显示,使“隐藏”字段(INPUT TYPE=“hidden”)更加隐藏。但是,即使使用METHOD=“POST”的隐藏字段,它们仍然会出现在HTML源代码中。

https呢?

2015年5月15日更新:特别是在使用HTTPS(HTTP over TLS/SSL)时,POST是否提供了比GET更多的安全性?

这是一个有趣的问题。假设您对某个网页发出GET请求:

GET https://www.example.com/login.php?user=mickey&passwd=mini

假设您的Internet连接被监视,那么窥探者可以获得有关此请求的哪些信息?如果改为使用POST,并且用户和passwd数据包含在POST变量中,那么在HTTPS连接的情况下会更安全吗?

答案是“否”。如果您发出这样的GET请求,则监视您的web流量的攻击者将只知道以下信息:

  1. 你建立了一个HTTPS连接
  2. 主机名-www.example.com
  3. 请求的总长度
  4. 响应的长度

URL的路径部分(即请求的实际页面)以及查询字符串参数在“通过线路”(即在传输到目标服务器的途中)受到保护(加密)。POST请求的情况完全相同。

当然,web服务器倾向于在其访问日志中以纯文本形式记录整个URL;所以通过GET发送敏感信息不是个好主意。无论使用HTTP还是HTTPS,这都适用。

参考文献

  • *********:POST (HTTP)
  • HTTP请求方法
  • HTTP Post-W3.org
  • HTTP Get-W3.org
  • HTTPS是否隐藏正在访问的URL?-堆栈交换

  • 发表于 2021-07-04 12:11
  • 阅读 ( 275 )
  • 分类:IT

你可能感兴趣的文章

得到(get)和php中的post方法(post method in php)的区别

...比如在将文件上载到服务器时支持多部分二进制输入。 得到(get)和php中的post方法(post method in php)的区别 PHP中的GET-vs-POST方法 GET是一种通过将信息附加到页面请求来发送信息的方法。 POST是一种通过HTTP头传输信息的方...

  • 发布于 2020-10-17 03:43
  • 阅读 ( 188 )

包裹邮寄(parcel post)和特快专递(express post)的区别

...里做的包裹寄出。这意味着你甚至可以在你从市场买鞋时得到的鞋盒里寄送材料。你可以用包裹邮寄到澳大利亚的任何地方。它不受特快专递的限制。 包裹邮寄(parcel post)和澳大利亚邮政速递(express post of australia post)的区别 很明...

  • 发布于 2020-10-22 20:37
  • 阅读 ( 854 )

国际挂号邮件(international registered post)和特快专递(express post)的区别

...他大城市的地址,它可以在2-4天内送达。一个人在递送时得到签名,作为包裹送达的证明。这样你就可以寄出重达20公斤的包裹和重达1公斤的信件。 什么是国际特快专递(express post international)? 特快专递或国际特快专递是一种寄...

  • 发布于 2020-10-23 11:13
  • 阅读 ( 600 )

如何使用ajax发送web表单

...而且提交表单的方式相当轻松。AJAX在绝大多数网页中都得到了实现,而且它的流行程度还在不断上升。 ...

  • 发布于 2021-03-14 16:09
  • 阅读 ( 217 )

得到(get)和邮递(post)的区别

...用它。缓存和网页浏览器的历史记录可以让我们的信息在得到别人的情况下得到。但即使在这种情况下,Post仍然是安全的,因为它从不允许缓存、书签等。因此,在发送许多安全数据时最好使用Post。 让我们以一种更容易理解的...

  • 发布于 2021-06-24 03:07
  • 阅读 ( 265 )

邮递员1(postinor 1)和邮递员2(postinor 2)的区别

...然而,服用这些药片前咨询医生是很重要的。   什么是邮递员1(postinor 1)? Postinor 1是在紧急情况下使用的一次性避孕药片。但是,这种药片不能作为常用的避孕方法。如果在无保护***72小时内服用,这种药片可以有效地阻止怀...

  • 发布于 2021-06-25 05:54
  • 阅读 ( 362 )

网络获取(webget)和Web调用(webinvoke)的区别

WebGet和WebInvoke的主要区别在于WebGet用于检索数据,而WebInvoke用于更新数据。 WCF代表微软开发的Windows通信基金会。它用于开发面向服务的应用程序。它支持的主要协议是SOAP,但也支持HTTP、HTTPS等。WCF WEB HTTP编程模型提供了使用WCF...

  • 发布于 2021-07-01 12:29
  • 阅读 ( 197 )

速杆(speed post)和挂号信(registered post)的区别

...时投递挂号邮递而言,它就像普通邮递一样,包裹在其中得到登记,并从来源地到目的地保持对包裹的安全保管。 如果是速递,则进行正常的记录保存,而如果是挂号信,则进行特殊的记录保存,并附上一张确认卡,收件人需...

  • 发布于 2021-07-08 18:24
  • 阅读 ( 359 )

速杆(speed post)和信使(courier)的区别

...全球化世界中的一项重要服务。通信服务在过去二十年中得到了广泛的扩展和发展,自数字服务出现以来,通信服务正在迅速变化。运输和送货服务仍然很重要,因为许多人仍然需要把他们的产品、文件和包裹从一个地点送到另...

  • 发布于 2021-07-09 12:26
  • 阅读 ( 213 )

邮递员1(postinor 1)和邮递员2(postinor 2)的区别

...提供平板电脑的主要品牌。然而,在消费上有一点不同。邮递员1(postinor 1) vs. 邮递员2(postinor 2)Postinor 1和Postinor 2的区别在于,前者由一个表组成,表中有1500毫克的瞌睡,而后者有2个0.75毫克的瞌睡。顾名思义,Postinor 1由一片片...

  • 发布于 2021-07-11 09:26
  • 阅读 ( 138 )
mfg4537468
mfg4537468

0 篇文章

相关推荐