首页 文章

请求的资源错误上没有'Access-Control-Allow-Origin'标头

提问于
浏览
78

我'm trying to fetch the feed of a news website. Thought I' d使用google的feed API将feedburner Feed转换为json . 以下网址将以json格式从Feed返回10个帖子 . http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://feeds.feedburner.com/mathrubhumi

我使用以下代码来获取上面的url的内容

$.ajax({
            type:"GET",
            dataType:"jsonp",
            url:"http://ajax.googleapis.com/ajax/services/feed/load",
            data:{"v":"1.0", "num":"10", "q":"http://feeds.feedburner.com/mathrubhumi"},

            success: function(result){
                //.....
            }
        });

但它没有工作,我收到以下错误

的XMLHttpRequest无法加载http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http%3A%2F%2Ffeeds.feedburner.com%2Fmathrubhumi . 请求的资源上不存在“Access-Control-Allow-Origin”标头 . 因此不允许Origin'http:// localhost'访问 .

我该如何解决?

7 回答

  • 76

    仅供参考,我注意到jQuery文档中的这些信息,我认为这些信息适用于此问题:

    由于浏览器安全限制,大多数“Ajax”请求都遵循相同的原始策略;请求无法从其他域,子域,端口或协议成功检索数据 .

    像@thanix这样更改主机文件对我来说不起作用,但@dkruchok提到的扩展确实解决了这个问题 .

  • -4

    如果您使用的是Chrome,也可以安装此扩展程序 .

    Access-Control-Allow-Origin: *
    
  • -1

    我相信这可能是Chrome不支持 localhost 来通过 Access-Control-Allow-Origin - see Chrome issue

    要让Chrome在标头中发送 Access-Control-Allow-Origin ,只需将/ etc / hosts文件中的localhost别名替换为其他域,例如:

    127.0.0.1   localhost yourdomain.com
    

    然后,如果您使用 yourdomain.com 而不是 localhost 访问脚本,则调用应该成功 .

  • 7

    如果您使用谷歌浏览器浏览器,您可以使用扩展程序进行攻击 .

    您可以找到一个Chrome extension,它将在您的应用程序中动态修改CORS标头 . 显然,这只是Chrome,但我喜欢它可以在任何地方进行零更改 .

    您可以使用它在本地计算机上调试您的应用程序(如果一切都在 生产环境 中) .

    Notice :如果URL损坏,则扩展名为 **Access-Control-Allow-Origin: *** . 我建议您在不处理任何内容时禁用此扩展名,因为例如,youtube不适用于此扩展程序 .

  • 0

    试试这个 - 通过设置 Headers 来设置Ajax调用,如下所示:

    var uri = "http://localhost:50869/odata/mydatafeeds"
    $.ajax({
        url: uri,
        beforeSend: function (request) {
            request.setRequestHeader("Authorization", "Negotiate");
        },
        async: true,
        success: function (data) {
            alert(JSON.stringify(data));
        },
        error: function (xhr, textStatus, errorMessage) {
            alert(errorMessage);
        }                
    });
    

    然后使用以下命令行打开Chrome来运行代码:

    chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
    
  • 96

    Chrome没有't allow you to integrate two different localhost,that'为什么我们收到此错误 . 您只需要从nuget manager包含Microsoft Visual Studio Web Api Core包 . 并在 WebApiConfig.cs 文件中的WebApi项目中添加两行代码 .

    var cors = new EnableCorsAttribute("*", "*", "*");
    config.EnableCors(cors);
    

    然后全部完成 .

  • 1

    请在Spring启动控制器的 backendside 上使用 @CrossOrigin (类级别或方法级别),因为Chrome错误 'No 'Access-Control-Allow-Origin' 标头的解决方案出现在请求的资源上 . “

    这个解决方案100%为我工作......

    示例:类级别

    @CrossOrigin
    @Controller
    public class UploadController {
    
        • 要么 - - - -

    示例:方法级别

    @CrossOrigin(origins = "http://localhost:3000", maxAge = 3600)
    @RequestMapping(value = "/loadAllCars")
        @ResponseBody
        public List<Car> loadAllCars() {
    
    
    Ref: https://spring.io/blog/2015/06/08/cors-support-in-spring-framework
    

相关问题