先看三段代码:html
index.html:node
index.js:es6
test.js:npm
使用的是es6的module语法,可是经过file:///E:/PHP/node_test/fileAndHttp/index.html进行打开时浏览器会报一个关于CORS跨域的错误,网上查找的说是浏览器禁止访问本地文件。跨域
1. 浏览器版本太低,不支持es6语法。因而升级浏览器至最新(Chrome),可是问题依旧没有解决。浏览器
2. 本地不支持module模块,经过:服务器
检查本地对ES6的支持,发现问题并不在这里网络
3. 经过bable(在这里就不对bable作叙述了)将ES6语法转化成ES5语法,浏览器依旧报CORS跨域问题。架构
4. 在外网一段回答中主要到回答者提到http和file,因而思考多是协议使用错误。最后经过localhost本地服务器进行访问文件,报错消失。app
字面意思:本地文件传输协议
什么是File:
file协议主要用于访问本地计算机中的文件,比如经过Windows的资源管理器中打开文件或者经过右键单击‘打开’同样。
如何使用:
file协议的基本格式以下:
好比须要打开E盘下txt目录中的index.txt,那么在资源管理器或者浏览器地址栏中输入:file:///E:/txt/index.txt。用file:///+文件地址,其实等价于文件的地址。即:
等价于:
URI中问什么本地文件file后面跟三个斜杠?
URI的结构为:
若是有host,前面须要加//,所以对于http或https等网络地址来讲会写成:
这样看上去很天然。若是是文件的话,文件没有host,因此中间的host部分就不要了,就变成了:
由于若是没有host的话,第一个[]的内容就不存在了,这种赞成的写法有一个标准叫CURIE。
简介:
http协议是Hyper Text JTransfer Protocol,即超文本阐述协议的缩写。是用来从万维网服务器传输超文本到本地浏览器的传送协议,基于TCP/IP通讯协议来传输数据。http协议工做于客户端-服务器架构上,浏览器做为http客户端经过url向http服务器端发送请求,服务器接收到请求后,向客户端发送请求。
HTTP的URL:
http使用统一资源标识符URI来传输数据和创建链接。而URL是一种特殊类型的URI。
完整的URL包含下面几个部分:
协议:该URL的协议部分为“https”,标识网页使用的是https协议,在internet中可使用多种协议(http,https,ftp等)
域名:一个URL中也可使用IP做为域名,这个URL中域名为www.baidu.com
端口:跟在域名后,以“:”做为分隔符。若是省略端口,那么将采用默认端口。
虚拟目录:虚拟目录不是必须部分。是从域名后第一个“/”开始到最后一个“/”为止。
文件名:从域名后的最后一个“/”开始到“?”为止,是文件名部分,若是没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,若是没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。文件名部分也不是一个URL必须的部分,若是省略该部分,则使用默认的文件名。
锚:从“#”开始到最后都是锚,锚也不是一个URL必须的部分。
参数:从“?”开始到“#”为止中间为参数,参数能够容许有多个参数,中间以“&”做为分隔符。
请求方法:
file协议用于访问本地计算机中的文件,比如经过资源管理器中打开文件同样,须要主要的是它是针对本地的,即file协议是访问你本机的文件资源。
http访问本地的html文件,至关于将本机做为了一台http服务器,而后经过localhost访问的是你本身电脑上的本地服务器,再经过http服务器去访问你本机的文件资源。
再简单点就是file只是简单请求了本地文件,将其做为一个服务器未解析的静态文件打开。而http是在本地搭建了一个服务器再经过服务器去动态解析拿到文件。
其余区别:
file协议只能在本地访问
本地搭建http服务器开放端口后他人也能够经过http访问到你电脑中的文件,可是file协议作不到
file协议对应有一个相似http的远程访问,就是ftp协议,即文件传输协议。
file协议没法实现跨域
开始经过file协议直接访问index.html,在index.html中静态引入index.js,在index.js中import test.js。在import的过程当中须要http服务器去解析es6语法并添加header头信息去跨域引入test.js,可是file协议至关于经过资源管理器静态访问index.html,中间的过程没有http服务器参与解析,因此没法识别es6的import语法。