为了账号安全,请及时绑定邮箱和手机立即绑定

Web套接字连接中的Http重定向

Web套接字连接中的Http重定向

Go
四季花海 2021-04-28 17:17:43
我认为我最初的问题(参见下面的栏)太模糊了。我编造了以下愚蠢的例子,说明了我的意思。package mainimport (    "fmt"    "net/http"    "time")func main() {    http.HandleFunc("/redir", redirHandler)    http.HandleFunc("/", rootHandler)    _ = http.ListenAndServe("localhost:4000", nil)}func redirHandler(w http.ResponseWriter, r *http.Request) {    fmt.Fprint(w, "hello, this is redir which will host the foreign html page")}func rootHandler(w http.ResponseWriter, r *http.Request) {    fmt.Fprint(w, "hello, this is root")    // at some point "foreign webserver" sends me a complete    // html page.    // I want to serve this page at "/redir/", and I feel my    // best shot is to redirect to "/redir"    time.Sleep(2 * time.Second)    http.Redirect(w, r, "/redir/", http.StatusFound)}该代码不起作用,因为我无法重用w执行重定向。因此,在这种情况下是否可以重定向,例如通过另一个http包调用?我希望我已经说清楚了...提前致谢克里斯我正在以下配置中的“我的服务器”上工作[web browser client] -- [my server] -- [foreign webservice]“我的服务器”向“ Web浏览器客户端”提供以下内容func main() {    http.HandleFunc("/launch", launchHandler)    http.HandleFunc("/", rootHandler)    http.Handle("/socket", websocket.Handler(socketHandler))    err := http.ListenAndServe(listenAddr, nil)    if err != nil {        log.Fatal(err)    }}RootHandler将一个html页面写入“ Web浏览器客户端”,而socketHandler在“ Web浏览器客户端”和“我的服务器”之间建立一个websocket连接。来自“ Web浏览器客户端”的请求通过Web套接字连接到达,并由“我的服务器”处理,“我的服务器”与“外部Web服务”进行通信以确定响应。通常,“外部网络服务”会提供一些数据,“我的服务器”会使用这些数据来响应“网络浏览器客户端”。在某些情况下,“外国网络服务”以完整的 html 页面响应。我不确定如何将此类html页面传达给“网络浏览器客户端”到目前为止,我最好的猜测是对launchHandler执行一个http.Redirect(),以便launchHandler可以将从“外国Web服务器”获得的html页面写入“ Web浏览器客户端”。(关闭Web套接字连接时没有问题。)为此,我首先使用了rootHandler中的http.ResponseWriter,* http.Request作为httpRedirect的参数。这不起作用,并产生日志消息:“ http:多个响应。WriteHeader调用”对于如何解决这个问题,有任何的建议吗?也许我执行http.Redirect的方法是错误的;也许我应该获取其他http.ResponseWriter和/或* http.Request值。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信