【问题标题】:Wampserver XMLHttpRequest cannot load No 'Access-Control-Allow-Origin' header is present on the requested resourceWampserver XMLHttpRequest 无法加载请求的资源上不存在“Access-Control-Allow-Origin”标头
【发布时间】:2015-03-29 06:10:39
【问题描述】:

首先,很抱歉问了一个以前被问过很多次的问题,但我没有找到一个我理解或适合我的合适答案。

我正在尝试访问我的 WAMP 盒子上的另一个服务,但我不断收到错误消息:

XMLHttpRequest 无法加载 http://192.168.0.2:8080/json.htm?type=command&param=switchlight&idx=9&switchcmd=Off&level=0。 请求中不存在“Access-Control-Allow-Origin”标头 资源。 Origin 'http://192.168.0.2' 因此不允许访问。

我在 Windows 8.1 机器上运行 WAMP 2.5。我尝试了各种解决方案,但作为一个卧室爱好者,我遇到了麻烦。

我已将 mod_headers 添加到 Apache 选项中,并且我的 httpd.conf 包含:

<IfModule mod_headers.c>
   Header add Access-Control-Allow-Origin "*"
   Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
</IfModule>

尝试添加 .htaccess 文件:

Header set Access-Control-Allow-Origin "*"

尝试使用 JSONP,但我尝试访问的服务不支持它并返回语法错误:

我已经更改了很多代码,但我目前使用的代码如下:

<script>
    var testSwitchValue = 0;
    function testSwitch() {
        if (testSwitchValue > 0) {
            var switchCommand = "Off";
            testSwitchValue = 0;
        } else { 
            var switchCommand = "On";
            testSwitchValue = 1;
        }
        $.ajax({
            url: 'http://192.168.0.2:8080/json.htm?type=command&param=switchlight&idx=9&switchcmd=' + switchCommand + '&level=0',
            type: 'GET',
            success: function(data) {
                console.log(data)
                },
            error: function(xhr, status, error) {
                console.log(status);
            }
        });
    }
</script>

编辑

奇怪的是它刚刚开始在 IE 11.0 中工作,但仍然不能在 Chrome 中工作,并且仅适用于本地地址 192.168.0.2。

【问题讨论】:

  • 您确定您的.htaccess 文件正在加载吗?
  • 我猜它正在被加载...它与我所有其他文件一起位于我的 WWW 文件夹的根目录中。
  • 你的 .htm 文件是什么类型的文件?如您所见,您将参数传递给它。也许它是一个伪造的php?
  • 这是一个非常基本的 index.html 文件。
  • 也许你的 apache 没有启用 header mod。

标签: jquery ajax apache http wampserver


【解决方案1】:

好的,经过更多的 Google 搜索后,我现在可以回答我自己的问题了。

我需要做的是在 Apache 中设置一个代理并将我的本地 192 地址传递给它。

显然是一个没有真正编码经验的业余爱好者,我不知道这是否是一个坏主意(希望有人可以告诉我),但它确实有效,而且它真的只是为了我自己的娱乐/使用。

所以在 Apache 中我启用了:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

在我的 httpd.conf 中我添加了:

ProxyRequests Off
ProxyPreserveHost On

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

ProxyPass /homeAutomation http://192.168.0.2:8080
ProxyPassReverse /homeAutomation http://192.168.0.2:8080
<Location /EMBackend>
    Order allow,deny
    Allow from all
</Location>

我的 jQuery 现在看起来像:

<script>
    var testSwitchValue = 0;

    function testSwitch() {

        if (testSwitchValue > 0) {
            var switchCommand = "Off";
            testSwitchValue = 0;
        } else { 
            var switchCommand = "On";
            testSwitchValue = 1;
        }

        $.ajax({
            url: '/homeAutomation/json.htm?type=command&param=switchlight&idx=9&switchcmd='+switchCommand+'&level=0',
            type: 'GET',
            success: function(data) {
                console.log(data + ' ' + URL)
                },
            error: function(xhr, status, error) {
                console.log(status);
            }
        });
    }
</script>

【讨论】:

    【解决方案2】:

    好的,现在我知道你在做什么了

    我有一种感觉

    Header add Access-Control-Allow-Origin "*"
    

    不适用于非标准端口,即假定端口为 80,而您使用的是http://192.168.0.2:8080

    我认为您可以通过添加这样的另一行来证明这一点

    <IfModule mod_headers.c>
       Header add Access-Control-Allow-Origin "*"
       Header add Access-Control-Allow-Origin "http://192.168.0.2:8080"
       Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
    </IfModule>
    

    如果它突然开始工作,那就是你的问题。

    【讨论】:

    • 没有太多时间尝试您列出的所有内容,但我尝试将 url 参数更改为您建议的内容,但它返回错误:192.168.0.2/… 404 (Not Found).... 因为它不包括端口?我要连接的服务是我的家庭自动化工具包,它是在端口 8080 上运行的,我猜这给我带来了问题,因为它是端口跨域。
    • Apache 正在监听 80 端口...这是我的另一个服务正在监听 8080 端口。
    • 哦,那将是放入原始问题的有用信息。如果您想要一个好的答案,您需要提供所有相关信息。
    • 好的,我根据上述评论中的新信息重写了我的答案。我有一种感觉,Access-Control-Allow-Origin "*" 不允许非标准端口,但我被我的假设所跟踪。
    • 是的,你的权利我应该把它包括在问题中......对不起。我在 .htaccess 文件中添加了另一行,但它不起作用。然后我将它添加到我的 httpd.conf 文件中,它仍然无法正常工作。感谢您查看此内容。
    猜你喜欢
    • 2015-10-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 2017-08-30
    • 2014-09-22
    • 2013-12-02
    • 2018-02-28
    • 2014-03-04
    相关资源
    最近更新 更多