当前位置: 首页 > 面试题库 >

为什么需要使用http.StripPrefix访问我的静态文件?

越姚石
2023-03-14
问题内容

main.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此处的确切功能。

1)localhost:8080/static如果删除,为什么我无法访问http.StripPrefix

2)/static如果删除该功能,URL将映射到文件夹吗?


问题答案:

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"。我们希望网址以开头"/tmpfiles/"。因此,如果有人要求"/tempfiles/example.txt",我们希望服务器发送文件"/tmp/example.txt"

为了实现这一点,我们必须"/tmpfiles"从URL中删除,其余的将是与根文件夹相比的相对路径"/tmp",如果我们加入,则根目录将给出:

/tmp/example.txt


 类似资料:
  • 问题内容: 这是指帖子 ..无法回复或评论任何这样创建的新帖子。为什么是我的 发出警告-应该以静态方式访问静态字段MyUnits.MILLSECONDS吗?谢谢。 问题答案: 因为当您访问静态字段时,您应该在类(或本例中为枚举)上执行此操作。如 不在实例中 编辑 要解决 为什么这样 的问题:在Java中,当您将声明为时,就是说它是类的成员,而不是对象(因此为什么只有一个)。因此,在对象上访问它是没

  • 我从一个有静态方法的类(B)扩展了一个类(a),然后在另一个类(C)中,我创建了一个类(a)的实例,并且我能够访问类B的静态方法。为什么会这样? A类: B类: C类:

  • 问题内容: 我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似or 的函数;数组的数组在哪里? 如果有人可以直观地解释正在发生的事情,那将非常有帮助。 问题答案: 当您有一个Observable的结果是更多Observable时,可以使用flatMap。 如果您有一个由另一个可观察对象产生的可观察对象,则您不能直接过滤,缩小或映射它,因为您有一个可观察对象而不是数据。如果您生成一个可观

  • 问题内容: 我使用在互联网上找到的一些教程,整理了一些jQuery AJAX代码。我是jQuery新手,想学习如何做得更好。我有一个同事,他使用很多jQuery编写了一个漂亮的Web应用程序。 我在这里最困惑的是:为什么在引用我的Web方法的响应时必须使用“ .d”,它代表什么? 问题答案: 它是在ASP.NET 3.5的ASP.NET AJAX版本中添加的,以防止您容易受到此攻击:http :

  • 问题内容: 基数实际上是什么意思?我们为什么需要它? 问题答案: 您可能并不总是希望将整数解析为以10为底的数字,因此提供基数可以指定其他数字系统。 基数是一位数字的值数。十六进制为16。八进制为8,二进制为2,依此类推… 在该函数中,您可以执行一些操作来提示基数而不提供基数。如果用户输入的字符串与其中一个规则匹配,但没有明确规定,则这些方法也可能对您不利。例如:

  • 问题内容: 好的,假设我们有两个表,和。在评论中,我们有一列,它表示哪个用户键入了该特定评论。为什么我们需要将其指定为外键?如果我们不这样做,它将仍然有效。我们指定主键,因为据我所知,它可以使查询速度更快(我们只需要搜索一行,而当我们没有主键/索引时,则必须遍历所有行)。这只是一种良好的编码习惯吗? 问题答案: 使用外键时,您将获得: 数据的完整性 更快的查询。 用户: 用户ID: 1个 2个 3