什么时候应该使用GET或POST方法? 他们之间有什么区别?

使用GETPOST方法有什么区别? 哪一个更安全? 他们每个人的(dis)优点是什么?

( 类似的问题 )

这不是一个安全问题。 HTTP协议将GETtypes的请求定义为幂等 ,而POST可能有副作用。 用简单的英语,这意味着GET用于查看某些东西,而不用改变它,而POST用于改变某些东西。 例如,search页面应使用GET,而更改密码的表单应使用POST。

另外请注意,PHP将这些概念混淆了一下。 POST请求从查询string和请求主体获取input。 GET请求只是从查询string获取input。 所以POST请求是GET请求的超集; 你可以在POST请求中使用$_GET ,甚至在$_POST$_GET中指定具有相同名称的参数意义不同。

例如,假设您有用于编辑文章的表单。 article-id可能在查询string中(因此可以通过$_GET['id'] ),但是假设您想要更改文章ID。 新的id可能会出现在请求主体( $_POST['id'] )中。 好的,也许这不是最好的例子,但是我希望它能说明两者的区别。

当用户在表单中input信息并单击“提交”时,可以通过两种方式将信息从浏览器发送到服务器:URL中或HTTP请求的主体内。

前面的示例中使用的GET方法将名称/值对添加到URL。 不幸的是,URL的长度是有限的,所以这种方法只适用于只有less数参数。 如果表单使用大量参数,或者参数包含大量数据,则URL可能会被截断。 此外,在URL上传递的参数在浏览器的地址字段中是可见的,而不是用于显示密码的最佳位置。

GET方法的替代方法是POST方法。 此方法将名称/值对包装在HTTP请求的正文中,这使得URL更清晰,并且不会在表单输出上施加大小限制。 这也更安全。

最好的答案是第一个。

您正在使用:

  • GET当你想要检索数据(获取数据)。
  • POST时要发送数据(POST DATA)。

使用GET有两个常见的“安全”含义。 由于数据出现在URLstring中,因此可能有人在地址栏/ URL处查看,可能会查看他们不应该知道的内容,例如可能用于劫持会话的会话cookie。 请记住, 每个人都有拍照手机。

GET的其他安全隐含与GETvariables作为请求URL的一部分被logging到大多数Web服务器访问日志中有关。 根据情况,监pipe环境和数据的一般敏感性,这可能会引起关注。

某些客户端/防火墙/ IDS系统可能会因包含过量数据的GET请求而皱眉,因此可能会提供不可靠的结果。

POST支持高级function,例如支持用于file upload到Web服务器的多部分二进制input。

POST需要一个内容长度头,这可能会增加特定于应用程序的客户端实现的复杂性,因为提交的数据大小必须事先知道,以防止客户端请求形成独占单通增量模式。也许是一个小问题对于那些select滥用HTTP作为RPC传输的用户。

其他人已经做好了涵盖这个问题的语义差异和“何时”的部分。

这里是GET请求的关键点

  • GET请求可以被caching
  • GET请求保留在浏览器历史logging中
  • GET请求可以加书签
  • 处理敏感数据时绝不能使用GET请求
  • GET请求有长度限制
  • GET请求只能用于检索数据

这是POST请求的关键点

  • POST请求从不caching
  • POST请求不会保留在浏览器历史logging中
  • POST请求不能被添加书签
  • POST请求对数据长度没有限制

当我向URL发送信息时, URL和POST检索信息时使用GET。

如果有大量的数据或者敏感信息(真正敏感的东西需要一个安全的连接),你应该使用POST。

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

只要注意那些用GET方法刷新REFRESH的人,因为每次都会重新发送数据,而不会警告用户(POST有时会警告用户重新发送数据)。

Get和Post方法与您正在使用的服务器技术无关,它在php,asp.net或ruby中的工作方式相同。 GET和POST是HTTP协议的一部分。 正如标记所指出的,POST是更安全的。 POST表单也没有被浏览器caching。 POST也被用来传输大量的数据。

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

  • 像Google Web Accelerator这样的Web加速器将会单击页面上的所有(GET)链接并caching它们。 这是非常糟糕的,如果链接改变的东西。
  • 浏览器cachingGET请求,所以即使用户点击链接,也不会向服务器发送请求来执行更改。
  • 为了保护您的站点/应用程序免受CSRF攻击,您必须使用POST。 为了完全保护您的应用程序,您还必须在服务器上生成唯一的标识符,并在请求中发送该标识符。

另外,不要把敏感信息放在查询string中(只有GET选项),因为它显示在地址栏,书签和服务器日志中。

希望这解释了为什么人们说POST是'安全的'。 如果您正在传输敏感数据,则必须使用SSL。

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

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

总结(文件的第1.3节):

  • 如果交互更像是一个问题(即,这是一个安全操作,如查询,读取操作或查找),则使用GET
  • 使用POST如果:
    • 交互更像是一个命令,或者
    • 交互以用户将感知的方式(例如对服务的订阅)改变资源的状态,或者
    • 用户对交互的结果负责。

GETPOST可以实现类似目标的HTTP方法

GET基本上只是获取(检索)数据,一个GET不应该有一个主体,所以除了cookie之外,传递信息的唯一地方是在URL中,URL的长度是有限的,与POST相比, GET的安全性更低,因为数据发送的是URL的一部分

在发送密码,信用卡或其他敏感信息时,切勿使用GET !,URL中的每个人都可以看到数据,可以caching数据。 当我们重新加载或callbackbutton时, GET是无害的,它将被书签,参数保留在浏览器历史logging中,只允许ASCII字符。

POST可能涉及任何内容,如存储或更新数据,订购产品或发送电子邮件。 POST方法有一个主体。

POST方法是安全的,用于将敏感和机密信息传递到服务器,在URL中的查询参数中不可见,并且参数不保存在浏览器历史logging中。 数据长度没有限制。 当我们重新加载浏览器时,应该提醒用户数据即将被重新提交。 POST方法不能被添加书签

  1. GET方法用于发送较不敏感的数据,而POST方法用于发送敏感数据。
  2. 与GET方法相比,使用POST方法可以发送大量的数据。
  3. 通过GET方法发送的数据在浏览器标题栏中可见,而通过POST方法发送的数据是不可见的。

如果要从URL中检索资源,请使用GET方法。 如果您点击浏览器的后退button,您总是可以看到最后一页,并且可以将其join书签,所以它不像POST方法那样安全。

如果您想向URL提交某些内容,请使用POST方法。 例如,您要创build一个Google帐户,您可能需要填写所有详细信息,然后点击“提交”button(这里调用POST方法),一旦提交成功,并尝试按下浏览器的button,你会得到错误或一个新的空白表格,而不是填写表格的最后一页。

GET方法:

  • 它仅用于发送256个字符的date

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

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

  • 它并不那么安全。


POST方法:

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

  • 用这种方法,信息在浏览器上是看不到的

  • 您可以明确提到POST方法

  • 它比GET方法更安全

  • 它提供了更多高级function