【问题标题】:Different server request behaviour within web workersWeb Worker 中不同的服务器请求行为
【发布时间】:2012-08-28 19:59:22
【问题描述】:

在我们的 Web 应用程序中,我们使用以下服务器通信方法

  • XMLHttpRequest

我们在两种情况下都发送相同的内容/数据,但 XMLHttpRequest 在网络工作中运行。

使用的浏览器是带有--disable-web-security标志的chrome。

Web Worker XMLHttpRequest 会在 worker 内部失败但在外部不会失败,有什么原因吗?

如果将 XMLHttpRequest 的完全相同的代码从 worker 转移到普通的 JavaScript,它会完美运行吗?

错误:

XMLHttpRequest 无法加载 URL。 Access-Control-Allow-Origin 不允许使用原始文件://。

【问题讨论】:

  • 您能告诉我们您收到的实际错误消息吗?代码也会很好。
  • 您是否尝试访问跨域数据?
  • 您在 WebWorker 内部和外部使用相同的代码吗?你在哪里使用 jQuery 包装器,这有什么改变吗?
  • worker 内部和外部的代码相同,但在 worker 内部它会导致跨域错误,而在外部它工作正常,可能是因为脚本是一个新的 javascript 线程,它不会在“禁用”下运行-web-security”标志?
  • 错误说明了一切:Access-Control-Allow-Origin 不允许原始文件://。您不能从 file:// 位置体面地 XHR。通过服务器打开页面(本地主机很好,但必须由网络服务器提供服务)。

标签: javascript jquery ajax xmlhttprequest web-worker


【解决方案1】:

更新:

经过团队大多数人的大量努力,我们发现在 Chrome 中,Web Worker 的运行安全性似乎与主浏览器不同。 (我的意思是当浏览器使用 --disable-web-security 运行时,网络工作者不会)。

我们试图从 (file:///) 访问域资源 (http://domain.com/resource)。尽管浏览器在禁用网络安全的情况下运行,但解决方案是让服务器以“Access-Control-Allow-Origin: *”的标头响应。

虽然我们可以使用 file:/// 而不是通配符,但我们无法确定这会如何在生产中的设备之间发生变化,而且由于我们在封闭的网络中运行,所以这不是一个问题。

一天结束时的代码完全保持不变,只需要更改服务器响应的标头。

【讨论】:

【解决方案2】:

有两个可能的问题可能导致此问题。哪个是罪魁祸首取决于您的设置。

1.您正在尝试从网络应用访问文件

听起来这可能是您所指的问题。 Chrome 有一个非常严格的访问控制政策,规定您不能远程访问本地文件。可悲的是没有办法解决。

2。您正在尝试从另一个文件访问一个文件,但尚未启用它

有关本地文件的访问控制规定的唯一例外是当您从另一个本地文件发出请求时。这仍然默认禁用,需要在启动 chrome 时通过传递 --allow-file-access-from-files 标志来启用。

【讨论】:

  • 难道 --disable-web-security 标志也不是 --allow-file-access-from-files 吗?
  • 不确定。那么您是从另一个文件访问它吗?
  • 好吧,是/否取决于你的意思,这个过程就像这样创建 webworker >> 调用函数 >> 函数向服务器发出 xml 请求(这是它失败的地方) >> 网络工作终止但如果我在没有工人的情况下做同样的事情,它工作正常,它绝对不是服务器端那是经过测试的问题.. 对不起任何 cunfusion
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2012-09-21
  • 1970-01-01
  • 2023-04-01
  • 2013-04-03
相关资源
最近更新 更多