我认为我最初的问题(参见下面的栏)太模糊了。我编造了以下愚蠢的例子,说明了我的意思。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
提交
取消