据我所知,共有三类:
- 永远不要使用
GET
和使用POST
- 永远不要使用
POST
和使用GET
- 不管使用哪个。
我认为这三种情况正确吗?如果是这样,每种情况下有哪些示例?
据我所知,共有三类:
GET
和使用POST
POST
和使用GET
我认为这三种情况正确吗?如果是这样,每种情况下有哪些示例?
Answers:
使用POST
破坏性行动,如创建(我知道的讽刺),编辑和删除,因为你不能打了一个POST
在浏览器的地址栏中行动。使用GET
时,它是安全的,让一个人打电话的动作。像这样的URL:
http://myblog.org/admin/posts/delete/357
应该带您到确认页面,而不是简单地删除项目。这样避免事故要容易得多。
POST
还比更加安全GET
,因为您没有将信息粘贴到URL中。因此,最好不要将HTML表单GET
用作method
收集密码或其他敏感信息的HTML表单。
最后一点:比POST
可以传输更多的信息GET
。“ POST”对传输的数据没有大小限制,而“ GET”限制为2048个字符。
简单来说
GET
的safe and
idempotent
请求POST
的neither safe nor idempotent
请求详细信息 每个都有一个适当的位置。即使您不遵循RESTful原则,也可以通过了解REST以及面向资源的方法如何工作而获得很多好处。
RESTful应用程序将
use GETs
同时执行这两种操作safe and idempotent
。
一个safe
操作是超出的操作not change the data
要求。
一项idempotent
操作是一种结果,be the same
无论您请求多少次,结果都将如此。
有理由认为,由于GET用于安全操作,因此它们也自动成为幂等的。通常,GET用于检索资源(例如,关于堆栈溢出的问题及其相关答案)或资源集合。
RESTful应用程序将
PUTs
用于not safe but idempotent
。
我知道问题是关于GET和POST的,但是我稍后将返回POST。
通常,PUT用于编辑资源(例如,在堆栈溢出时编辑问题或答案)。
A
POST
将用于的任何操作neither safe or idempotent
。
通常,POST将用于创建新资源,例如,创建NEW SO问题(尽管在某些设计中,PUT也将用于此)。
如果您两次运行POST,最终将创建两个新问题。
还有一个DELETE操作,但是我想我可以把它留在这里了:)
讨论区
实际上,现代Web浏览器通常仅可靠地支持GET和POST(您可以通过javascript调用执行所有这些操作,但是就以表格形式输入数据并按Submit而言,通常会有两种选择)。在RESTful应用程序中,POST通常会被覆盖以提供PUT和DELETE调用。
但是,即使您没有遵循RESTful原则,也可以考虑使用GET来检索/查看信息,以及使用POST来创建/编辑信息。
绝对不要将GET用于更改数据的操作。如果搜索引擎抓取到您的恶意操作的链接,或者客户添加了书签,则可能会带来很大的麻烦。
如果您不介意重复请求(即不更改状态),请使用GET。
如果操作确实更改了系统状态,请使用POST。
method
强制执行)
GET:通常用于提交的搜索请求或您希望用户能够再次拉出确切页面的任何请求。
GET的优点:
GET的缺点:
POST:用于更高安全性的请求,其中可能使用数据来更改数据库或您不希望某人添加书签的页面。
POST的优点:
POST的缺点:
直接来自超文本传输协议-HTTP / 1.1:
9.3获取
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”。如第14.35节所述,部分GET请求仅转移实体的一部分。部分GET方法旨在通过允许部分取回的实体完成而无需传输客户端已经拥有的数据来减少不必要的网络使用。
且仅当满足GET请求的响应符合第13节中描述的HTTP缓存要求时,该响应才可以缓存。
有关用于表单的安全性注意事项,请参见15.1.3节。
9.5开机自检
POST方法用于请求源服务器接受请求中包含的实体作为请求行中Request-URI标识的资源的新下属。POST旨在允许采用统一的方法来覆盖以下功能:
注释现有资源;
将消息发布到公告板,新闻组,邮件列表或类似的文章组;
向数据处理过程提供数据块,例如提交表单的结果;
通过附加操作扩展数据库。
POST方法执行的实际功能由服务器确定,通常取决于Request-URI。发布的实体从属于该URI,其方式与文件从属于包含该实体的目录,新闻文章从属于其发布到的新闻组或记录从属于数据库的方式相同。
POST方法执行的操作可能不会导致可以由URI标识的资源。在这种情况下,适当的响应状态是200(确定)或204(无内容),这取决于响应是否包括描述结果的实体。
首先重要的是GET vs POST 的含义:
之后,需要注意几件事:
无论如何,如果没有GET,我认为我们无法“生存”:考虑每天使用多少个带有查询字符串中参数的URL -如果没有GET,所有这些URL将无法使用;-)
http://example.com/var1/value1/var2/value2/var3/value3
我们可能在技术上不再拥有GET ...
www.mypage.com/contact/
内部使用GET之类的东西index.php?url=/contact/
除了在许多Web浏览器中的长度约束差异之外,还存在语义差异。GET被认为是“安全的”,因为它们是只读操作,不会更改服务器状态。POST通常会更改状态,并会在重新提交时发出警告。搜索引擎的网络爬虫可能会执行GET,但绝不应进行POST。
如果要读取数据而不更改状态,请使用GET;如果要更新服务器上的状态,请使用POST。
一个实际的区别是浏览器和Web服务器对URL中可以存在的字符数有限制。每种应用程序的应用程序都不同,但是如果textarea
您使用表单,肯定有可能将其击中。
另一个与GET有关的陷阱-它们被搜索引擎和其他自动系统索引。Google曾经有一种产品可以在您正在查看的页面上预提取链接,因此,如果您单击这些链接,它们的加载速度会更快。它对具有链接之类的网站造成了严重破坏delete.php?id=1
-人们失去了整个网站。
当您希望URL反映页面状态时,请使用GET。这对于查看动态生成的页面(例如此处看到的页面)很有用。POST应该以表单的形式提交数据,例如当我单击“ Post Your Answer”按钮时。由于它不会在路径后生成参数字符串,因此它还会生成一个更简洁的URL。
因为GET纯粹是URL,所以它们可以被Web浏览器缓存,并且可以更好地用于诸如一致生成的图像之类的事情。(设置到期时间)
引人入胜的页面上的一个示例:http : //www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802? d=monsterid
GET可能会稍微提高性能,某些Web服务器在调用处理程序之前将POST内容写入临时文件。
要考虑的另一件事是大小限制。GET受URL大小限制,标准限制为1024字节,尽管浏览器可能支持更多。
传输更多的数据应使用POST以获得更好的浏览器兼容性。
正如另一个发布者所写,甚至还不到这个限制,这是一个问题,URL中的任何内容都可能会出现在浏览器用户界面的其他部分,例如历史记录。
本质上,您无能为力。关键是您不应该在HTTP GET上修改服务器状态。HTTP代理假定,因为HTTP GET不会修改状态,所以用户一次调用HTTP GET还是1000次调用HTTP GET都没有区别。他们使用这些信息假设可以安全地返回第一个HTTP GET的缓存版本。如果违反了HTTP规范,则可能会冒用破坏HTTP客户端和代理的风险。不要这样做:)
这涉及到REST的概念以及如何使用Web。在Software Engineering广播中有一个出色的播客,深入讨论了Get和Post的用法。
Get用于从服务器中提取数据,而无需执行更新操作。想法是,您应该能够反复使用相同的GET请求,并返回相同的信息。该URL在查询字符串中具有获取信息,因为该URL可以轻松地发送给其他系统和人,例如可以在哪里找到东西的地址。
应该使用Post(至少是基于Web的REST架构)将信息推送到服务器/告诉服务器执行操作。例如:更新此数据,创建此记录。
1.3选择HTTP GET
或POST
The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).
The interaction is more like an order, or
The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
The user be held accountable for the results of the interaction.
来源。
POST可以移动大数据,而GET不能。
但是通常,这不是关于GET的缺点,而是如果您希望自己的网站/ webapp表现良好,则是一种约定。
从RFC 2616:
9.3 GET
GET方法意味着检索Request-URI标识的任何信息(以实体形式)。如果Request-URI指的是数据产生过程,则应将产生的数据作为响应中的实体而不是过程的源文本作为实体返回,除非该文本恰好是过程的输出。
9.5 POST
POST方法用于请求源服务器接受请求中包含的实体作为请求行中Request-URI标识的资源的新从属。POST旨在允许采用统一的方法来覆盖以下功能:
- 注释现有资源;
- 将消息发布到公告板,新闻组,邮件列表或类似的文章组;
- 向数据处理过程提供数据块,例如提交表单的结果;
- 通过附加操作扩展数据库。
POST方法执行的实际功能由服务器确定,通常取决于Request-URI。发布的实体从属于该URI,其方式与文件从属于包含该实体的目录,新闻文章从属于其发布到的新闻组或记录从属于数据库的方式相同。
POST方法执行的操作可能不会导致可以由URI标识的资源。在这种情况下,适当的响应状态是200(确定)或204(无内容),这取决于响应是否包括描述结果的实体。
阅读Wikipedia中有关HTTP的文章。它将解释协议是什么以及它的作用:
得到
请求表示指定资源。请注意,不应将GET用于引起副作用的操作,例如将其用于在Web应用程序中执行操作。原因之一是机械手或搜寻器可以随意使用GET,而不必考虑请求应引起的副作用。
和
POST 将要处理的数据(例如,从HTML表单)提交到标识的资源。数据包含在请求的正文中。这可能会导致创建新资源或现有资源的更新,或者两者都有。
W3C有一个名为URI,可寻址性以及HTTP GET和POST用法的文档,该文档解释了何时使用什么。引用
1.3选择HTTP GET或POST的快速清单
- 在以下情况下使用GET:
- 交互更像是一个问题(即,它是一种安全的操作,例如查询,读取操作或查找)。
和
- 在以下情况下使用POST:
- 互动更像是订单,或者
- 交互以用户将感知的方式(例如,对服务的订阅)改变资源状态,或者o使用户对交互结果负责。
但是,在最终决定使用HTTP GET或POST之前,也请考虑敏感数据的注意事项和实际注意事项。
一个实用的示例是您提交HTML表单的任何时候。您可以为表单操作指定发布或获取。PHP将相应地填充$ _GET和$ _POST。
什么是HTTP?
超文本传输协议(HTTP)旨在启用客户端和服务器之间的通信。
HTTP充当客户端和服务器之间的请求-响应协议。
Web浏览器可能是客户端,托管网站的计算机上的应用程序可能是服务器。
示例:客户端(浏览器)向服务器提交HTTP请求;然后服务器将响应返回给客户端。响应包含有关请求的状态信息,也可能包含所请求的内容。
两种HTTP请求方法:GET和POST
用于客户端和服务器之间的请求响应的两种常用方法是:GET和POST。
GET –从指定资源请求数据POST –将要处理的数据提交到指定资源
在这里,我们区分主要区别:
POST GET PUT DELETE的简单版本
另一个区别是POST通常需要两个HTTP操作,而GET仅需要一个HTTP操作。
编辑:我应该澄清-常见的编程模式。通常,出于各种原因,使用纯正的HTML网页响应POST是一个可疑的设计,其中一个烦人的原因是“您必须重新提交此表单,您希望这样做吗?” 按下返回按钮。
expect: 100-continue
标头进行POST ,然后仅在服务器响应时发送数据100 CONTINUE
。
就像其他人回答的那样,get的URL大小是有限制的,并且文件只能通过post提交。
我想补充一个CAN使用get将内容添加到数据库中,并使用post来执行操作。当脚本收到帖子或获取信息时,它可以执行作者希望执行的任何操作。我认为对本书的措辞或阅读方式缺乏理解。
脚本作者应使用帖子来更改数据库,并仅使用get来获取信息。
脚本语言提供了许多访问请求的方法。例如,PHP允许使用$_REQUEST
来检索帖子或获取。每个人都应该有利于更具体的避免这种情况$_GET
或$_POST
。
在Web编程中,还有更多的解释空间。有一个应该做什么,一个可以做什么,但是哪个更好呢?幸运的是,在这种情况下,没有歧义。您应该使用帖子来更改数据,并且应该使用get来检索信息。