go做静态资源服务器(http2,https),前端无法正常解析js

漂泊的树叶 发布于 2018/06/05 13:15
阅读 1K+
收藏 4
Go

问题: 想尝试一下golang的http2功能,但是遇到一个问题, js文件无法正常解析...

 go version go1.10.2 windows/amd64
详情:
后端代码

func main() {
    var server http.Server
    http2.VerboseLogs = true
    server.Addr = ":8080"

    http2.ConfigureServer(&server, &http2.Server{})
    // 先把css和脚本服务上去
    http.Handle("/static/",http.StripPrefix("/static/",  http.FileServer(http.Dir("static/"))))
    http.Handle("/views/",http.StripPrefix("/views/",  http.FileServer(http.Dir("static/views/"))))
    http.HandleFunc("/sayHello", sayHello)

    logger.Info("正在启动服务器...")
    // 启用http2
    err := server.ListenAndServeTLS("./keystore/cert.crt", "./keystore/rsa_private.key") //前端不能正常解析js文件
    //err := server.ListenAndServe()  // 前端可以正常解析js文件
    if err != nil {
        logger.Errorf("服务器启动错误:%v", err)
    }

}

func sayHello(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("hello world"))

}


前端代码:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        Hello world!
    </div>
<script src="/static/js/vue.js" type="text/javascript"></script>
<script>
</script>
</body>
</html>


项目结构:

**** 不能正常解析的情况 ****

前端错误信息:  
Refused to execute script from 'https://localhost:8080/static/js/vue.js' because its MIME type ('text/plain') is not executable, and strict MIME type checking is enabled.  

注:  
err := server.ListenAndServeTLS("./keystore/cert.crt", "./keystore/rsa_private.key") //用这一句,前端不能正常解析js文件  
err := server.ListenAndServe()  // 用这一句, 前端可以正常解析js文件

加载中
1
漂泊的树叶
漂泊的树叶

已解决

import  "mime"
mime.AddExtensionType(".js", "text/javascript")

就可以了

详细原因可以参考这条问答 https://studygolang.com/topics/5651

0
漂泊的树叶
漂泊的树叶

如果图像看不清楚, 右击鼠标查看图像可以看清楚

0
漂泊的树叶
漂泊的树叶

为什么都没有人回复,是我没有问清楚么?

0
小塔罗
小塔罗

看了报错大概是mime的问题具体的不太清楚。没用过go的http2来着

0
言身寸言身寸
言身寸言身寸

js文件不用放在https里面吧,可以引用官方js文件路径

0
言身寸言身寸
言身寸言身寸

或者改下类型

Refused to execute script from 'https://localhost:8080/static/js/vue.js&#39; because its MIME type ('text/plain') is not executable, and strict MIME type checking is enabled. 翻译一下就是 拒绝执行脚本,因为类型text/plain不可执行,并且严格类型校验已开启。 很简单了,改一下content type就好了。

言身寸言身寸
言身寸言身寸
回复 @漂泊的树叶 : 实在要处理,在handleFunc方法里面设置content-type看看,这个跟前端没关系,属于后台服务返回的数据处理
漂泊的树叶
漂泊的树叶
是可以直接引用官方的cdn, 但是难免会有自己写的js 文件. 对于改Content-Type的话, 我尝试在前端<script>标签中设置了类型为 text/javascript但是没有作用. 后端因为是使用了 http.FileServer方法, 这个方法是官方的http包中的,我不知道怎么改啊.
0
言身寸言身寸
言身寸言身寸
func handlerJS(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type","...") //设置返回类型
    //获取请求中的文件路径,返回文件
}
漂泊的树叶
漂泊的树叶
这样写 我就不能用http.FileServer方法了啊. 而且如果不启用 http2,https的话这个http.FileServer是正常的
0
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部