关于表单:我应该何时使用GET或POST方法?

When should I use GET or POST method? What's the difference between them?

使用GETPOST方法有什么区别?哪个更安全?它们各自的(dis)优势是什么?

(类似问题)


这不是安全问题。HTTP协议将get-type请求定义为等幂,而post可能有副作用。在纯英语中,这意味着get用于查看某个东西,而不更改它,而post用于更改某个东西。例如,搜索页面应该使用get,而更改密码的表单应该使用post。

另外,请注意,PHP会稍微混淆概念。post请求从查询字符串和通过请求体获取输入。GET请求只是从查询字符串中获取输入。因此,post请求是get请求的超集;您可以在post请求中使用$_GET,甚至可以在$_POST$_GET中使用相同名称的参数,这意味着不同的事情。

例如,假设您有一个用于编辑文章的表单。项目ID可能在查询字符串中(因此,可以通过$_GET['id']获得),但假设您要更改项目ID。然后,新的ID可能出现在请求主体($_POST['id']中)。好吧,也许这不是最好的例子,但我希望它能说明两者之间的区别。


当用户在表单中输入信息并单击提交时,有两种方法可以将信息从浏览器发送到服务器:在URL中,或在HTTP请求的主体中。

前面示例中使用的get方法将名称/值对附加到URL。不幸的是,URL的长度是有限的,所以只有在只有几个参数的情况下,此方法才有效。如果表单使用大量参数,或者参数包含大量数据,则可以截断URL。此外,在URL上传递的参数在浏览器的地址字段中可见,而不是显示密码的最佳位置。

get方法的替代方法是post方法。此方法将名称/值对打包到HTTP请求的主体中,这使得URL更清晰,并且对表单输出没有大小限制。它也更安全。


最好的答案是第一个。

您正在使用:

  • 要检索数据时获取(获取数据)。
  • 要发送数据时发布(发布数据)。


使用get有两个常见的"安全"含义。由于数据出现在url字符串中,可能有人越过您的肩膀在地址栏/url上查看一些他们不应该知道的内容,例如可能被用来劫持会话的会话cookie。记住,每个人都有照相手机。

get的另一个安全含义是,get变量作为请求URL的一部分被记录到大多数Web服务器的访问日志中。根据情况、监管环境和数据的一般敏感性,这可能会引起关注。

一些客户机/防火墙/IDS系统可能不支持包含过多数据的GET请求,因此可能会提供不可恢复的结果。

Post支持高级功能,例如支持用于文件上载到Web服务器的多部分二进制输入。

Post需要一个Content-Length头,这可能会增加特定于应用程序的客户端实现的复杂性,因为必须事先知道提交的数据的大小,以防止在独占的单通增量模式中形成客户端请求。对于那些选择将HTTP用作RPC传输来滥用HTTP的人来说,这可能是一个小问题。

其他人已经很好地掩盖了语义差异和这个问题的"何时"部分。


我在从URL检索信息时使用get,在向URL发送信息时使用post。


如果有大量的数据或敏感信息(真正敏感的东西也需要安全的连接),您应该使用post。

如果您希望人们能够为您的页面添加书签,请使用get,因为所有数据都包含在书签中。

只需小心使用get方法点击刷新的人,因为每次都会在不警告用户的情况下再次发送数据(post有时会警告用户重新发送数据)。


这个W3C文档解释了HTTP GET和POST的用法。

我认为这是一个权威的消息来源。

总结如下(文件第1.3节):

  • Use GET if the interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).
  • Use POST if:

    • The interaction is more like an order, or
    • The interaction changes the state of the resource in a way that the
      user would perceive (e.g., a subscription to a service), or
    • The user be held accountable for the results of the interaction.


get和post方法与您使用的服务器技术无关,它在php、asp.net或ruby中的工作原理相同。get和post是HTTP协议的一部分。正如马克所说,邮政更安全。浏览器也不缓存发布表单。post还用于传输大量数据。


更改数据时使用Post的原因:

  • 像GoogleWebAccelerator这样的网络加速器会点击页面上的所有链接并缓存它们。如果链接对事物进行了更改,这将非常糟糕。
  • 浏览器缓存GET请求,因此即使用户单击链接,也不会向服务器发送执行更改的请求。
  • 为了保护您的站点/应用程序不受CSRF的影响,您必须使用POST。要完全保护应用程序的安全,您还必须在服务器上生成一个唯一的标识符,并将其与请求一起发送。

另外,不要在查询字符串中放置敏感信息(只有get选项),因为它会显示在地址栏、书签和服务器日志中。

希望这能解释为什么人们说帖子是"安全的"。如果要传输敏感数据,则必须使用SSL。


GETwhich can和POST是HTTP方法是相似的任务P></

GETis for just获取基本数据(查询),GETshould not have a体从饼干),我知道,唯一的地方是在通信息有限公司urls are the URL的长度和在GETis less secure to,因为compared POSTsent is part of the URL数据P></

当不使用信用卡GET发送密码,或其他敏感信息。is visible to everyone,日期在the URL,可以高速缓存的日期。当我们是GETis Calling harmless reloading或反向按钮,它will be marked图书仍在浏览器历史,唯一的参数,允许的ASCII字符。P></

交什么样POST可以储存12日,在前序,或产品,或发送电子邮件。POSTmethod has a体。P></

POSTmethod is for secured敏感和机密信息通过服务器将not visible to恩在URL中的查询参数和参数不是saved在浏览器的历史。There是没有长度限制的日期。我们是reloading when the user that the alert浏览器should to be about the日期重新提交。POSTcannot be bookmarked methodP></


  • get方法用于发送不太敏感的数据,post方法用于发送敏感的数据。
  • 使用post方法,与get方法相比,可以发送大量数据。
  • get方法发送的数据在浏览器标题栏中可见,而post方法发送的数据不可见。

  • 如果你想使用get方法retrieve from the URL资源。你不能总是看到最后一页,如果你打你的浏览器和后台button of EN,EN是bookmarked is not as,as后的安全方法。P></

    如果你想用后法是submit是something to the URL。for example你想创建Google帐户,你可以填在need to the detailed information,那么你命中submit按钮(method is called在这里后,你提交successfully盎司)和反向按钮,试着打你的浏览器,你会得到的误差,或在空白表格,instead of last主页与填充层。P></


    GET法:

    • 仅用于发送256个字符的日期

    • 使用此方法时,可以在浏览器上看到信息

    • 它是表单使用的默认方法

    • 它不是那么安全。

    POST法:

    • 它用于发送无限制的数据。

    • 使用此方法,在浏览器上看不到信息

    • 您可以明确地提到POST方法

    • 它比GET方法更安全。

    • 它提供了更高级的功能