我目前正在开发一个Web应用程序(在golang中),它将用作其他内部应用程序的主要门户(在docker容器中运行)。此Web应用程序应该只提供一个HTML页面,其中导航栏位于顶部,页面的其余部分将是IFrame。在导航栏上,我们有多个链接,这些链接将更改IFrame的来源。重要的是要知道导航栏上的链接是动态创建的。
我很快就遇到了由于Same-Origin-Policy阻止所有内容而无法显示其他内部应用程序的问题。为了解决这个问题,我认为在golang中实现我自己的反向代理可能是个好主意。
package main
import (
"fmt"
"net/http"
"net/http/httputil"
"net/url"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "<html><body><iframe src=\"/\" width=\"100%\" height=\"100%\"/></body></html>")
}
func proxyHandle(r *http.Request) {
r.Host = "google.com"
r.URL.Host = r.Host
r.URL.Scheme = "http"
}
func main() {
proxy := httputil.NewSingleHostReverseProxy(&url.URL{
Scheme: "http",
Host: "google.com",
})
proxy.Director = proxyHandle
http.Handle("/", proxy)
http.HandleFunc("/index", handler)
http.ListenAndServe(":8080", nil)
}
我仍然收到SOP错误消息。我现在基本上有两个问题:
答案 0 :(得分:0)
使用fiddler进行一些调查后,我发现指定的地址(http://google.com)会发回重定向响应。交易基本上是这样的:
客户 - &gt; MyProxy - &gt; RealWebsite
客户&lt; - Myproxy&lt; - RealWebsite:位置https://www.google.com
客户 - &gt; https://www.google.com
因此,客户试图打开&#34; https://www.google.com&#34;在与同源政策发生冲突的IFrame中。经过一些研究,我发现了this github issue。似乎golang反向代理不会转换&#34;位置&#34; -Header(这是一个重定向)。
我现在可以重写Location-Header但我决定使用现有的反向代理(nginx)。