当前位置:  开发笔记 > 编程语言 > 正文

你什么时候使用POST,什么时候使用GET?

如何解决《你什么时候使用POST,什么时候使用GET?》经验,为你挑选了10个好方法。

根据我的收集,有三类:

    切勿使用GET和使用POST

    切勿使用POST和使用GET

    你使用哪一个并不重要.

假设这三个案件我是否正确?如果是这样,每个案例的一些例子是什么?



1> Brian Warsha..:

使用POST破坏性行动,如创建(我知道的讽刺),编辑和删除,因为你不能打了一个POST在浏览器的地址栏中行动.使用GET时,它是安全的,让一个人打电话的动作.所以一个URL如:

http://myblog.org/admin/posts/delete/357

应该带您到确认页面,而不是简单地删除该项目.以这种方式避免事故要容易得多.

POST也比GET您更安全,因为您没有将信息粘贴到URL中.因此使用GETmethod用于收集密码或其他敏感信息的HTML表单是不是最好的主意.

最后一点说明:POST可以传输更多的信息GET.'POST'对传输的数据没有大小限制,而'GET'限制为2048个字符.


对GET请求的响应可能会受到影响.不得对POST的响应.
@ePharaoh:它通过查看地址栏上的用户肩膀来阻止人们阅读密码.
@ePharaoh:"向一个不经意的观察者公开略少的数据"可能是一个比"更安全"更好的表述 - URL可能会在许多地方结束,比如日志,引用,缓存.你当然是对的,这不会增加安全性 - 但它限制了最不安全的做法(另见:http://thedailywtf.com/Articles/The_Spider_of_Doom.aspx)
如何在URL中粘贴信息使其更安全?(顺便说一句,我是那些认为虚假的安全感比没有安全感更危险的人之一).
@David Dorward:或者更常见的名字:肩膀攻击
URL的最大字符串大小由浏览器从内存中规定,由于IE设置标准(低标准,*插入鼓小军鼓*),大多数上限为2083,但是它会将浏览器更改为浏览器哦,搜索爬虫通常只会在2048个字符的URL
@ePharaoh许多Web服务器,如Apache将记录每一个URL来访问日志,所以如果你有使用在一个密码索取表格,那么这将被记录"GET /不安全?密码= foo的HTTP/1.1",让你将在磁盘上以明文形式提供每个密码,这是一个很大的安全风险

2> reefnet_alex..:

简单来说

使用GETsafe and请求

使用idempotentPOST请求


详细信息 每个人都有一个合适的地方.即使您不遵循RESTful原则,也可以从学习REST以及面向资源的方法如何工作中获得很多.

RESTful应用程序将neither safe nor idempotent用于两者的操作use GETs.

一个safe and idempotent操作是超出的操作safe要求.

not change the data操作是一种操作,idempotent无论您请求多少次,结果都将是一次操作.

按理说,由于GET用于安全操作,它们自动也是幂等的.通常,GET用于检索资源(例如,关于堆栈溢出的问题及其相关答案)或资源集合.

RESTful应用程序将be the same用于操作PUTs.

我知道问题是关于GET和POST,但我会在一秒钟内回到POST.

通常,PUT用于编辑资源(例如,编辑问题或堆栈溢出的答案).

A not safe but idempotent将用于任何操作POST.

通常,POST将用于创建新资源,例如创建NEW SO问题(尽管在某些设计中也会使用PUT).

如果你运行两次POST,最终会产生两个新问题.

还有一个DELETE操作,但我猜我可以留下那里:)

讨论

实际上,现代Web浏览器通常只能可靠地支持GET和POST(您可以通过javascript调用执行所有这些操作,但就在表单中输入数据和按提交而言,您通常有两个选项).在RESTful应用程序中,POST通常会被覆盖以提供PUT和DELETE调用.

但是,即使您没有遵循RESTful原则,考虑使用GET检索/查看信息和POST来创建/编辑信息也很有用.

永远不要将GET用于改变数据的操作.如果搜索引擎抓取指向您的恶意操作的链接,或者客户端书签,则可能会遇到大麻烦.



3> Douglas Leed..:

如果您不介意重复请求(即它不会改变状态),请使用GET.

如果操作确实改变了系统的状态,请使用POST.


@ user248959搜索框是否会更改可见状态?默认设置是很久以前的,可能几乎是偶然的.我还没有深入研究历史,甚至不知道POST是否是一种选择.

4> Cimplicity..:

精简版

GET:通常用于提交的搜索请求,或者您希望用户能够再次提取确切页面的任何请求.

GET的优点:

可以安全地为URL添加书签.

页面可以安全重新加载.

GET的缺点:

变量作为名称 - 值对传递给url.(安全风险)

可以传递的变量数量有限.(基于浏览器.例如,Internet Explorer限制为2,048个字符.)

POST:用于更高安全性请求,其中数据可用于更改数据库,或用于不希望某人加入书签的页面.

POST的优点:

名称 - 值对不会显示在url中.(安全+ = 1)

可以通过POST传递无限数量的名称 - 值对.参考.

POST的缺点:

使用POST数据的页面无法添加书签.(如果你愿意的话.)

