【问题标题】:Why are HTTP requests called "get" and "post"?为什么 HTTP 请求称为“get”和“post”?
【发布时间】:2026-01-15 00:40:02
【问题描述】:

为什么在制定 HTTP 请求规范时选择了名称“get”和“post”?我是否希望隐藏参数与我是从服务器检索数据还是提交数据有什么关系?

编辑:让我重新表述。我知道什么是 GET 和 POST 请求。我想知道的是,为什么我不能发出一个向服务器提交数据的请求,地址栏中可以看到谁的参数?

【问题讨论】:

  • 一开始只有“GET”,后面是“POST”。
  • 通常,除了实际的技术差异之外,GET 是一个期待应答的调用,而 POST 只是您发送到服务器的数据。这个链接谈到了这一点:javascript.about.com/od/ajax/a/ajaxgp.htm
  • 您的浏览器不允许这样做,因为这不是最终用户的常见操作。没有什么可以阻止您安装扩展程序来发送这些类型的请求。
  • 虽然不是直接的答案,但请查看REST 中的定义。
  • Also: idempotent (idempotency?) Quoteth: 幂等操作常用于网络协议的设计中,保证执行操作的请求至少发生一次,但也可能发生更多不止一次。如果操作是幂等的,那么执行两次或多次操作没有害处。

标签: http post get


【解决方案1】:

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

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

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

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

详情请见RFC2616 section 9.1,但总而言之...

特别是,已经确立了 GET 和 HEAD 方法不应该具有采取行动的意义 除了检索。这些方法应该被认为是“安全的”。

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

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

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

【讨论】:

    【解决方案2】:

    当您发送 GET 请求时,您通常会向服务器发送少量数据并获得很多返回。与 POST 请求相反。这就是为什么您通常不想看到所有这些数据的原因。

    【讨论】:

    • 同意,如果你要对一个问题投反对票,至少有礼貌地解释你的投反对票...
    • 我也很想听听为什么。他的观点是完全正确的。 AFAIK 它是关于语义的 - GET 旨在请求数据(可能通过查询指定它)和 POST 旨在发回数据。除了基于这些语义强制执行的一些限制之外,几乎没有技术差异。为正义 +1!
    【解决方案3】:

    当你想... GET 数据时使用 GET,当你向服务器发送数据时使用 POST,就像你会POST一封信给你的老板。

    使用 Web 表单是不可能的,但使用 full Http client,您还可以使用动词 DELETE 删除 资源HEAD 获取元数据标头,可能最糟糕的名称是 PUTupdate 数据。

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

    【讨论】:

    • 这和我的回答完全一样,但没有被否决。谁能解释一下?
    • @Overv 可能是因为选民并不总是花时间阅读所有其他答案并确保以一致的方式对每个答案进行投票。
    【解决方案4】:

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

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

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

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

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

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

    【讨论】:

      【解决方案5】:

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

      Get 请求用于从服务器获取数据,而 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 用于插入/更新远程数据。

      【讨论】:

      • 在请求服务器创建新资源时应使用以下语义POST。另一方面,PUTPATCH 可用于创建/更新资源。