【问题标题】:access-control-allow-origin happening randomly访问控制允许来源随机发生
【发布时间】:2013-06-27 23:01:53
【问题描述】:

我有一个本地服务器:127.0.0.1:8000 和一个网站:127.0.0.1:9000,两者都使用 play2 框架运行。

我在服务器上发出多个 jquery ajax 请求以获取 json 数据并使用这些数据加载图形。

问题在于,我以完全随机的方式收到访问控制允许来源错误。我阅读了很多关于 access-control-allow-origin 的内容,并以这种方式修改了服务器的标头响应:

Response.ok(Engine.executeQuery(identifier, queryParameters))
                .header("Access-Control-Allow-Origin", "*")
                .header("Access-Control-Allow-Methods","GET, POST, OPTIONS")
                .header("Access-Control-Allow-Credentials","true")
                .header("Access-Control-Allow-Headers","Content-Type, *")
                .build();

我的 ajax 调用是这样进行的:

$.ajax({
        url: obj.url,
        dataType: 'json',
        crossDomain:true,
        success: function (data){
            // load graph
        }

我有 10 个 ajax 调用,都以完全相同的方式在同一个目标 url 进行。

问题是,当我加载页面(并执行 ajax 调用)时,有些 ajax 调用有效,有些则无效。如果我刷新页面,则可以使用不同数量的调用。这对我来说真的很随意。

我还注意到,如果我为 ajax 调用指定 async:false,则永远不会触发错误。当然,我需要异步调用(这太容易了)。

我看到很多关于这个错误的帖子,我以为我对它了如指掌。

欢迎任何帮助。提前致谢。

【问题讨论】:

  • 打开开发者控制台,在网络选项卡中检查所有 ajax url 的标头是否包含 cors 标头。如果没有,那么你的问题是在服务器而不是在客户端。
  • 我刚刚检查过,我猜 Accept: */* 表示没问题吧?所以我在服务器端遇到了麻烦?
  • 你应该有“Access-Control-Allow-Origin”这个标头,“Accept”标头用于不同的目的。请检查您的服务器端是否未为所有请求设置 Allow origin 标头,因此您收到错误
  • 我的响应头没问题,所有的 access-control-allow-* 都设置好了,我可以看到那些工作的请求。请求标头中没有任何访问控制允许。应该吗?
  • 请求头对于 cors 不需要任何东西

标签: javascript json playframework-2.0 cross-domain


【解决方案1】:

问题解决了。我重构了服务器,它工作得很好。 好像是线程问题,不够安全。

感谢您的帮助。

【讨论】:

  • 遇到同样的问题,能否请您详细说明解决方案。
  • 对不起,我不能,那是 9 年前的事了 :p 我想这是一个糟糕的设计。尝试回到最简单的实现并按自己的方式工作,直到它开始失败
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2017-12-15
  • 2016-08-18
  • 2022-01-09
  • 2013-07-04
相关资源
最近更新 更多