メイン.go
package main
import (
"net/http"
)
func main() {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.ListenAndServe(":8080", nil)
}
ディレクトリ構造:
%GOPATH%/src/project_name/main.go
%GOPATH%/src/project_name/static/..files and folders ..
ドキュメントを読んでも、http.StripPrefix
ここで具体的に何が行われているのか理解できません。
localhost:8080/static
1)を削除するとアクセスできなくなるのはなぜですかhttp.StripPrefix
?
2)/static
その機能を削除した場合、どの URL がフォルダーにマップされますか?
ベストアンサー1
http.StripPrefix()
リクエストの処理をパラメータとして指定したものに転送しますが、その前に、指定されたプレフィックスを削除してリクエスト URL を変更します。
たとえば、ブラウザ (または HTTP クライアント) がリソースを要求する場合は次のようになります。
/static/example.txt
StripPrefix
はカットし/static/
、変更されたリクエストを、http.FileServer()
要求されたリソースが
/example.txt
Handler
によって返されるものはhttp.FileServer()
、ファイルの内容を検索して提供します。相対的パラメータとして指定されたフォルダー(または)(静的ファイルのルートとしてFileSystem
指定)に移動します。"static"
はフォルダー"example.txt"
内にあるためstatic
、正しいファイル パスを取得するには、フォルダーへの相対パスを指定する必要があります。
もう一つの例
この例は、http パッケージのドキュメント ページ (ここ):
// To serve a directory on disk (/tmp) under an alternate URL
// path (/tmpfiles/), use StripPrefix to modify the request
// URL's path before the FileServer sees it:
http.Handle("/tmpfiles/",
http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp"))))
説明:
FileServer()
静的ファイルのルートは であると伝えられます"/tmp"
。URL は で始まるようにする必要があります"/tmpfiles/"
。したがって、誰かがリクエストした場合"/tempfiles/example.txt"
、サーバーはファイル を送信するようにする必要があります"/tmp/example.txt"
。
これを実現するには、"/tmpfiles"
URL から削除する必要があり、残りはルート フォルダーと比較した相対パスになります"/tmp"
。これを結合すると次のようになります。
/tmp/example.txt