gpt4 book ai didi

http - Golang 反向代理以避免 SOP

转载 作者:IT王子 更新时间:2023-10-29 02:23:05 33 4
gpt4 key购买 nike

我目前正在开发一个 Web 应用程序(在 golang 中),它将用作其他内部应用程序(在 docker 容器中运行)的主要门户。这个 web 应用程序应该简单地提供一个 HTML 页面,其中导航栏位于顶部,页面的其余部分将是一个 IFrame。在导航栏上,我们有多个链接将更改 IFrame 的源。了解导航栏上的链接是动态创建的很重要。

我很快就遇到了 Iframe 无法显示其他内部应用程序的问题,因为同源策略会阻止所有内容。为了解决这个问题,我认为在 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 错误消息。我现在基本上有两个问题:

  • 这是正确的方法吗?或者有更好的方法吗?
  • 我不明白这里发生了什么。在我看来,请求将发送到我的应用程序,然后 HTML 将在响应中。浏览器注意到 iframe 并请求“/”。此 GET 请求到达我的应用程序,然后应转发到 google.com。响应应该返回到我的应用程序,然后从我的应用程序返回到客户端。这是正确的吗?

最佳答案

经过 fiddler 的一些调查后我能够发现指定的地址 ( http://google.com ) 发回了重定向响应。交易基本上是这样的:

客户端 -> MyProxy -> RealWebsite

客户端 <- Myproxy <- RealWebsite:位置 https://www.google.com

客户端 -> https://www.google.com

因此,客户端尝试在与同源策略冲突的 IFrame 中打开“https://www.google.com”。经过一番研究,我发现 this github issue .似乎 golang 反向代理没有转换“位置”-Header(这是一个重定向)。

我现在可以重写 Location-Header,但我决定使用现有的反向代理 (nginx)。

关于http - Golang 反向代理以避免 SOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38281971/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com