相关疑难解决方法(0)

Access-Control-Allow-Origin不允许使用Origin <origin>

XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin. 
Run Code Online (Sandbox Code Playgroud)

我阅读了有关跨域ajax请求的信息,并了解了基础安全问题.就我而言,2台服务器在本地运行,并且喜欢在测试期间启用跨域请求.

localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server
Run Code Online (Sandbox Code Playgroud)

我正在localhost:8080 - GAE server从节点服务器加载我的页面时发出一个ajax请求.什么是最简单,最安全的(不想用disable-web-security选项启动chrome ).如果我必须改变'Content-Type',我应该在节点服务器上做吗?怎么样?

javascript ajax google-chrome node.js cors

151
推荐指数
7
解决办法
34万
查看次数

htaccess Access-Control-Allow-Origin

我正在创建一个在其他网站上外部加载的脚本.它加载CSS和HTML,并在我自己的服务器上正常工作.

但是,当我在另一个网站上尝试它时,它会显示这个可怕的错误:

Access-Control-Allow-Origin
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到它完美加载:http://tzook.info/bot/

但在其他网站上显示错误:http: //cantloseweight.co/robot/

我将加载脚本上传到jsfiddle:http: //jsfiddle.net/TL5LK/

我尝试像这样编辑htaccess文件:

<IfModule mod_headers.c>    
    Header set Access-Control-Allow-Origin *
</IfModule>
Run Code Online (Sandbox Code Playgroud)

或者像这样:

Header set Access-Control-Allow-Origin *
Run Code Online (Sandbox Code Playgroud)

但它仍然无效.

.htaccess cross-domain cors

117
推荐指数
7
解决办法
28万
查看次数

Apache:"Header always set"和"Header set"之间的区别?

问题

  1. Header always setHeader setApache有什么区别?
  2. 也就是说,always关键字在设置标题的情况下会发生什么变化?
  3. 我应该总是使用标题设置always吗?
  4. 有什么理由不去吗?

背景

我见过...

Header always set X-Frame-Options DENY
Run Code Online (Sandbox Code Playgroud)

...以及...

Header always set Access-Control-Allow-Headers "*"
Run Code Online (Sandbox Code Playgroud)

...我有时会听到always关键字的存在确保标题设置正确,或者always通常包含关键字更好.但是,我从来没有找到一个明确的,明确的答案,为什么会这样.

我已经检查了Apache文档mod_headers,只是简单地提到always:

当您的操作是现有标头的函数时,您可能需要指定始终的条件,具体取决于设置原始标头的内部表.始终对应的表用于本地生成的错误响应以及成功响应.另请注意,在某些情况下重复使用这两个条件的指令是有意义的,因为对于现有标头,始终不是onsuccess的超集:

  • 您正在为本地生成的非成功(非2xx)响应添加标头,例如重定向,在这种情况下,在最终响应中仅使用始终对应的表.
  • 您正在修改或删除由CGI脚本生成的标头,在这种情况下,CGI脚本在对应于始终而不是默认表的表中.
  • 您正在修改或删除某些服务器生成的标头,但默认的onsuccess条件未找到该标头.

据我所知,这意味着Header set always确保即使在非200页面上也设置了标题.但是,我设置的HTTP标头Header set似乎总是适用于我的404页面等.我在这里误解了什么吗?

FWIW,我发现了SO帖子,比如Apache的Header配置中"always"和"onsuccess"之间有什么区别?,但唯一的答案并没有真正为我解释清楚.

非常感谢,
Caleb

apache .htaccess http-headers

27
推荐指数
1
解决办法
1万
查看次数

jQuery跨域POST shenanigans

我正在尝试对API进行身份验证,该API仅允许您使用带有JSON的POST作为表单数据进行身份验证,格式为{"username":"myusername","password":"mypassword"}.

我已经尝试了两天来使用jQuery,但是我遇到了问题,因为它是跨域的.我怎么能做到这一点?

错误信息:

Request Method:OPTIONS
Status Code:405 METHOD NOT ALLOWED
Run Code Online (Sandbox Code Playgroud)

代码到现在为止:

var username = "myusername";
var password = "mypass"
var authurl = "https://myurl";

$.ajax
({
    type: "POST",
    url: authurl,
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    async: false,
    data: {'json':'{"username":"' + username + '", "password":"' + password + '"}'},
    success: function (result) {
        $('#json').html(result);
    }
})
Run Code Online (Sandbox Code Playgroud)

总结一下:

  • API仅接受授权的POST
  • API需要json作为表单数据,例如:{"username":"myusername","password":"mypassword"}
  • js从不同的域运行,导致跨域错误

非常感谢您的帮助 :)

javascript jquery post json cross-domain

16
推荐指数
1
解决办法
2万
查看次数

