Maison  >  Article  >  développement back-end  >  Comment empêcher Fiber d'enregistrer automatiquement les routes HEAD ?

Comment empêcher Fiber d'enregistrer automatiquement les routes HEAD ?

WBOY
WBOYavant
2024-02-06 09:33:03453parcourir

Comment empêcher Fiber denregistrer automatiquement les routes HEAD ?

Contenu de la question

Fiber v2 (https://go Fiber.io/) ajoutera automatiquement une route HEAD pour chaque route GET. Est-il possible d'empêcher cela ?

Je veux juste m'inscrire au GET. En fait, je souhaite uniquement enregistrer les itinéraires que j'ai ajoutés explicitement.

Est-il possible de faire cela ?


Bonne réponse


Voir (*app).get:

// get registers a route for get methods that requests a representation
// of the specified resource. requests using get should only retrieve data.
func (app *app) get(path string, handlers ...handler) router {
    return app.head(path, handlers...).add(methodget, path, handlers...)
}

et (*group).get : 

// get registers a route for get methods that requests a representation
// of the specified resource. requests using get should only retrieve data.
func (grp *group) get(path string, handlers ...handler) router {
    grp.add(methodhead, path, handlers...)
    return grp.add(methodget, path, handlers...)
}

Il n'y a aucun moyen d'arrêter ce comportement. Tout ce que vous pouvez faire, c'est éviter de les utiliser et emprunter directement l'itinéraire add 方法。例如,注册一个 get, comme ceci :

app.add(fiber.methodget, "/", func(c *fiber.ctx) error {
    return c.sendstring("hello, world!")
})

Veuillez noter que (*app).use a> et (*group).use correspondent à tous les verbes http. Vous pouvez supprimer head comme ceci :

methods := make([]string, 0, len(fiber.defaultmethods)-1)
for _, m := range fiber.defaultmethods {
    if m != fiber.methodhead {
        methods = append(methods, m)
    }
}
app := fiber.new(fiber.config{
    requestmethods: methods,
})

REMARQUE : Chaque fois qu'un head 路由,它就会出现恐慌,因为它不包含在 requestmethods itinéraire est enregistré, il panique car il n'est pas inclus dans les requestmethods.

Je ne sais pas pourquoi tu fais ça. Peut-être qu'une meilleure option serait d'utiliser un middleware pour refuser toutes les head requêtes comme celle-ci :

app.Use(func(c *fiber.Ctx) error {
    if c.Method() == fiber.MethodHead {
        c.Status(fiber.StatusMethodNotAllowed)
        return nil
    }
    return c.Next()
})

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer