Access-Control-Allow-Origin 不允许 Origin null

IT技术 javascript null xmlhttprequest cors localhost
2021-02-06 08:31:24

我制作了一个小的 xslt 文件来创建一个名为 weather.xsl 的 html 输出,代码如下:

<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="yweather"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <img src="{/*/*/item/yweather:condition/@text}.jpg"/>
</xsl:template>
</xsl:stylesheet>

我想将 html 输出加载到 html 文件中的 div 中,我正在尝试使用 jQuery 执行如下操作:

<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>

但是我收到以下错误:Access-Control-Allow-Origin 不允许 Origin null。

我已经阅读了有关向 xslt 添加标题的内容,但我不确定如何执行此操作,因此将不胜感激,如果无法以这种方式加载 html 输出,请提供有关其他方法的建议这样做会很棒。

6个回答

Originnull是本地文件系统,因此这表明您正在加载load通过file:///URL进行调用的 HTML 页面(例如,只需在本地文件浏览器或类似工具中双击它)。

大多数浏览器通过禁止甚至从与文档相同的目录加载文件来将同源策略应用于本地文件。(过去是 Firefox 允许相同的目录和子目录,但不再允许.

基本上,将 ajax 与本地资源一起使用是行不通的。

如果您只是在本地测试将真正部署到 Web 的内容,而不是使用本地文件,请安装一个简单的 Web 服务器并通过http://URL 进行测试这为您提供了更准确的安全图片。您的 IDE 可能内置了某种服务器(直接或通过扩展),让您只需在 IDE 中点击“运行”即可启动服务器并提供文件。

@CiaranG 我python -m SimpleHTTPServer从命令行运行,然后转到 localhost:8000,为我工作。Python 预装在 Mac OS X 中;如果使用其他操作系统,您可能需要安装。
2021-03-21 08:31:24
上传后,Origin 不再为 null,但我仍然收到“Access-Control-Allow-Origin 不允许”的提示。
2021-03-23 08:31:24
设置简单 Web 服务器的最简单、最快捷的方法是什么?IIS 会是这里最简单的方法吗?
2021-03-24 08:31:24
对于那些后来遇到这个问题的人,在CVE-2019-11730之后,Firefox 不再允许这种有限的访问
2021-03-27 08:31:24
如果您正在加载的资源如您所示 ( $('#result').load('weather.xsl');),则不应发生这种情况,因为该请求显然来自同一来源。如果您尝试从其他地方(例如$('#result').load('http://somewhere.else/weather.xsl');加载,那么您将再次遇到 SOP,但方式不同。Ajax 请求仅限于同一来源(请参阅答案中的链接),或者如果您使用的是启用CORS 的浏览器并且服务器支持 COR,则服务器可以选择是否允许跨域请求。
2021-03-31 08:31:24

Chrome 和 Safari 对本地资源使用 ajax 有限制。这就是为什么它会抛出这样的错误

Access-Control-Allow-Origin 不允许 Origin null。

解决方案:使用 firefox 或将您的数据上传到临时服务器。如果您仍想使用 Chrome,请使用以下选项启动它;

--allow-file-access-from-files

有关如何将上述参数添加到 Chrome 的更多信息:右键单击任务栏上的 Chrome 图标,右键单击弹出窗口中的 Google Chrome,然后单击属性并将上述参数添加到快捷方式选项卡下的目标文本框中。它会像下面这样;

C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

希望这会有所帮助!

正在从Web服务器上运行。有没有搞错?我怎样才能弄清楚它在哪里加载本地文件?
2021-03-17 08:31:24
当我尝试将 --allow-file-access-from-files 添加到目标路径时,我收到“....invalid”消息,htis 解决方案是否仍然有效?
2021-03-20 08:31:24
做了所有这些,然后关闭和打开。仍然不行(XP 上的 Chrome 27.0.1453.116 m)
2021-03-21 08:31:24
在 Mac OS X 中,您可以通过打开终端并输入以下内容来使用此选项启动 Chrome: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files & 注意最后的 & 只是为了您可以继续使用终端而不是必需的。 注意:如果您关闭终端,它将关闭 Chrome 窗口。
2021-04-01 08:31:24
我无法在 Windows 8 下添加此参数...,有人知道如何操作吗?...
2021-04-06 08:31:24

只是想补充一点,“运行网络服务器”的答案似乎令人生畏,但如果您的系统上有 python(至少在 MacOS 和任何 Linux 发行版上默认安装),它就像:

python -m http.server  # with python3

或者

python -m SimpleHTTPServer  # with python2

因此,如果您将 html 文件myfile.html放在一个文件夹中,例如mydir,您所要做的就是:

cd /path/to/mydir
python -m http.server  # or the python2 alternative above

然后将浏览器指向:

http://localhost:8000/myfile.html

你已经完成了!适用于所有浏览器,无需禁用网络安全、允许本地文件,甚至无需使用命令行选项重新启动浏览器。

Windows 上的 python 3 等效项是: python -m http.server [<portNo>]
2021-03-12 08:31:24
Python 3:python3 -m http.server
2021-03-13 08:31:24
Linux 上的 Python 2,选择 8080 端口(或您想要的任何其他端口): python -m SimpleHTTPServer 8080
2021-03-16 08:31:24

我想虚心补充一点,根据这个SO来源:https : //stackoverflow.com/a/14671362/1743693,现在只需使用以下jQuery指令即可部分解决这种问题

<script> 
    $.support.cors = true;
</script>

我在 IE10.0.9200 上尝试过,它立即起作用(使用 jquery-1.9.0.js)。

在 chrome 28.0.1500.95 上 - 此指令不起作用(当大卫在上面链接的评论中抱怨时,这种情况发生了

使用 --allow-file-access-from-files 运行 chrome 对我不起作用(如 Maistora 的上述声明)

添加一点以使用 Gokhan 的解决方案:

--allow-file-access-from-files

现在,您只需要在 Target 文本中附加上面的文本,后跟一个空格。添加上述属性后,请确保关闭所有 chrome 浏览器实例。现在通过添加此属性的图标重新启动 chrome。它应该适用于所有人。

该参数已由 Ghokan Tank 提供,找出如何始终以该参数启动浏览器不是问题的一部分。此外,您不能假设每个人都使用 Microsoft Windows。
2021-03-27 08:31:24