浏览器通过file://访问文件和localhost://访问文件的区别

17 篇文章 0 订阅
3 篇文章 0 订阅
1、file://

file协议用于访问本地计算机中的文件,好比通过资源管理器中打开文件一样,需要主要的是它是针对本地的,即file协议是访问你本机的文件资源。

2、localhost://

localhost://即本地的http://

http访问本地的html文件,相当于将本机作为了一台http服务器,然后通过localhost访问的是你自己电脑上的本地服务器,再通过http服务器去访问你本机的文件资源

再简单点就是file只是简单请求了本地文件,将其作为一个服务器未解析的静态文件打开。而http是在本地搭建了一个服务器再通过服务器去动态解析拿到文件。

其他区别:

file协议只能在本地访问

本地搭建http服务器开放端口后他人也可以通过http访问到你电脑中的文件,但是file协议做不到

file协议对应有一个类似http的远程访问,就是ftp协议,即文件传输协议。

file协议无法实现跨域

看一个例子来说明一下:
先看三段代码:
index.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>Document</title>
</head>
<body>
    <script src="./index.js" async></script>
</body>
</html>

index.js:

import * as circle from './test';

console.log('圆面积:' + circle.area(4));
console.log('圆周长:' + circle.circumference(14));

test.js:

export function area(radius = 5) {
    return Math.PI * radius * radius;
}
  
export function circumference(radius = 5) {
    return 2 * Math.PI * radius;
}

使用的是es6的module语法,但是通过file:///font/index.html进行打开时浏览器会报一个关于CORS跨域的错误,网上查找的说是浏览器禁止访问本地文件。
检查思路

  1. 浏览器版本过低,不支持es6语法。于是升级浏览器至最新(Chrome),但是问题依旧没有解决。
  2. 本地不支持module模块,通过:
npm install -g es-checker
$ es-checker

检查本地对ES6的支持,发现问题并不在这里

  1. 通过bable(在这里就不对bable做叙述了)将ES6语法转化成ES5语法,浏览器依旧报CORS跨域问题。

  2. 在外网一段回答中主要到回答者提到http和file,于是思考可能是协议使用错误。最后通过localhost本地服务器进行访问文件,报错消失。

问题解决

开始通过file协议直接访问index.html,在index.html中静态引入index.js,在index.js中import test.js。在import的过程中需要http服务器去解析es6语法并添加header头信息去跨域引入test.js,但是file协议相当于通过资源管理器静态访问index.html,中间的过程没有http服务器参与解析,所以无法识别es6的import语法。

  • 11
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值