我的几个应用的ajax在过去的使用得到请求,但是现在我开始使用后的请求,而不是。员额的请求似乎是稍微更加安全和更url好漂亮。因此,我想知道如果有任何理由为什么我应该使用得到的请求的。

有帮助吗?

解决方案

我通常会这样设置问题:请求后有什么重要的变化吗?(尽管有记录等)。如果是,则应该是POST请求,如果不是,则应该是GET请求。

我很高兴您拨打POST请求<!>“稍微<!>”;更安全,因为它几乎就是它们;伪造用户对页面的POST请求是微不足道的。但是,将其作为POST请求会阻止Web加速器或重新加载意外地重新触发操作。

作为AJAX,还有一个考虑因素:如果您要返回带有回调支持的JSON,请务必小心不要放置任何您不希望其他网站能够在其中看到的敏感数据。维基百科在这些行中存在一个漏洞,其中用户反CSRF令牌通过其JSON API发布。

其他提示

你应该使用那里得到你正在做的一请求没有副作用,例如只是获取一些信息。这一请求可以:

  • 重复,没有任何问题-如果浏览器检测到一个错误,它可以静静地试
  • 其结果缓存的浏览器
  • 被缓存,由一个代理

这些事情都是很好的。什么这只是检索数据(特别是公共数据)应该是一个真正得到的。服务器应该发出明智的最后修改:和过期:标题允许缓存,如果需要的话。

然而,在回答问题时,所有优点都是,GET请求在某些场景中比POST请求更有用:

  1. 可以将它们加入书签
  2. 可以缓存
  3. 他们更快
  4. 他们有已知的后果(假设他们不改变数据),所以多次访问他们 时间不是问题。
  5. 为了子孙后代,请在博客注释中更新此评论:在这里点#3,所有归功于Omar AL Zabir(引用的作者博客文章):

      

    <!>“Atlas默认为所有AJAX调用发出HTTP POST。 Http POST是   比Http GET贵。它通过线路传输更多字节,   因此占用宝贵的网络时间,这也使ASP.NET做得更多   在服务器端处理。所以,你应该使用Http Get   可能。但是,Http Get不允许您传递对象   参数。您只能传递数字,字符串和日期。当你做   一个Http Get调用,Atlas构建一个编码的URL并对其进行点击   网址。所以,你不能传递过多的内容,这会使网址成为现实   大于2048个字符。据我所知,<!>#8217; s是什么是最大值   任何网址的长度。

         

    http post的另一个坏处是,它实际上是2个电话。第一   浏览器使用<!>#8220; HTTP 100发送http post标头和服务器回复   继续<!>#8221 ;.当浏览器收到此消息时,它会发送实际正文。<!>

这可以帮助您确定使用GET的位置以及POST的使用位置:

URI,可寻址性以及HTTP GET和POST的使用

还有一个人没有提到的其他差异。

GET请求在URL字符串中传递,因此通常取决于浏览器的长度限制。

POST请求可能要大得多 - 实际上并没有限制。因此,如果您需要从Web服务器请求数据并且您传递了大量参数信息,那么POST请求可能是唯一的选择。

因此,如前所述,GET请求实际上是用于请求数据(没有副作用),而POST请求通常用于将数据传输回服务器以进行存储(具有副作用)。例如使用POST上传文件。 GET来检索文件。

曾经有一段时间我觉得IE的GET URL字符串很短。 Lotus Notes等一些应用程序使用大量随机字符来表示文档ID。我不喜欢使用另一个生成随机字符串的产品,因此页面URL每次都是唯一的。随机字符串是巨大的...它并不总是与内存中的IE6一起使用。

POST请求与GET一样不安全。主要区别在于POST用于修改服务器应用程序的状态,而GET仅从中请求数据。

当您使用clean,<!>; restful <!>时,差别很重要URL本身指定资源的URL,不同的方法在服务器端触发不同的操作。

也许最重要的是,GET在网址历史记录中是可识别标记/可查看的,并且可以与Google进行搜索。

POST非常重要,因为您希望该事件可以加入书签或能够作为网址输入 - 否则您(或Google抓取您的网址)可能会意外地执行此类操作例如,从系统中删除用户。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top