首页 文章

POST和GET有什么区别? [重复]

提问于
浏览
347

这个问题在这里已有答案:

我最近才开始涉及PHP / AJAX / jQuery,在我看来,这些技术的一个重要部分是 POSTGET .

首先, POSTGET 之间有什么区别?通过实验,我知道 GET 将返回的变量及其值附加到URL字符串

website.com/directory/index.php?name=YourName&bday=YourBday

POST 没有 .

那么,这是唯一的区别还是有特定的规则或惯例使用其中一个?

其次,我还看到了PHP之外的 POSTGET :也是在AJAX和jQuery中 . POSTGET 如何在这3个之间有所不同?它们是相同的想法,相同的功能,只是采用不同的方式?

8 回答

  • 24

    GETPOST 是两种不同类型的HTTP请求 .

    根据Wikipedia

    GET请求指定资源的表示 . 请注意,GET不应用于导致副作用的操作,例如使用它在Web应用程序中执行操作 . 其中一个原因是机器人或爬虫可以任意使用GET,这不应该考虑请求应该引起的副作用 .

    POST将要处理的数据(例如,从HTML表单)提交到标识的资源 . 数据包含在请求正文中 . 这可能导致创建新资源或更新现有资源或两者 .

    基本上 GET 用于检索远程数据, POST 用于插入/更新远程数据 .


    HTTP / 1.1规范(RFC 2616)第9节Method Definitions包含有关 GETPOST 以及其他HTTP方法的更多信息,如果您感兴趣的话 .

    除了解释每种方法的预期用途之外,该规范还提供了至少一个实际原因,为什么 GET 仅应用于检索数据:

    使用HTTP协议的服务的作者不应该使用基于GET的表单来提交敏感数据,因为这会导致这些数据在Request-URI中编码 . 许多现有服务器,代理和用户代理会将请求URI记录在第三方可能看到的某个位置 . 服务器可以使用基于POST的表单提交


    最后,将 GET 用于AJAX请求时的一个重要考虑因素是某些浏览器 - 特别是IE--会缓存 GET 请求的结果 . 因此,例如,如果您使用相同的 GET 请求进行轮询,即使您正在查询的数据正在服务器端更新,您也将始终获得相同的结果 . 缓解此问题的一种方法是通过附加时间戳使每个请求的URL唯一 .

  • 396

    POSTGET 不同,通常在请求正文中包含相关信息 . ( GET 不应该有一个正文,所以除了cookie之外,传递信息的唯一地方就在URL中 . )除了保持URL相对清晰之外, POST 还允许您发送更多信息(因为URL的长度有限,因为所有实际目的),并允许您发送任何类型的数据(例如,文件上传表单,不能使用 GET - 他们必须使用 POST 加上特殊的内容类型/编码) .

    除此之外, POST 意味着请求会改变某些内容,并且不应该在您按下"back"按钮时看到您的浏览器询问您是否要重新提交表单数据的原因 .

    另一方面, GET 应该是幂等的 - 这意味着你可以做一百万次,服务器每次都会做同样的事情(并且显示基本相同的结果) .

  • 6

    虽然不是对差异的描述,但在选择正确的方法时,需要考虑以下几点 .

    • GET请求可以被浏览器缓存,这在使用ajax时可能是一个问题(或好处) .

    • GET请求向用户公开参数(POST也是如此,但它们不太明显) .

    • POST可以将更多信息传递给服务器,几乎可以是任何长度 .

  • 11

    学习底层HTTP协议

    这类似于驾驶汽车 . 你自己开车去路上,但你不知道你必须遵守的任何标志,灯光或其他规则 . 显然,即使你知道如何,你也无法开车管理一辆车 . 至少不安全 . 不是为了你自己,也不是为了别人 .

    您应该了解一下HTTP协议 . GET / POST与PHP / AJAX / jQuery或类似内容无关(至少不直接) . 他们使用它们是因为他们使用HTTP协议进行通信 . 除了 GETPOST 之外,HTTP协议还有很多其他功能 .

    看看其中的一些,然后自己搜索:

  • 15

    POST和GET是两个HTTP request methods . GET通常用于检索某些数据,并且预期是幂等的(重复查询没有任何副作用),并且只能向服务器发送有限数量的参数数据 . 如果您不小心,某些浏览器通常会缓存GET请求 .

    POST用于更改服务器状态 . 它携带更多数据,并且允许(并且经常预期)重复查询具有副作用,例如创建两个消息而不是一个消息 .

  • 1

    如果您正在使用RESTfully,则GET应该用于您只获取数据的请求,而POST应该用于您正在进行某些操作的请求 .

    一些例子:

    • 获取显示特定SO问题的页面

    • 发表评论

    • 单击“添加到购物车”按钮发送POST请求 .

  • 77

    使用POST,您还可以执行多部分mime编码,这意味着您也可以附加文件 . 此外,如果您在页面导航中使用帖子变量,则用户将收到警告,询问他们是否要重新提交post参数 . 通常它们在HTTP请求中看起来相同,但如果您需要向服务器“POST”某些东西,并且如果您需要从服务器获取某些东西,那么您应该坚持使用POST,就像它们的预期方式一样 .

  • 21

    POST和GET(当与AJAX一起使用时)之间唯一的“大”区别是因为GET是提供的URL,所以它们的长度有限(因为URL的长度不是无限的) .

相关问题