登录
首页 >  Golang >  Go问答

如何让 Go 的 net/http 包停止删除双斜杠?

来源:stackoverflow

时间:2024-04-16 09:27:34 318浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《如何让 Go 的 net/http 包停止删除双斜杠?》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

考虑以下非常基本的“net/http”程序:

package main

import (
    "net/http"
    "log"
)

func entry(w http.ResponseWriter, req *http.Request) {
    log.Println(req.URL.Path)
    path := []byte(req.URL.Path)    
    w.Write(path)
}

func main() {
    http.HandleFunc("/", entry)
    err := http.ListenAndServe("localhost:10000", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

访问 url http://localhost:10000/a//b 时,默认 handlefunc()listenandserve() 使用的 defaultservermux 将其重定向到 /a/bzqbendc zqb,有效删除双斜杠。

servermux 的文档确实指定它“清理”url 请求:

servemux 还负责清理 url 请求路径,重定向任何包含 .或 .. 元素或重复斜杠到等效的、更简洁的 url。

但是如果我不想要怎么办?我有一个场景,其中 // != / 在我的 url 中。我可以找到另一个解决方案。但是有没有办法仍然使用 go 的“net/http”包,同时它不会像这样清理我的 url?最好尽可能少地重写。

(我可能会找到一个与 /// 不同的解决方案,因为我可能对 servermux 提供的其他功能感到满意(如果解决方案要求我使用另一个多路复用器),但现在我很好奇 go 的标准“net/http”包是否有解决方案。)


解决方案


使用 gorilla mux 使用 url 路由服务器。默认情况下,defaultsevemux 使用 2972​​33985,它针对各种不需要的字符修改 url。这就是当您使用 // 双斜杠时 url 发生变化的原因。

func clean(path string) string

如果您不想清理网址。 gorilla mux 提供了一个 skipclean() 方法,当设置为 true 时。它不会清理网址。

func (r *Router) SkipClean(value bool) *Router {
    r.skipClean = value
    return r
}

gorilla mux 的文档中提到 skipclean() 为:

今天关于《如何让 Go 的 net/http 包停止删除双斜杠?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>