处理Apache中的CORS预检请求

我使用Yeoman部署了一个AngularJS应用程序.Cakephp RESTful后端.

Angular应用程序发送OPTIONS预检请求,后端响应禁止(403),在nginx中解决了我使用过的这个问题:

if ($request_method = 'OPTIONS') {
     add_header 'Access-Control-Allow-Origin' '*'; 
     add_header 'Access-Control-Allow-Credentials' 'true';
     add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; 
     add_header 'Access-Control-Allow-Headers' 'X-AuthTokenHeader,Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since';   
     add_header 'Access-Control-Max-Age' 1728000;
     add_header 'Content-Type' 'text/plain charset=UTF-8';
     add_header 'Content-Length' 0;
     return 204; 
}
Run Code Online (Sandbox Code Playgroud)

我如何在Apache中执行此操作?请提供一些初步指导/意见,我会在此之后弄清楚细节并用细化的细节改进问题.

apache http-headers

6
推荐指数
2
解决办法
1万
查看次数

CORS无法在Chrome/Firefox和Apache上运行

我正在尝试使用CORS在我的浏览器和Apache服务器(驻留在不同的域中)之间运行AJAX请求.

在服务器端,我在服务器的httpd.conf部分中进行了以下更改,根据" Header set Access-Control-Allow-Origin in .htaccess中的响应不起作用 ":

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Run Code Online (Sandbox Code Playgroud)

我的AJAX调用形式如下:

        $.ajax({
            url        :'https://x.x.x.x/validateCustomerID',
            type       : 'POST',
            cache    : false,
            crossDomain: true,
            contentType: 'application/json',
            beforeSend: function(xhr){
                    xhr.setRequestHeader("Access-Control-Allow-Methods","POST");
                    xhr.setRequestHeader("Access-Control-Allow-Headers","X-Requested-With");
                    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            },
            data       : {loginId : '12345'},
            success    : function(response){console.log("Success"+JSON.stringify(response))},
            error      : function(response){console.log("Error"+JSON.stringify(response))}
        });
    }
Run Code Online (Sandbox Code Playgroud)

我也试过注释掉beforeSend()以避免预检请求,但它也没有成功.

我在Chrome和Firefox上收到的错误消息是:

  • 在Chrome中:

"XMLHttpRequest无法加载https:// xxxx/validateCustomerID.请求的资源上不存在'Access-Control-Allow-Origin'标头.因此不允许原点'null'访问.响应的HTTP状态代码为403."

  • 在Firefox中:

"阻止跨源请求:同源策略禁止在https:// xxxx/validateCustomerID读取远程资源.(原因:CORS请求失败)."

我的浏览器中没有从服务器收到响应标头,我认为这是CORS必须工作的,并且服务器中的日志显示没有请求从我的浏览器到达它.

我真的很感激,如果有人在这里可以帮助我解决这个问题,因为我已经在这里呆了几天,并且已经使用了几乎所有的命中和试用方法来使这个工作成功.

javascript apache ajax google-chrome cors

5
推荐指数
1
解决办法
3304
查看次数

读取音频时如何绕过音频文件的 CORS 限制?

我正在尝试在 codepen.io ( http://codepen.io/www139/pen/oLrJAZ?editors=0010 )上创建音频可视化程序。我已经建立了自己的网络服务器,用于上传项目的音频。您可以在没有 CORS 问题的情况下收听音频 ( http://williamgreen.hopto.org/audioVisualization/song.mp3 )。但是,音频可视化程序需要访问读取声音频率。当我尝试读取音频时,出现以下错误:

由于http://williamgreen.hopto.org/audioVisualization/song.mp3 的CORS 访问限制,MediaElementAudioSource 输出零

频率返回为 0。

当我添加这一行时:

audio.crossOrigin = 'anonymous';
Run Code Online (Sandbox Code Playgroud)

我不再收到错误,但音频没有加载。

我还尝试根据/sf/answers/818424351/在 .htaccess 中使用此标头设置 CORS 访问。这个问题似乎也很有趣,但缺少我需要的信息(由于 CORS 访问限制本地 mp3 文件,MediaElementAudioSource 输出零)。我也参考了这个(http://enable-cors.org/server_apache.html)。

有什么建议?是否有任何需要设置的 apache/PHP 标头?我怎样才能让它工作?

不久前我问过这个问题(如何使用 apache2 为 Linux 网络服务器上的音频文件设置 CORS 访问权限?)问了这个问题。除了高中之外,我的大脑已经在这个难题上工作了几个月;)

编辑:我问了这个问题,它揭示了更多信息。该问题很可能与用于访问另一个域上的文件的 CORS 标头CORS 标头有关

javascript apache audio

4
推荐指数
1
解决办法
2151
查看次数