使用GET
或POST
方法有什么区别?哪一个更安全?它们各自的(缺点)优点是什么?
(类似的问题)
使用GET
或POST
方法有什么区别?哪一个更安全?它们各自的(缺点)优点是什么?
(类似的问题)
Answers:
这不是安全问题。HTTP协议将GET类型的请求定义为幂等,而POST可能会有副作用。用简单的英语来说,这意味着GET用于查看某些内容,而不进行更改,而POST用于更改某些内容。例如,搜索页面应使用GET,而更改密码的表单应使用POST。
另外,请注意,PHP使概念有些混乱。POST请求从查询字符串以及通过请求正文获取输入。GET请求只是从查询字符串获取输入。因此,POST请求是GET请求的超集;您可以$_GET
在POST请求中使用,甚至在其中包含相同名称$_POST
且$_GET
含义不同的参数甚至更有意义。
例如,假设您有一个用于编辑文章的表单。article-id可能在查询字符串中(因此可以通过来使用$_GET['id']
),但是假设您要更改article-id。然后,新ID可能会出现在请求正文中($_POST['id']
)。好的,也许这不是最好的例子,但我希望它能说明两者之间的区别。
当用户以表格形式输入信息并单击Submit时,可以通过两种方式将信息从浏览器发送到服务器:URL中或HTTP请求正文中。
在前面的示例中使用的GET方法将名称/值对附加到URL。不幸的是,URL的长度是有限的,因此该方法仅在参数很少的情况下才有效。如果表单使用大量参数,或者参数包含大量数据,则URL可能会被截断。另外,URL上传递的参数在浏览器的地址字段中可见,而不是显示密码的最佳位置。
GET方法的替代方法是POST方法。此方法将名称/值对打包在HTTP请求的正文中,这使URL更加整洁,并且对表单输出没有大小限制。它也更安全。
最好的答案是第一个。
您正在使用:
GET
也完全能够“发送”数据,因此答案不是很准确。
使用有两个常见的“安全性”含义GET
。由于数据出现在URL字符串中,因此可能有人在您的地址栏/ URL旁望着您,可能会看到他们不应该看到的内容,例如可能会用于劫持您会话的会话cookie。请记住,每个人都有照相手机。
另一个安全隐患GET
与将GET
变量记录到大多数Web服务器访问日志中作为请求URL的一部分有关。根据情况,法规环境和数据的总体敏感性,这可能会引起关注。
某些客户端/防火墙/ IDS系统可能不赞成GET
包含过多数据的请求,因此可能会提供不可靠的结果。
POST
支持高级功能,例如支持用于文件上传到Web服务器的多部分二进制输入。
POST
需要一个内容长度报头,这可能会增加专用客户端实现的复杂性,因为必须提前知道提交的数据大小,以防止客户端请求仅以单遍递增方式形成。对于那些选择HTTP
通过将其用作RPC(远程过程调用)传输来滥用的人来说,这可能是个小问题。
其他人已经在涵盖语义差异和该问题的“何时”部分方面做得很好。
如果有大量数据或一些敏感信息(真正敏感的东西也需要安全连接),则应使用POST。
如果您希望人们能够为您的页面添加书签,请使用GET,因为所有数据都包含在书签中。
只是要小心人们使用GET方法击中REFRESH,因为数据每次都会再次发送而不会警告用户(POST有时会警告用户有关重新发送数据)。
更改数据时使用POST的原因:
另外,不要在查询字符串中放入敏感信息(只有GET选项),因为它会显示在地址栏,书签和服务器日志中。
希望这可以解释为什么人们说POST是“安全的”。如果要传输敏感数据,则必须使用SSL。
GET
而POST
在HTTP方法,其可以实现类似的目标
GET
基本上只用于获取(检索)数据,A GET
不应该有主体,因此,除了cookie之外,传递信息的唯一位置是URL,URL的长度受到限制,GET
与之相比,安全性较低,POST
因为发送的数据是其中的一部分网址
GET
发送密码,信用卡或其他敏感信息时切勿使用!,URL中的每个人都可以看到数据,可以缓存数据。
GET
在重新加载或调用返回按钮时是无害的,它将被标记为书签,参数保留在浏览器历史记录中,仅允许使用ASCII字符。
POST
可能涉及任何内容,例如存储或更新数据,订购产品或发送电子邮件。POST
方法有一个身体。
POST
该方法已经过安全保护,可以将敏感和机密信息传递给服务器,该方法在URL的查询参数中将不可见,并且参数也不会保存在浏览器历史记录中。数据长度没有限制。当我们重新加载时,浏览器应警告用户数据将要重新提交。POST
方法无法收藏