HTTP协议——Get与Post的区别

Get 和 Post 是从客户端浏览器向服务器发送数据参数的 HTTP 方法。这些参数可以是表单的输入、搜索标签的查询等。每当网页需要响应给用户相应的响应,或者我们甚至将其称为用户交互网页,这些 HTTP 方法就扮演了一个重要的角色,为服务器提供用户特定的输入。但是你可能想知道为什么我们需要两个不同的方式来发送输入内容。为了回答这个问题,理解这些方法的工作原理是很重要的,这样你就可以更好的理解实际的差异。

语法

首先让我们看下 HTTP 方法中 Get 和 Post 的语法。

这是 Get 的语法:

<form action=”Login.php” method=”get”>

这是 Post 的语法:

<form action=”Login.php” method=”post”> 

除了 Get 和 Post 这两个单词的差别外,语法上并没有什么大的不同。

如何将输入内容发送到服务器?

在 Get 方法中,输入的内容是被追加到 URL 的 “?”后的。然而在 Post 方法中,它是被分别作为消息发送的。有时候,你可能会在按下回车键后在 URL 中看到搜索查询。如果没有的话,在 Google 上试下。如果是 Get 方法,你可以在同一个网址中注意到搜索查询后的 “?”。与此同时,当我们使用 Post 时,我们无法在 URL 中读取输入内容,因为它是单独的,不和 URL 一块使用。

输入类型

当 Get 将输入内容追加到 URL 的“?”后,它应该采用 ASCII 字符的形式。但是 Post 甚至可以不受任何限制发送二进制数据。因此,Post 对输入类型更加灵活,因为它既可以使用 ASCII 也可以使用二进制数据。

参数数量

与 Post 相比,Get 方法只能发送有限的参数。通常,它被限制在 2k。在某些情况下,服务器可以处理数量达 64k 的参数。但是 Post 方法甚至能够以消息的形式向服务器发送文件。没错,当我们比较这二者时,我们可以说能够发送更多作为消息的参数的 Post 方法更好。

输入大小

一般来说,允许 URL 的最长长度取决与我们使用的浏览器和处理 URL 请求的 web 服务器。由于 Get 随 URL 一起发送输入内容,我们最多可以发送 2048 个字符,而且在某些情况下,它是会变的。但是当我们使用 Post 方法时,对输入大小没有限制。

输入可见性

如果你在 Google 搜索上试过的话,你就会知道在 Get 的情况下,其他人是可以看到你的输入内容的。这是因为,输入的内容只是附加到了 URL 的后面,任何人都可以在 URL 中看到它。但是,如果使用 Post 方法,那么没有人可以知道我们输入的内容。如果你不关注输入内容的可见性,请继续使用 Get。否则,请使用 Post。

默认方法

到目前为止,你可以已经了解了这两种方式是如何向服务器发送输入内容的。由于参数的使用以及传输的便利性,HTTP 的默认方法已经被选择为“Get”。尽管 Post 方法比 Get 方法的优点更多,但是作为默认使用的情况下,比较简单的 Get 方法有着更高的优先级。因此,若没有指定具体的方法,则将其视为 Get 请求。

浏览器历史记录

由于 Get 方法通过 URL 发送数据,已经发送的数据仍然保留在浏览器的历史记录中,任何人都可以通过查看我们的浏览器历史记录从而查看我们发送到服务器的内容。Post 方法则不会给他人创建这样的机会,因为它不允许浏览器保存信息。事实上,当数据通过 Post 方式发送到服务器的时候和浏览器没有任何关系,因为这些内容是通过消息发送的。

哪个是安全的?

我们已经分析了 Get 和 Post 方法之间的各种差异,现在是时候去知道哪种是安全的了。让我们看看各种安全因素从而确定相同点。

  • 书签

Get 方法允许保存书签,但 Post 不允许。任何人都可以看到被收藏的数据,这绝对是一个安全威胁。如果你的数据中包含很多的敏感信息,比如密码、银行账户信息等,那么 Get 方法可以将这些信息泄露给其他人。因此,如果处理敏感信息的话,最好使用 Post。

  • 缓存

缓存存储的信息方便了以后的检索,也节省了我们的时间。尽管它看起来很有用,但是当缓存的信息泄露到坏人手中时,存在了数据泄露的可能性。Get 允许有缓存,而 Post 不允许缓存。因此,Post 比 Get 更安全。

  • 刷新或后退

当我们点击刷新或者后退图标时,网页的 URL 会被重新执行。但是,当旧数据存在与我们系统的缓存中时,不会执行这种重新执行的操作。因此,在这种情况下,当你刷新或者后退时,你有可能获取以及从服务器获取的数据。我们应该知道这种情况什么时候发生,是 Get 还是 Post?正如我们已经知道的那样,缓存情况出现在 Get 而不是 Post,旧数据的检索可能只使用 Get 进行。即使使用 Post 也会发生这种情况,但是,在执行操作之前需要征求用户的许可。每次,我们在使用 Post 时会在执行此类检索时收到警告。

  • 破解

技术强大的人可以轻松破解 Get 方法相关的 URL 从而获取我们的信息,但是在 Post 的情况下是不可能的,至少他们需要下很多的功夫来破解。所以在大多数情况下,使用 Post 比使用 Get 更安全。

何时使用 Get?何时使用 Post?

从我们的讨论中可以清楚的得出:Get 的安全性较差,在处理大量敏感信息时使用 Get 是不可取的。在 Get 的情况下,浏览器缓存和浏览器的历史记录可以把我们的信息泄露给其他人。但是即使是在这样的情况下,Post 仍是安全的,因为它不允许缓存以及添加书签等。因此,当你需要发送大量安全信息时,最好使用 Post。

发布了140 篇原创文章 · 获赞 65 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/paradox_1_0/article/details/103718731