无法访问'file:///sample.txt',因为CORS策略阻止了来自'null'源的请求:CORS仅支持协议方案。

6

我是新手,正在学习 AJAX 的基础知识。在我的 HTML 文件中,当点击提交按钮时,我只是尝试记录文本文件的文本,该文本文件位于 HTML 文件所在的同一目录中。但是我却收到了一个错误:

Access to XMLHttpRequest at 'file:///D:/Front_end_files/AJAX/sample.txt' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

这是我的 Ajax-1.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Ajax-1 Text file</title>
</head>
<body>
        <button id="btn">Click Me</button>

        <script>
            document.getElementById('btn').addEventListener('click',loadtext);

            function loadtext(){

                let xhr = new XMLHttpRequest();
                console.log(xhr);

                xhr.open('GET', 'sample.txt', true);

                xhr.onload = function(){
                    if(this.status == 200){
                        console.log(this.responseText);
                    }
                };

                xhr.send();
            }
        </script>
</body>
</html>

有人能告诉我在这里我做错了什么,还是这是chrome和firefox的新功能?

2个回答

3

这种行为是不被鼓励的,因为它会给您的计算机带来安全漏洞,我们不想让AJAX请求进入我们的文件,那样会将我们的本地系统暴露在网络中。

正如他们之前所说的,CORS不支持本地file://访问,因此您需要找到一种解决方法,一个简单的方法是使用Python提供一个简单的HTTPServer并在那里提供文件,例如:

python -m SimpleHTTPServer 8080

这将把你当前的工作目录作为一个小型 Web 服务器。


这个命令似乎是针对Python 2的。Python 3应该使用python -m http.server [<portNo>] - nwhaught
Python 3也可以使用python3 -m http.server,参考这篇博客文章 - John Skiles Skinner

0

这是正常的,也是为了您的安全。您不希望任何人通过浏览器访问或阅读您的文件。

您可以运行本地服务器来测试您的请求。

以下是一些不错的选项:https://dev59.com/LWIj5IYBdhLWcg3wpWlx#20578692


2
我有一个简单的HTML文件,选项是针对Python项目或与Node相关的框架。 - Prateek Gautam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接