6

Why, when the specifications for HTTP requests were being made, were the names "get" and "post" chosen? How is whether I want parameters to be hidden or not at all relevant to whether I'm retrieving data from a server or submitting it?

EDIT: Let me reformulate. I know what a GET and POST request is. What I want to know is, why can't I make a request that submits data to a server, and whose parameters can be seen in the address bar?

4

5 回答 5

7

为什么在制定 HTTP 请求规范时选择了名称“get”和“post”?

GET 最先出现——它是原始 HTTP 协议中唯一支持的动词——我们只能推测选择 POST 的原因。也许是因为它让人想起将某些东西(帖子正文)放入信封(HTTP 请求)并将其放入邮箱(HTTP 服务器!)

我是否想要隐藏参数与我是从服务器检索数据还是提交数据有什么关系?

这不是关于“隐藏参数”,而是区分具有副作用的请求和没有副作用的请求。

有关详细信息,请参阅RFC2616 第 9.1 节,但总而言之...

特别是,已经建立了约定,即 GET 和 HEAD 方法不应该具有采取除检索之外的操作的意义。这些方法应该被认为是“安全的”。

因此,虽然您可以通过 GET 请求提交数据,但重复相同的请求不应产生任何其他副作用,否则您所做的并不是真正的 HTTP。

为什么我不能发出向服务器提交数据的请求,并且地址栏中可以看到其参数?

您可以使用具有查询字符串(GET 参数)的地址作为 POST 请求的目标 - 完全合法。

于 2013-05-25T14:53:06.293 回答
3

When you're sending a GET request, you generally send little data to the server and get a lot back. It's the other way around with a POST request. That's why you usually don't want to see all that data.

于 2013-05-25T14:48:50.193 回答
2

当您想要... GET数据时使用GET ,当您将数据发送到服务器时使用POST,就像您向老板发送一封信一样。

使用 Web 表单是不可能的,但是使用完整的 Http 客户端,您还可以使用动词DELETE来删除资源,使用HEAD来获取元数据标头,并且可能最糟糕的名称是PUT更新数据。

在所有这些类型的请求中,数据根本没有隐藏。它们只是没有在大多数浏览器上显示,但您可以在curl等命令行工具或 web 开发人员工具中看到它们。

于 2013-05-25T14:52:02.683 回答
1

要回答您更新的问题...当然,您可以在发送请求和接收数据方面做任何您想做的事情。

这完全取决于您如何实现服务器代码来处理它。编写一个包含查询字符串数据的 URL,使用 GET 请求(用于浏览器),然后在服务器端处理您想要创建的任何内容的创建。

这当然违反了这里许多人引用的 HTTP 规范。

您甚至可以发出使用 POST 的 AJAX 请求,其中包含正文中的一些数据以及查询字符串,并处理您需要在服务器端执行的任何操作。

同样,可以使用GET请求向服务器提交数据,并且可以通过地址栏看到。你可以选择在你的服务器代码上使用你希望的数据,这取决于你是否想遵守 HTTP 规范。

编辑 另外,你在说什么样的数据?您想通过地址栏发送文件吗?我不记得确切的 URL/Query 字符串的长度限制是多少,但我确信二进制数据不会很好地处理它......

于 2013-05-25T15:11:38.963 回答
0

数据是否隐藏是特征而不是规范。不要将其与请求规范相关联。它们就是这样设计的,就是这样。只是当您使用 GET 时,数据是从 URL 发送的,这与 POST 方法不同。毕竟,决定他必须使用哪个请求的是程序员的选择和要求。

获取请求用于从服务器获取数据,而 POST 请求用于将数据发布到服务器。

如果你看维基

GET requests a representation of the specified resource. Note that GET should not be used
for operations that cause side-effects, such as using it for taking actions in web 
applications. One reason for this is that GET may be used arbitrarily by robots or 
crawlers, which should not need to consider the side effects that a request should cause.

POST submits data to be processed (e.g., from an HTML form) to the identified resource. 
The data is included in the body of the request. This may result in the creation of a new
resource or the updates of existing resources or both.

所以本质上GET是用于检索远程数据,并POST用于插入/更新远程数据。

于 2013-05-25T14:56:32.493 回答