#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")))
}