既然大多数现代浏览器都支持AJAX和客户端请求,而无需执行POST,那么POST(表单发布)的作用是什么?
在某些情况下或一般规则下,始终将POST优先于XmlHttpRequest吗?
POST所做的只是将可变键值对放在服务器头内部。我能想到的POST的优点是大量的数据和移动浏览器。还有很多我想念的吗?
注意,我知道您可以通过AJAX调用执行POST,我主要是在谈论<form>标签
<form>
这个问题有点棘手,因为它包含了两个概念。第一个是POSTING,第二个是Ajax。与GETting相比,POST是一种具有不同实现和语义的HTTP方法。Ajax或XmlHttpRequest在正常的请求/导航中具有其对应对象。您可以将POST或GET用于XmlHttpRequest以及常规导航和表单提交(嗯,POST始终是“表单提交”)。XmlHttpRequest和普通请求之间的区别在于,普通请求将页面替换为新页面。
您可以只使用Ajax编写几乎任何网站,以获取数据并更改DOM。这主要是Gmail的工作方式。传统意义上没有“表单提交”。但是仍然存在GET和POST,因为服务器和浏览器对结果的解释不同。GET应该是幂等的;POST用于更改服务器状态的操作。例如,一个ecom交易应为POST。使用Ajax时,这不会改变,因为您希望代理服务器也了解这是POST,并且它们不应该尝试缓存响应。
使用GET vs POST也有优点和缺点。您无法为POST结果添加书签,因为参数是隐藏的。由于IE仅支持约2000个字符,因此无法获取带有无限长度参数值的内容。
与常规提交相比,使用Ajax也有缺点;您无法将结果页面添加为书签(因为页面尚未更改);后退按钮将无法正常工作。但是使用Ajax,您可以最大程度地减少传输的数据,还可以方便地更新页面(例如监视长时间进程的状态),而不会引起闪烁或刷新。
总而言之,Ajax和传统表单提交这两种请求类型都可以与GET和POST一起使用,并且每种都有优点和缺点。两种类型都无法做其他任何事情,因此您可以预见在可预见的将来会混合使用。