一只名叫tom的猫

也许使用自定义http.HandlerFunc会更容易:除了您的情况,您的 func 将是http.ServeFile唯一的,用于仅提供一个文件。参见例如“ Go Web Applications:Serving Static Files ”:在您的家庭处理程序下方添加以下内容 (见下文):http.HandleFunc("/static/", func(w http.ResponseWriter, r *http.Request) {   // do NOT do this. (see below)    http.ServeFile(w, r, r.URL.Path[1:])})这是使用net/http包的 ServeFile 函数来提供我们的内容。实际上,任何以/static/路径开头的请求都将由该函数处理。我发现为了正确处理请求我必须做的一件事是使用以下方法修剪前导“/”:r.URL.Path[1:]实际上,不要这样做。这在 Go 1.6 中是不可能的,正如sztanpet 评论的那样,提交 9b67a5d:如果提供的文件或目录名称是相对路径,则它相对于当前目录进行解释,并可能上升到父目录。如果提供的名称是根据用户输入构造的,则应在调用ServeFile.作为预防措施,ServeFile将拒绝r.URL.Path包含“ ..”路径元素的请求。这将防止以下“网址”:/../file/../..//../foo/..\\foo/file/a/file/a../file/a/../file/a\\..
0 0