使用GET方法和POST方法有什么不同?哪个更安全?它们各自的优点是什么?

(类似问题)


当前回答

这不是安全问题。HTTP协议将get类型的请求定义为幂等请求,而post可能有副作用。简单地说,这意味着GET用于查看某些内容而不更改它,而POST用于更改某些内容。例如,搜索页面应该使用GET,而更改密码的表单应该使用POST。

另外,请注意PHP混淆了一些概念。POST请求从查询字符串和请求体中获取输入。GET请求只是从查询字符串中获取输入。所以POST请求是GET请求的超集;你可以在POST请求中使用$_GET,甚至在$_POST和$_GET中使用相同名称的参数表示不同的含义也是有意义的。

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

其他回答

当用户在表单中输入信息并单击Submit时,有两种方式可以将信息从浏览器发送到服务器:在URL中,或在HTTP请求正文中。

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

GET方法的替代方法是POST方法。该方法将名称/值对打包在HTTP请求的主体中,这使得URL更简洁,并且没有对表单输出施加大小限制。它也更安全。

Get和Post方法与你使用的服务器技术无关,它在php、asp.net或ruby中都是一样的。GET和POST是HTTP协议的一部分。 正如mark所指出的,POST更安全。POST表单也不被浏览器缓存。 POST也用于传输大量数据。

如果您想从URL检索资源,请使用GET方法。如果你点击浏览器的后退按钮,你总是可以看到最后一页,而且它可能被书签,所以它不如POST方法安全。

如果你想向URL“提交”一些东西,请使用POST方法。例如,你想创建一个谷歌帐户,你可能需要填写所有的详细信息,然后你点击“提交”按钮(这里调用POST方法),一旦你提交成功,并尝试点击浏览器的返回按钮,你会得到一个错误或一个新的空白表单,而不是最后一页填满的表单。

如果有很多数据,或者有点敏感的信息(非常敏感的东西也需要一个安全的连接),您应该使用POST。

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

只是要小心使用GET方法点击REFRESH的人,因为数据每次都会再次发送而不警告用户(POST有时会警告用户重发数据)。

GET方法用于发送不太敏感的数据,POST方法用于发送敏感数据。 与GET方法相比,使用POST方法可以发送大量数据。 GET方法发送的数据在浏览器头栏中是可见的,而POST方法发送的数据是不可见的。