为什么$ .post()受同源策略的约束,但提交一个form ='POST'的表单好吗?

sic*_*cks 16 forms jquery post same-origin-policy

我正在开发一个基于网络的工具,它简化了我们在办公室所做的工作.我们的合作伙伴提供给我们的工具有一个我们整个楼层使用的通用登录,但它每30分钟就超时一次,这对于必须整天登录都很烦人.

我过去所做的是在我的工具中创建一个隐藏的iframe,通过在页面加载时提交隐藏的表单并在每30分钟继续提交表单来防止超时.然后,他们可以直接从我的工具(通过另一个可见的表单)向合作伙伴工具提交搜索.

我想使用jQuery $.post()来摆脱隐藏的iframe,并使其成为唯一一次提交登录信息的时候就是在进行搜索时.这样,它不会在不使用时不断发送请求,但您仍然可以运行搜索而无需担心登录超时.

似乎ajax相同的起源策略阻止了这一点,所以目前我只是打开一个新的命名窗口,然后一个接一个地在目标窗口中提交两个隐藏的表单.

这样做的问题是,如果登录请求尚未完成,则搜索请求不会通过,并且它们会再次被带到登录页面.如果他们关闭窗口并再次搜索它会起作用,但这也很烦人,只是没有原始情况那么多.

除了你实际上必须看到页面打开(除非它在一个隐藏的iframe中)之外,提交参数$.post()和使用POST方法提交表单之间的区别是什么?它们在萤火虫中看起来相同.有没有什么办法可以在表单提交上设置回调,所以它等待第一个请求在开始第二个之前完成?

tko*_*one 27

$ .post使用xmlhttprequest发送数据.Xhr受同源政策的限制.发送直接HTTP POST请求不是.


Thi*_*ter 19

在对另一个域执行POST请求时,您将无法使用JavaScript访问响应(即使您将表单提交给iframe).

但是,当使用XHR时,您可以完全访问响应,因此您可以执行许多不良操作 - 例如,访问用户登录的页面,窥探他的公司内部网等.

因此,XHR限制不是为了避免CSRF,而是为了避免泄露特权信息.