Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问控制不允许原点允许原点_Javascript_Ajax_Cors_Xmlhttprequest_Cross Domain - Fatal编程技术网

Javascript 访问控制不允许原点允许原点

Javascript 访问控制不允许原点允许原点,javascript,ajax,cors,xmlhttprequest,cross-domain,Javascript,Ajax,Cors,Xmlhttprequest,Cross Domain,我正在一个2应用程序中向远程PHP服务器发出一个Ajax.request(包装在中) 服务器的响应如下所示: 无法加载XMLHttpRequest。来源http://localhost:8888是访问控制允许原点不允许的 如何解决此问题?这是因为。更多关于或 基本上,在您的示例中,您需要加载http://nqatalog.negroesquisso.pt/login.php页面仅来自nqatalog.negroesquisso.pt,而不是localhost我不久前写了一篇关于这个问题的文章 如

我正在一个2应用程序中向远程PHP服务器发出一个
Ajax.request
(包装在中)

服务器的响应如下所示:

无法加载XMLHttpRequest。来源<代码>http://localhost:8888是访问控制允许原点不允许的

如何解决此问题?

这是因为。更多关于或


基本上,在您的示例中,您需要加载
http://nqatalog.negroesquisso.pt/login.php
页面仅来自
nqatalog.negroesquisso.pt
,而不是
localhost

我不久前写了一篇关于这个问题的文章

如果您控制了响应服务器,则处理此问题的最简单方法是为以下内容添加响应头:

Access-Control-Allow-Origin: *
这将允许跨域。在PHP中,您需要修改响应,如下所示:

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

如果无法控制服务器,只需将此参数添加到Chrome启动器中:
--禁用web安全性

请注意,我不会将此用于正常的“网上冲浪”。有关参考信息,请参阅以下帖子:


如果您使用Phonegap实际构建应用程序并将其加载到设备上,这将不是问题。

由于Matt Mombrea在服务器端是正确的,您可能会遇到另一个问题,即拒绝白名单

您必须配置phonegap.plist。(我正在使用旧版本的phonegap)

对于cordova,命名和目录可能会有一些更改。但步骤应该大致相同

首先选择支持文件>PhoneGap.plist

然后在“外部主机”下

添加一个值可能为“”的条目 我使用*仅用于调试目的


如果您使用的是Apache,只需添加:

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

在使用各种API时,我曾多次遇到过这种情况。通常,快速修复方法是在字符串末尾添加“&callback=?”。有时,符号必须是字符代码,有时是“?”:“?callback=?”(请参阅)

我们在chrome中测试的phonegap应用程序也有同样的问题。 在打开Chrome之前,我们每天都会使用下面的批处理文件。 请记住,在运行此程序之前,您需要从任务管理器中清除所有chrome实例,或者您可以选择chrome以不在后台运行

批次:(使用cmd)


如果您在Angular.js中得到了这个,那么请确保像这样转义端口号:

var Project = $resource(
    'http://localhost\\:5648/api/...', {'a':'b'}, {
        update: { method: 'PUT' }
    }
);

有关详细信息,请参阅。

这是我在尝试使用作为数据源解决同一问题时遇到的第一个问题/答案。我意识到这并不能解决问题,但它的关联性足以使其具有价值

