使用GET
和POST
方法的区别是什么?哪一个更安全?它们各自的(不)优点是什么?
(类似问题)
使用GET
和POST
方法的区别是什么?哪一个更安全?它们各自的(不)优点是什么?
(类似问题)
这并不是安全问题。HTTP协议将GET类型请求定义为 幂等的,而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
也完全有能力“发送”数据,因此并不是非常准确的答案。 - Patrick HofmanGET
方法存在两种常见的“安全”隐患。由于数据出现在 URL 字符串中,可能会有人在地址栏/URL 上窥视,看到他们不应该知道的内容,例如会话 cookie,这可能会被用来劫持你的会话。请记住,每个人都有相机手机。
GET
的另一个安全隐患与 GET
变量被记录在大多数 Web 服务器访问日志中作为请求 URL 的一部分有关。根据情况、监管氛围和数据的一般敏感性,这可能会引起关注。GET
请求表示不满,并因此提供不可靠的结果。
POST
支持高级功能,如支持用于文件上传到 Web 服务器的多部分二进制输入。
POST
需要一个 content-length 头,这可能会增加应用程序特定客户端实现的复杂性,因为必须事先知道提交的数据大小,以防止客户端请求以单独的递增模式形成。对于那些选择滥用 HTTP
作为 RPC(远程过程调用)传输的人来说,这可能只是一个小问题。当我从URL中检索信息时,我使用GET,而在将信息发送到URL时,我则使用POST。
这份 W3C 文档解释了使用HTTP GET和POST的情况。
我认为这是一份权威的资料。
总结如下(文档的第1.3节):
- 如果交互更像一个问题(即,它是安全操作,如查询、读取操作或查找),请使用GET。
- 如果:
- 交互更像一个订单,或者
- 交互以某种方式改变了资源的状态,用户会感知到(例如,订阅服务),或者
- 用户对交互的结果应负责任。
- 请使用POST。
获取和提交(Get 和 Post)方法与您使用的服务器技术无关,在 php、asp.net 或 ruby 中都能正常工作。 GET 和 POST 是 HTTP 协议的一部分。 如 Mark 所指出的那样,POST 更加安全。POST 表单也不会被浏览器缓存。 POST 还用于传输大量数据。
在修改数据时使用POST的原因:
同时,不要将敏感信息放在查询字符串中(只有使用 GET 才有这个选项),因为它会显示在地址栏、书签和服务器日志中。
希望这解释了人们为什么说 POST 是“安全”的原因。如果您正在传输敏感数据,必须使用 SSL。
GET
和 POST
是 HTTP 方法,它们都可以实现类似的目标。
GET
主要用于获取(检索)数据。一个 GET
请求不应该有请求体,所以除了 cookie 之外,传递信息的唯一位置就是 URL。由于 URL 的长度受限,GET
比起 POST
来说安全性较差,因为发送的数据是 URL 的一部分。
绝对不能在发送密码、信用卡或其他敏感信息时使用 GET
!数据在 URL 中对所有人可见,可能被缓存。当我们重新加载页面或点击回退按钮时,GET
不会造成任何破坏,它会被书签化,参数会留在浏览器历史记录中,只允许使用 ASCII 字符。
POST
可以涉及任何内容,如存储或更新数据、订购产品或发送电子邮件。 POST
请求具有请求体。
POST
方法用于将敏感和机密信息传输到服务器,这些信息不会在 URL 的查询参数中可见,也不会保存在浏览器的历史记录中。数据长度没有限制。当我们重新加载页面时,浏览器应该警告用户即将重新提交数据。 POST
请求不能被书签化。