首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang反向代理以避免SOP

Golang反向代理以避免SOP
EN

Stack Overflow用户
提问于 2016-07-09 12:48:52
回答 1查看 1.1K关注 0票数 1

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

我很快就遇到了一个问题,那就是Iframe无法显示其他内部应用程序,因为相同的原产地策略阻止了所有的内容。为了解决这个问题,我认为在golang中实现我自己的反向代理可能是个好主意。

代码语言:javascript
复制
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。响应应该返回到我的应用程序和我的应用程序,然后返回到客户机。这是正确的吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-15 10:16:41

在对费德勒进行了一些调查之后,我发现指定的地址(http://google.com)返回了一个重定向响应。交易基本上是这样的:

Client -> MyProxy -> RealWebsite

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

Client -> https://www.google.com

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

我现在可以重写位置头,但我决定使用现有的反向代理(nginx)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38281971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档