跨域请求本地文件

Posted

技术标签:

【中文标题】跨域请求本地文件【英文标题】:Cross-origin request for local file 【发布时间】:2017-09-15 12:59:15 【问题描述】:

我需要在浏览器中打开一个本地 html 文件。 javascript 工作正常,但 ajax 停止工作,并且 XMLHttpRequest 给出了跨源错误。有没有办法从本地目录运行 ajax。我有必要只从本地文件运行它。

谢谢

【问题讨论】:

XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin的可能重复 【参考方案1】:

如果您使用的是 chrome,请尝试this extension

CORS 允许一个域上的 Web 应用程序向另一个域发出跨域 AJAX 请求。启用它非常简单,只需要服务器发送一个响应头。

这个扩展的作用是添加到响应头规则 - Access-Control-Allow-Origin: *

您也可以通过发送响应标头手动执行此操作。

对于简单的 CORS 请求,服务器只需要在其响应中添加以下标头:Access-Control-Allow-Origin: *

阅读this了解更多信息。

【讨论】:

其实我用的是android webview。 您也可以手动操作,服务器只需在响应中添加Access-Control-Allow-Origin: * 标头即可。 看不出来,怎么回答问题的。【参考方案2】:

对于任何想知道的人,我必须在应用程序中运行一个服务器来提供 js 文件。似乎不运行服务器就不可能做到这一点。 如果有人知道另一种方法,请告诉。

【讨论】:

一些关于这意味着什么以及如何做的参考会有所帮助。【参考方案3】:

如果您能够更改服务器代码,您可以尝试将字符串“null”添加到允许的来源。在 Chrome 中,如果它从本地文件运行,它会将源发送为“null”。

这是一个在 ASP.NET Core 中设置“null”原点的示例:

services.AddCors(options =>

    options.AddPolicy("InsecurePolicy",
        builder => builder
            .WithOrigins("null")
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());
);

请注意,这是not recommended,但如果您只是在开发过程中需要它,它可能就足够了。

【讨论】:

【参考方案4】:

在 Firefox 中实现此功能的最简单方法是导航到 about:config,查找 privacy.file_unique_originsetting 并将其关闭。

本质上,Firefox 曾经将来自同一目录的本地文件视为来自同一来源,因此 CORS 很满意。在发现 CVE-2019-11730 后,这种行为发生了变化。

它在 Arch 上的 84.0.1 上运行良好。不本地调试的时候一定要关掉。

Source

【讨论】:

我不建议打开和关闭它。接受的答案是处理此问题的正确方法【参考方案5】:

如果您使用的是 VS Code,Live Server 扩展可能会对您有所帮助。它解决了我在编辑网页时遇到的跨域问题。

https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer

【讨论】:

以上是关于跨域请求本地文件的主要内容,如果未能解决你的问题,请参考以下文章

vue工程本地代码请求http发生跨域提示错误解决方法

vue-cli项目本地代理实现跨域请求

ajax本地跨域请求以及解决方法

本地跨域请求

vue跨域解决方法

VUE本地跨域解决方案