файлы css отправляются как html / text с помощью http.Файловый сервер в пакете net / http

#html #css #go

#HTML #css #Вперед

Вопрос:

Ниже приведен простой веб-сервер, обслуживающий html-файл с использованием http.Метод файлового сервера. Файл css отправляется как текст / html, а браузер жалуется и не использует css.

 package main
import (
    "net/http"
)
func main() {

mux := http.NewServeMux()
setupRoutes(mux)
srv := amp;http.Server{
    Addr:         "127.0.0.1:9090",
    Handler: mux,
}

if err := srv.ListenAndServe(); err != http.ErrServerClosed {
    println(err.Error())
    return
}
   println("Server starting on port,", "127.0.0.1:9090")

}

func setupRoutes(router *http.ServeMux){

    router.Handle("/", http.FileServer(http.Dir("../web")))
}
  

И html-файл выглядит следующим образом:

 <!DOCTYPE html>
<html>
    <head>
      <title>test</title>
      <link rel="stylesheet" href="../web/global.css">
    </head>
    <body>
        <p> Test line</p>
    </body>
</html>
  

И файл global.css выглядит следующим образом:

 p {
  color: red
}
  

Запустите сервер и введите http://localhost:9090 / в браузере. Консоль разработчика в браузере сообщает о следующей ошибке:

 localhost/:1 Refused to apply style from 'http://localhost:9090/web/global.css' because its 
MIME type ('text/plain') is not a supported stylesheet MIME type, and strict MIME checking 
is enabled.
  

Структура каталогов проекта выглядит следующим образом:

 go
  src
     main 
        main.go
     web
        index.html
        global.css
  

Среда: macOS 10.15.7; версия go go1.15.3 darwin / amd64;
Google Chrome — версия 86.0.4240.111 (официальная сборка) (x86_64)

Есть идеи, как это исправить?

Спасибо!

Комментарии:

1. Проверьте содержимое файла в консоли браузера, я предполагаю, что он не находит файл, и ответ на самом деле представляет собой HTML-страницу 404 или что-то в этом роде. Если это так, вам нужно убедиться, что ваш http. Dir является точным и фактически имеет доступ к файлу, тогда вам нужно убедиться, что ваш href является точным и фактически отправляет запрос в правильное местоположение, которое обслуживается http. Файловый сервер.

2. Вместо консоли браузера вы можете проверить с помощью curl: curl http://localhost:9090/web/global.css , вы получаете css или 404?

3. И, пожалуйста, не используйте относительные пути. Это не сработает.

Ответ №1:

Измените структуру каталогов вашего проекта, как показано ниже.

 go
   src 
      main.go
      web
          index.html
          global.css
  

И измените html-файл, как показано ниже.

 <!DOCTYPE html>
<html>
<head>
  <title>test</title>
  <link rel="stylesheet" href="/global.css">
</head>
<body>
    <p> Test line</p>
</body>
</html>
  

И измените функцию main.go setupRoutes, как показано ниже.

 func setupRoutes(router *http.ServeMux) {
    router.Handle("/", http.FileServer(http.Dir("./web")))
}