我正在使用ASP.NETMVC。这条路对我有用。最终,您将创建一个属性,
[HttpHeaderAttribute(“访问控制允许来源”、“*””)
,您可以将该属性添加到控制器操作中

例如:

public class HttpHeaderAttribute : ActionFilterAttribute
{
    public string Name { get; set; }
    public string Value { get; set; }
    public HttpHeaderAttribute(string name, string value)
    {
        Name = name;
        Value = value;
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.AppendHeader(Name, Value);
        base.OnResultExecuted(filterContext);
    }
}
然后将其用于:

[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
public ActionResult MyVeryAvailableAction(string id)
{
    return Json( "Some public result" );
}

这对于任何需要为“www”和“非www”版本的推荐人提供例外情况的人来说可能很方便:

 $referrer = $_SERVER['HTTP_REFERER'];
 $parts = parse_url($referrer);
 $domain = $parts['host'];

 if($domain == 'google.com')
 {
         header('Access-Control-Allow-Origin: http://google.com');
 }
 else if($domain == 'www.google.com')
 {
         header('Access-Control-Allow-Origin: http://www.google.com');
 }
如果您有/应用程序,则可以通过Web.config文件包含此标头:

<system.webServer>
  ...

    <httpProtocol>
        <customHeaders>
            <!-- Enable Cross Domain AJAX calls -->
            <remove name="Access-Control-Allow-Origin" />
            <add name="Access-Control-Allow-Origin" value="*" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

...
在中,您可以在控制器中执行以下操作:

headers['Access-Control-Allow-Origin'] = '*'

我会给你一个简单的解决方案。就我而言,我没有访问服务器的权限。在这种情况下,您可以更改浏览器中的安全策略以允许访问控制允许源。这很简单:

  • 创建Chrome浏览器快捷方式
  • 右键单击快捷方式图标->属性->快捷方式->目标
  • 简单粘贴
    “C:\Program Files\Google\Chrome\Application\Chrome.exe”--允许从文件访问文件--禁用web安全性


    位置可能不同。现在,单击该快捷方式打开Chrome。

    如果您正在编写Chrome扩展并出现此错误,请确保已将API的基本URL添加到您的
    manifest.json中,例如:

    "permissions": [
        "https://itunes.apple.com/"
    ]
    

    当您收到请求时,您可以

    var origin = (req.headers.origin || "*");
    
    而不是当你必须做出这样的回应时:

    res.writeHead(
        206,
        {
            'Access-Control-Allow-Credentials': true,
            'Access-Control-Allow-Origin': origin,
        }
    );
    

    您可以通过在HTTP选项的响应中使包含头
    访问控制允许源代码:
    的broswer在不修改服务器的情况下工作

    在铬合金中,使用。如果您使用的是Mozilla,请检查Ruby中的。

    为所有人或

    response['Access-Control-Allow-Origin'] = 'http://yourdomain.name' 
    

    如果您在apache下,只需向目录中添加一个包含以下内容的.htaccess文件:

    Header set Access-Control-Allow-Origin: *
    
    Header set Access-Control-Allow-Headers: content-type
    
    Header set Access-Control-Allow-Methods: *
    

    但是我需要从移动设备加载webservice,我会绕过它吗?你需要做一些服务器端更改或使用JSONP,我会联系我的服务器提供商。谢谢这有什么安全问题吗,例如,说“出于安全原因,JavaScript受到“同源策略”的限制,例如,恶意脚本无法联系远程服务器并从您的站点发送敏感数据。”太棒了,我只是把它放在我的node.js服务器文件中:response.writeHead(200,{'Content Type':contentType,'Access Control Allow origin':'*');它成功了。谢谢约翰,是的,通配符将允许任何域向您的主机发送请求。我建议用运行脚本的特定域替换星号。有趣的是,您认为通配符甚至不应该建议@jfrej。这完全取决于你的目标。例如,我们之所以使用通配符(并发布此答案),是因为我们正在为任何站点构建一个嵌入式小部件。谢谢。但是我的应用程序正在移动设备上运行,我无法将参数传递给我的webview包装器。你不先在浏览器中测试你的应用程序吗?如何调试?是的,我在Chrome浏览器中调试,但应用程序不会在Chrome上运行。它将出现在我无法控制的phonegap网络视图上。阅读答案:您只需将此参数添加到您的Chrome启动器中即可。这里面没有设置,当然不安全。OP正在寻找绕过安全措施的方法。在使用jQuery时,设置res.writeHead( 206, { 'Access-Control-Allow-Credentials': true, 'Access-Control-Allow-Origin': origin, } );
    response['Access-Control-Allow-Origin'] = '*' 
    
    response['Access-Control-Allow-Origin'] = 'http://yourdomain.name' 
    
    Header set Access-Control-Allow-Origin: *
    
    Header set Access-Control-Allow-Headers: content-type
    
    Header set Access-Control-Allow-Methods: *