静的ファイルにアクセスするために http.StripPrefix を使用する必要があるのはなぜですか? 質問する

静的ファイルにアクセスするために http.StripPrefix を使用する必要があるのはなぜですか? 質問する

メイン.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/static1)を削除するとアクセスできなくなるのはなぜですか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

おすすめ記事