本地跨域请求

Posted

技术标签:

【中文标题】本地跨域请求【英文标题】:Cross origin requests on local 【发布时间】:2018-09-20 20:01:46 【问题描述】:

我正在尝试一些非常简单的方法,但由于某种原因它不起作用:

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>SyriLab</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
    <header></header>
    <div id="content"></div>

    <script src="js/jquery-3.3.1.min.js"></script>
    <script src="js/poper.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/functions.js"></script>
    <script src="js/main.js"></script>
</body>
</html>

js/main.js:

window.onload=function()
    main();



function main()
    $("header").load("./pages/header.html"); 
    $("#content").load("./pages/home.html");

我在启动 index.html 时遇到的错误:

加载文件失败:///E:/​​Dev/Eclipse/SyriLab/pages/header.html:跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https。

加载文件失败:///E:/​​Dev/Eclipse/SyriLab/pages/home.html:跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https。

一切都是本地的,相同的根目录,我只是想制作一个基本的 html 页面,包括引导程序和 jquery(也是 poper,不确定它是什么,但在引导程序页面上)。并在 php 中使用类似于“include”的东西,但使用常规的 js 和 html。

我在这里做错了什么?

【问题讨论】:

错误告诉你...提示你的协议是file...安装猫鼬。它是一个用于 Windows 的轻量级 Web 服务器,并创建一个将组成的域指向本地主机的主机。 没有别的办法了吗?我希望能够在不运行任何东西的情况下进行实验。 像这样加载外部 html 是一种非常糟糕的做法。 不,我在骗你。去安装猫鼬...这很简单。 威尔斯:那我该怎么办? Darkrum:好的,谢谢,我只是不想安装或运行任何东西,只需启动我的页面。但如果没有其他选择 【参考方案1】:

根据您的问题,您似乎正在尝试将 index.html 作为本地文件访问。取而代之的是,您必须使用网络服务器(例如 nginx、apache 等)来访问该文件。由于用于访问本地文件的协议是file://,jQuery 的加载方法将无法加载文件。出于安全原因,浏览器禁止此类请求。

配置网络服务器并尝试使用http 协议访问index.html,您的代码应该可以工作。

【讨论】:

【参考方案2】:

正如其他人所说。您必须使用服务器提供文件。

为此目的并避免安装软件,请使用 Python。

在您的控制台中输入:

cd /path/to/my/index.html
// Below is command line for Python 3.x
python -m http.server
// Below is command line for Python 2.x
python -m SimpleHTTPServer

默认使用 http://localhost:8000/

这个简单的服务器将为您的目录文件提供服务。 Index.html 是服务器将尝试查找和服务的空资源请求。

【讨论】:

它导致/usr/bin/python: No module named httppip install http 给出ERROR: Could not find a version that satisfies the requirement http ERROR: No matching distribution found for http 和更早的ModuleNotFoundError: No module named 'request'。不确定问题是由过时的答案引起的还是我对pip做了一些奇怪的事情 @reducingactivity 快速回复。如果您使用的是 Python 2.x,则必须调用 python -m SimpleHTTPServer 将更新答案以供将来参考

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

本地跨域请求

跨域请求被阻止 - 来自反应本地主机的 API 请求

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

本地 Nodejs 服务器不允许跨域请求

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

本地Vue项目跨域请求本地Node.js服务器的配置方法