No' Access-Control-Allow-Origin'标题 - 尝试了所有可能的解决方案

时间:2018-01-15 16:23:07

标签: javascript php ajax apache xmlhttprequest

我知道这个问题之前已经被问了很多,但我确实试了一切,但我仍然遇到了这个错误。

我试图通过index.php文件中的ajax获取json数据。 我在ubuntu服务器上通过apache2运行我的网站。我不知道从哪里开始。

确切错误:

Failed to load http://localhost:32348/getinfo: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.

我尝试了什么: - 将其添加到/etc/apache2/apache2.conf文件

 <ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>

- 在每个<Directory>标记之间添加它到/etc/apache2/apache2.conf文件:

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

- 将其添加到我的index.php文件中:

<?php 
    header('Access-Control-Allow-Origin: *');
 ?>

- 改变&#39; json&#39;到&#39; jsonp&#39;,将crossDomain设置为true并添加标题以允许原点

function fetchLiveStats() {
        $.ajax({
            url: api + '/getinfo',
            dataType: 'jsonp',
            type: 'GET',
        crossDomain: true,
        headers: {'Access-Control-Allow-Origin': '*'},
            success: function(response) {
                console.log(response);
            },
            cache: 'false'
        }).done(function(data){
            pulseLiveUpdate();
            lastStats = data;
            currentPage.update();
        }).always(function () {
            setTimeout(function() {
                fetchLiveStats();
            }, refreshDelay);
        });
    }

2 个答案:

答案 0 :(得分:-1)

您需要将Access-Control-Allow-Origin标头添加到http://localhost:32348/getinfo的响应中。

  

我尝试了什么: - 将其添加到/etc/apache2/apache2.conf文件

你所说的关于你的问题的其他内容暗示Apache正在端口80上托管网站,而不是端口32348上的网站。你正在改变错误的服务器。

网站无权访问其他网站将向浏览器所有者提供的数据。

  

改变&#39; json&#39;到&#39; jsonp&#39;

不要使用JSONP。这是一个肮脏的黑客。 (它还要求http://localhost:32348/getinfo返回JSONP,这几乎肯定不会。(

  

将crossDomain设置为true

这只是告诉jQuery不添加它添加到Same Origin请求的头文件,以防HTTP重定向到另一个源。这可以防止它成为需要预检的复杂请求。由于您首先没有请求相同的原始网址,因此无效。

  

添加标题以允许来源

您无法在请求中添加响应标头!

尝试将其转变为需要预检的复杂请求,并使您遇到更多问题。

您需要编辑负责提供http://localhost:32348/getinfo

的任何代码

答案 1 :(得分:-2)

在尝试新的更新时,不要忘记清空缓存(ipconfig / flushdns)和浏览器缓存,否则,可能不会考虑修改...