Создайте статический файловый сервер в Go

Go
Создайте статический файловый сервер в Go

Последняя статья оПриложение библиотеки шаблонов GoВ конце статьи оставляем вопрос, шаблон страницы пропускаетсяCDNцитируетсяBootStrapизcss,jsдокумент. До сих пор наши серверы не могут обслуживать клиентский статический файл и запрашивает ответный файл на диске сервера для клиента. Используется и настроенNginxСервер должен знатьNginxЕстественно поддерживает доступ к статическим ресурсам, поэтому стоит ли нам также использоватьNginxМожно ли реализовать обработку запросов статических файлов? На самом деле нет. В первой статье мы сказали, что «язык Go может построить и запустить HTTP-сервер с высокой степенью параллелизма, не полагаясь на какие-либо сторонние компоненты».Goлингвистическийnet/httpВ библиотеке реализована задача обработки запросов к статическим ресурсам.

Давайте на простом примере научимся использоватьnet/httpКак создать сервер статических ресурсов, а затем применить его к нашемуhttp_demoв проекте.

Исходный код каждой статьи из серии Go Web Programming содержит соответствующую версию программного пакета для справки. Ответ в публичном аккаунтеgohttp08Получить исходный код этой статьи

Создайте сервер статических ресурсов

мы создаем новыйmain.goХраните код для создания серверов статических ресурсов и запросов мониторинга и создавайте их в одном и том же каталоге одновременно.assets/cssа такжеassets/jsКаталог используется для хранения статических файлов, используемых шаблоном страницы из предыдущей статьи.

main.go
assets/
└── css
    └── bootstrap.min.css
└── js
    └── bootstrap.min.js

main.goКод в следующем:

package main

import "net/http"

func main() {
    fs := http.FileServer(http.Dir("assets/"))
    http.Handle("/static/", http.StripPrefix("/static/", fs))

    http.ListenAndServe(":8080", nil)
}
  • Сначала мы используемhttp.FileServerСоздать ответ с содержимым данной файловой системы на всеHTTPобработчик запросов.
  • http.Handle("/static/", http.StripPrefix("/static/", fs))Разрешить файловому серверу использоватьassetsфайл ответа в каталогеURLпуть начинается с/static/все начиная сHTTPпросить.
  • assetsустановлен в корневой каталог файловой системы файлового сервера, файловый сервер/staticначалоURLзапрос, поэтому нам нужно использоватьhttp.StripPrefix()ПучокstaticПрефикс можно убратьassetsЗапрошенный файл был найден в каталоге.

запустите программу, затем используйтеcURLзапросcssфайл и посмотреть, работает ли это.

$ go run main.go

$ curl -s http://localhost:8080/static/css/bootstrap.min.css

/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 ......

комбинироватьgorillia/muxИспользовать файловый сервер

В приведенном выше примере обработчик для файлового сервера зарегистрирован наnet/httpпредоставляется стандартная библиотекаServeMux(сервисный мультиплексор), мыhttp_demoДля поддержки сложной регистрации маршрута в проекте используетсяgorillia/muxСервисный мультиплексор, предоставляемый библиотекой. Они работают по-разному, поэтому применение файлового сервера в нашем проекте потребовало некоторой настройки.

Сначала мы ставимassetsКаталог Вся копия в корневой каталог проекта.

func RegisterRoutes(r *mux.Router) {
   // serve static file request
   fs := http.FileServer(http.Dir("assets/"))
   serveFileHandler := http.StripPrefix("/static/", fs)
   r.PathPrefix("/static/").Handler(serveFileHandler)
   ......
}
  • использоватьrouter.PathPrefix("/static")Создать матч с/staticМаршруты для запросов префикса.
  • затем используйтеroute.Handlerметод для регистрации файлового сервера в качестве обработчика, соответствующего маршруту (Handlerда*mux.Routeметод выше).

После регистрации файлового сервера обращаемся к предыдущему шаблону страницыCDNВверхjsа такжеcssФайл заменяется ссылкой на файл на собственном сервере.

<html lang="en">
<head>
    ......
    <link href="/static/css/bootstrap.min.css" rel="stylesheet">
</head>

<body>

{{ template "nav" .}}

<div class="container">
    {{template "content" .}}
</div> <!-- /container -->

<script src="/static/js/bootstrap.min.js"></script>
</body>
</html>

Затем перезапустите сервер и перейдите на предыдущую страницу.http:localhost:/view/index, чтобы убедиться, что наш сервер теперь может обслуживать запросы на статические файлы.

Стиль страницы нормальный, пока такой есть на сервереassetsФайлы в каталоге мы можемhttp://localhost:8000/static/*дорожкаURLдоступ к.

Исходный код, соответствующий сегодняшней статье, упакован и загружен, официальный аккаунт ответитgohttp08Получите ссылку для скачивания, скачайте и потренируйтесь. Если статья может вам помочь, не забудьте переслать ее, нажмите на нее и поделитесь ею с большим количеством людей. Подпишитесь на официальный аккаунт, чтобы получать обновления статей каждую неделю.

Предыдущий отзыв

Глубокое погружение в написание HTTP-серверов в Go

Использование маршрутизатора gorilla/mux

Перейти к веб-программированию — База данных приложений

Перейти к веб-программированию — глубокое обучение разбору HTTP-запросов

Перейти к веб-программированию — супер-подробное руководство по применению библиотеки шаблонов