Pourquoi ai-je besoin pour utiliser le protocole http.StripPrefix d'accéder à mes fichiers statiques?
principal.aller
package main
import (
"net/http"
)
func main() {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.ListenAndServe(":8080", nil)
}
Structure de répertoire:
%GOPATH%/src/project_name/main.go
%GOPATH%/src/project_name/static/..files and folders ..
Même après la lecture de la documentation, j'ai du mal à comprendre ce qu'est exactement http.StripPrefix
fait ici.
1) Pourquoi ne puis-je pas accéder à localhost:8080/static
si je supprime http.StripPrefix
?
2) Quelle URL cartes à /static
dossier si je supprime cette fonction?
- Avez-vous essayé http.La poignée("/static/', ' http.Serveur de fichiers(http.Dir("/")))?
http.Handle("/static/", http.FileServer(http.Dir("")))
œuvres.
Vous devez vous connecter pour publier un commentaire.
http.StripPrefix()
transmet le traitement de la demande à l'un que vous spécifiez comme paramètre, mais avant qu'il modifie l'URL de la requête en dépouillant le préfixe spécifié.Ainsi, par exemple, dans votre cas, le navigateur ou un client HTTP) demandes de la ressource:
StripPrefix
coupe le/static/
et de l'avant de la modification de la demande au gestionnaire de retourné parhttp.FileServer()
donc il va voir que la ressource demandée estLa
Handler
retourné parhttp.FileServer()
va chercher et servir le contenu d'un fichier relative dans le dossier (ou plutôtFileSystem
) spécifié comme paramètre (que vous avez spécifié"static"
à la racine des fichiers statiques).Maintenant depuis
"example.txt"
est dans lestatic
dossier, vous devez spécifier un chemin d'accès relatif que, pour obtenir la corrent chemin d'accès au fichier.Un Autre Exemple
Cet exemple peut être trouvé sur le site http package page de documentation (ici):
Explication:
FileServer()
est dit à la racine des fichiers statiques est"/tmp"
. Nous voulons que l'URL commence par"/tmpfiles/"
. Donc, si quelqu'un demande de l'"/tempfiles/example.txt"
, nous voulons que le serveur pour envoyer le fichier"/tmp/example.txt"
.Afin de parvenir à cela, nous avons à la bande
"/tmpfiles"
à partir de l'URL, et le reste sera le chemin relatif par rapport à la racine du dossier"/tmp"
qui, si nous joindre donne:/tmpfiles/
ou vous allez passer un mauvais moment./tmpfile/
dans la Poignée est important, mais pas dans StripPrefix, disonshttp.Handle("/tmpfiles/", http.StripPrefix("/tmpfiles", http.FileServer(http.Dir("/tmp"))))
fonctionnera aussiSupposer que
J'ai un fichier
Alors, dites-fileserve sert de répertoire local
Exemple 1 - l'url de la racine de Filerserver racine
Maintenant, serveur de fichiers prend
"/"
demande"/home/go/src/js"+"/"
Oui,
http://localhost/kor.js
demande, dit serveur de Fichiers, trouverkor.js
dansnous avons
kor.js
fichier.Exemple2 - url personnalisée pour serveur de Fichiers racine
Mais, si nous devons ajouter d'autres demande nom.
Maintenant, serveur de fichiers prend
"/static/"
demande"/home/go/src/js"+"/static/"
Oui,
http://localhost/static/kor.js
demande, dit serveur de Fichiers, trouverkor.js
dansNous avons eu erreur 404.
Exemple 3 - personnalisation de l'url de serveur de Fichiers racine avec
donc, nous allons modifier url de la requête avant de Fileserver la prend avec
http.StripPrefix("/tmpfiles/", ...
après
stripPrefix
Fileserver prendre/
au lieu/static/
ai
kor.js
Je vais répondre aux deux questions une par une.
Réponse 1 à la Question 1:
Si votre code est écrit comme ci-dessous:
votre dossier racine est
%GOPATH%/src/project_name/static/
. Lorsque vous accédez àlocalhost:8080/static
, l'URL/static
sera transmis au gestionnaire retourné par http.FileServer(). Cependant, vous n'avez pas de répertoire ou d'un fichier nomméstatic
dans le dossier racine.Réponse 2 à la Question 2: En général, vous ne pouvez pas accéder
/static
dossier si vous supprimez le http.StripPrefix(). Toutefois, si vous disposez d'un répertoire ou d'un fichier nomméstatic
, vous pouvez y accéder (justement pas le répertoire racine que vous voulez) avec l'URLlocalhost:8080:/static
.Par la voie, vous ne pouvez pas accéder à quoi que ce soit si votre URL ne commence pas par
/static
, parce que lehttp.ServeMux
ne sera pas de rediriger votre demande.