当前位置: 首页 > 知识库问答 >
问题:

react.js - React刷新浏览器报404?

许永年
2023-05-28

背景

前端由React构建。

后端使用Envoy作为流量网关,listeners的路由部分配置如下:

route_config:
  name: admin
  virtual_hosts:
    - name: admin
      domains: ["admin.example.com"]
      routes:
        - match:
            prefix: "/"
          route:
            cluster: admin

Envoy将下游请求代理到由Go编写的HTTP服务器,服务器内部路由的处理如下:

func main() {
    fs := http.FileServer(http.Dir("/path/to/build"))

    http.Handle("/", fs)

    if e := http.ListenAndServe(":80", nil); e != nil {
        panic(e)
    }
}

问题

只要带路径,刷新浏览器就报404。

疑惑

我知道是因为React Router的原因,也知道服务器为Nginx或者httpd时的解决方案。

但通过EnvoyGo部署时,Envoyprefix已经将所有路径的请求代理给了Go,而Gohttp.Handle也已经将所有路径的请求都一律返回静态文件,不论客户端实际请求的是什么路径,不应该都是得到静态文件吗?怎么会得到404呢?

想不通,跪求大佬指教,抱拳。

共有1个答案

宿建本
2023-05-28

修改HTTP服务器路由处理逻辑,问题解决。

func main() {
    http.HandleFunc(
        "/", func(w http.ResponseWriter, r *http.Request) {
            http.ServeFile(w, r, "/path/to/build")
        },
    )

    if e := http.ListenAndServe(":80", nil); e != nil {
        panic(e)
    }
}
 类似资料:
  • When webpack-dev-server is running it will watch your files for changes. When that happens it rebundles your project and notifies browsers listening to refresh. To trigger this behavior you need to ch

  • 问题内容: 我正在通过XAMPP开发基于Wordpress源代码的网站。有时,我更改了CSS代码,脚本或其他内容,但我注意到我的浏览器需要花费一些时间来应用修改。这导致我使用多个浏览器刷新一个浏览器,如果不应用新样式,则尝试第二个浏览器,而且总是这样。 有什么办法可以避免这个问题?有时我在更改代码时没有注意到先前的修改。 问题答案: 一般解决方案按Ctrl+ F5(或Ctrl+ Shift+ R)

  • 问题内容: 当我对CSS文件进行任何更改时,这些更改不会反映在浏览器中。我怎样才能解决这个问题? 问题答案: 对于 周 ?尝试打开样式表本身(通过在浏览器的地址栏中输入其地址),然后按。如果仍然无法刷新,则问题出在其他地方。 如果更新样式表并希望确保它在每个访问者的缓存中都得到刷新,那么一种非常流行的方法是将版本号添加为GET参数。这样,样式表会在必要时进行刷新,但刷新的频率不会超过此频率。

  • 我正在学习Spring Boot 2.0和React的全栈开发。身份验证和授权由JWT管理,除了我必须在刷新浏览器后重新登录之外,应用程序按预期工作。如何在浏览器刷新后维护JWT令牌?

  • 问题内容: 我想使用JavaScript禁用浏览器刷新。 当前,我正在使用,并且我不希望在用户刷新浏览器时调用它。 最好的方法是什么? 问题答案: 更新 最近的评论声称这在新的Chrome中不起作用…如jsFiddle所示,并在我的个人网站上进行了测试,此方法从Chrome版本开始仍然有效 顺便说一下,这在jQuery中非常容易: 附带说明:这只会禁用键盘上的f5按钮。要真正禁用刷新,您必须使用服

  • 本文向大家介绍如何刷新浏览器的应用缓存?相关面试题,主要包含被问及如何刷新浏览器的应用缓存?时的应答技巧和注意事项,需要的朋友参考一下 按F5或浏览器刷新按钮 浏览器会在请求中附加必要的缓存协商,但不允许浏览器直接使用本地缓存,它能够让 Last-Modified、ETag发挥效果,但是对Expires无效。 按Ctrl+F5或按Ctrl并点击刷新按钮 这种方式就是强制刷新,总会发起一个全新的请求