版本更长

直接来自超文本传输​​协议 - HTTP/1.1:

9.3 GET

GET方法意味着检索由Request-URI标识的任何信息(以实体的形式).如果Request-URI引用数据生成过程,则生成的数据应作为响应中的实体而不是过程的源文本返回,除非该文本恰好是过程的输出.

如果请求消息包括If-Modified-Since,If-Unmodified-Since,If-Match,If-None-Match或If-Range头字段,则GET方法的语义变为"条件GET".条件GET方法请求仅在条件头字段描述的情况下传送实体.条件GET方法旨在通过允许刷新缓存的实体而不需要多个请求或传输客户端已经拥有的数据来减少不必要的网络使用.

如果请求消息包括Range头字段,则GET方法的语义变为"部分GET".部分GET请求仅传输实体的一部分,如第14.35节所述.部分GET方法旨在通过允许完成部分检索的实体而不传输客户端已经拥有的数据来减少不必要的网络使用.

当且仅当它满足第13节中描述的HTTP缓存要求时,对GET请求的响应才是可缓存的.

有关用于表单的安全注意事项,请参见第15.1.3节.

9.5 POST

POST方法用于请求源服务器接受请求中包含的实体作为Request-URI中Request-URI标识的资源的新下级.POST旨在允许统一的方法来涵盖以下功能:

现有资源的注释;

在公告栏,新闻组,邮件列表或类似文章组中发布消息;

提供数据块,例如提交表单的结果,数据处理过程;

通过追加操作扩展数据库.

POST方法执行的实际功能由服务器确定,通常依赖于Request-URI.发布的实体从属于该URI,其方式与文件从属于包含它的目录相同,新闻文章从属于发布它的新闻组,或者记录从属于数据库.

POST方法执行的操作可能不会生成可由URI标识的资源.在这种情况下,200(OK)或204(No Content)是适当的响应状态,具体取决于响应是否包括描述结果的实体.


"使用帖子数据的页面无法加入书签":嗯,这是一个优势,不是吗?您可能不希望将数据更改查询加入书签.

5> Pascal MARTI..:

第一个重要的是GET与POST 的含义:

应该使用GET来获取... 来自服务器的一些信息,

而POST应该被用来发送一些信息服务器.


在那之后,可以注意到以下几点:

使用GET,您的用户可以在浏览器中使用"后退"按钮,他们可以为页面添加书签

您可以作为GET传递的参数大小有限制(对于某些版本的Internet Explorer,如果我没有记错的话,则为2KB) ; POST的限制更多,通常取决于服务器的配置.


无论如何,我认为没有GET我们就不能"活着":想想你每天使用参数在查询字符串中使用了多少个URL - 没有GET,所有这些都不起作用;-)


@ Chacha102除了你还需要获得该资源.几乎所有页面,图像,脚本等都使用GET加载到Web浏览器中.
@ Chacha102 - 即使是`www.mypage.com/contact /`也在内部使用GET,比如`index.php?url =/contact /`

6> Mark Byers..:

除了许多Web浏览器中的长度约束差异之外,还存在语义差异.GET应该是"安全的",因为它们是不改变服务器状态的只读操作.POST通常会更改状态,并会在重新提交时发出警告.搜索引擎的网络抓取工具可能会进行GET但不应该进行POST.

如果要在不更改状态的情况下读取数据,请使用GET;如果要更新服务器上的状态,请使用POST.



7> 小智..:

我的一般经验法则是当您向服务器发出不会改变状态的请求时使用Get.帖子保留用于改变状态的服务器的请求.



8> ceejayoz..:

一个实际的区别是浏览器和Web服务器对URL中可以存在的字符数有限制.它从应用程序到应用程序是不同的,但如果你textarea的表单中有它,那肯定可以点击它.

另一个与GET相关的问题 - 它们被搜索引擎和其他自动系统索引.Google曾经有一款产品可以预览您正在查看的页面上的链接,因此如果您点击这些链接,它们的加载速度会更快.它对那些有链接的网站造成了严重破坏delete.php?id=1- 人们丢失了整个网站.



9> Kyle Cronin..:

如果希望URL反映页面状态,请使用GET.这对于查看动态生成的页面非常有用,例如此处显示的页面.应该在表单中使用POST来提交数据,例如当我单击"发布您的答案"按钮时.它还会生成一个更干净的URL,因为它不会在路径后生成参数字符串.



10> davenpcj..:

因为GET是纯粹的URL,所以它们可以通过Web浏览器进行缓存,并且可以更好地用于诸如一致生成的图像之类的内容.(设定到期时间)

来自gravatar页面的一个例子:http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802? d = bulletterid

GET可能会稍微提高性能,一些Web服务器在调用处理程序之前将POST内容写入临时文件.

另一件需要考虑的是尺寸限制.GET受URL大小的限制,标准为1024字节,但浏览器可能支持更多.

传输更多数据应该使用POST来获得更好的浏览器兼容性.

甚至低于这个限制也是一个问题,正如另一张海报所写的那样,URL中的任何内容都可能最终出现在浏览器UI的其他部分,如历史.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有