0

我想在我的网站上嵌入一个本地托管的 iframe,但我不能,因为引荐来源网址策略设置为“strict-origin-when-cross-origin”。

在此处输入图像描述

iframe 的 src 来自一个旨在嵌入 iframe 的网站,因此来自 src 的响应标头没有限制。我也知道这一点,因为如果我将 src 的链接直接放入我的 iframe 中,如下所示:

 <iframe id="panoramic" style="border: 4px solid white" frameBorder="0" v-bind:src="https://momento360.com/e/u/47de8a9ca774487aa1f2bffb9c9fcc94?utm_campaign=embed&utm_source=other&heading=0&pitch=0&field-of-view=75&size=medium"></iframe>

它没有问题。问题是 iframe src 是反应式的(使用 Vue),所以当它尝试更新到新的 src 时,我的浏览器会因为我网站上的引荐来源网址政策而阻止它。我已经用默认为“no-referrer”的浏览器对此进行了测试,它会加载,但不幸的是,chrome 默认采用严格的推荐人策略。

我正在使用 Flask 来处理路由,所以我想有一种方法可以轻松地改变它,但我发现没有。我找到了Flask-Talisman,但这个扩展的默认设置非常严格,理想情况下我想要一种更轻量级的方式来改变这个策略。

这是我希望拥有无推荐人策略的页面的路由处理:

@app.route('/scene_build')
def sceneBuilder():
    resp = Response(render_template('scene_build.html', profile = session['userData']))
    resp.headers["Referrer-Policy"] = 'no-referrer'
    return resp
4

2 回答 2

1

如果要Referrer-Policy为所有请求设置标头,可以这样做:

from flask import Flask

app = Flask(__name__)

@app.after_request
def set_headers(response):
    response.headers["Referrer-Policy"] = 'no-referrer'
    return response

@app.route('/')
def index():
    return 'Hello world!'

if __name__ == '__main__':
    app.run()

如果要为特定端点设置标头:

from flask import Flask, make_response

app = Flask(__name__)

@app.route('/')
def index():
    response = make_response('Hello world!')
    response.headers["Referrer-Policy"] = 'no-referrer'
    return response

if __name__ == '__main__':
    app.run()

有关有效的推荐人策略,请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy

于 2021-02-25T19:55:04.647 回答
0

想通了这个问题。原来socketIO默认禁用cors,这就是为什么我不能以传统方式设置Referrer-Policy。我将 socketIO 实例化的参数更改为socketio = SocketIO(app, cors_allowed_origins="*")并且它可以工作。

于 2021-02-25T22:06:34.287 回答