发送不改变用户当前页面的HTTP响应

3
我有一个 JavaScript 书签,可以在用户浏览其他网页(即不是我服务器上的页面)时向服务器(由 Flask 提供支持)发布信息。我不想通过我的服务器响应来劫持他们的会话而干扰用户的浏览。
我的初始想法是,我可以以某种方式抑制 Flask 的 HTTP 响应;防止它向客户端发送任何东西,这样他们就不会被神秘地重定向了。我希望可以通过视图的空返回来实现这一点。
然后我想到可能有一些 HTTP 响应,让客户端知道信息已经成功提交,但会让客户端留在当前页面。比如说一个标题值,像“这是您请求的结果,但您不应该改变当前的显示”?

你的客户会白白等待,你为什么要这样做呢? - njzk2
如果你强制让Flask这样做,浏览器最终会超时,因为它等待响应的时间太长了。 - kylieCatt
@nzjk2 - 这是一个临时解决方案。我正在使用JavaScript书签来将信息发送到服务器。此时,“客户端”浏览器在页面上,而我无法控制该页面。不是我的页面,并且我不想通过劫持用户会话来中断用户的浏览。稍后,我希望将此操作封装在插件中。 - user96
IanAuld - 请看我对nzjk2的回复。我正在寻找一种通过HTTP向服务器发送数据而不期望从服务器获得响应的方法。 - user96
1
你正在尝试解决什么问题? - Burhan Khalid
我最近看到了修改我的问题的建议。我不赞成所提出的更改,因为它们删除了我原始问题的具体情况 - HTTP通信和Flask之间的交互。我承认接受的答案并不依赖于Flask,但是我的使用Flask在引出这个问题方面起了关键作用。答案非常好,并适用于更大的社区,但问题属于Flask社区。 - user96
2个回答

5
为了回答你修改后的问题,是的,有这样的响应。来自RFC 2616-section 10(重点添加):
10.2.5 204无内容 服务器已经满足了请求但不需要返回实体正文,并且可能希望返回更新的元信息。响应可以包含新的或更新的元信息,以实体头的形式出现,如果存在,则应与请求的变量相关联。
如果客户端是用户代理,则不应从导致发送请求的文档视图更改其文档视图。此响应主要旨在允许进行操作的输入而不会导致对用户代理的活动文档视图进行更改,尽管任何新的或更新的元信息应该应用于当前在用户代理的活动视图中的文档。
204响应不能包括消息正文,因此始终由标题字段之后的第一行空行终止。
因此,从Flask中你可以像这样做。记住,响应不能包含消息正文,所以你想要发送回去的任何数据都应该放入cookie中。
@app.route('/')
def index():
    r = flask.Response()
    r.set_cookie("My important cookie", value=some_cool_value)
    return r, 204

1
Dannnno - 这正是我在寻找的。阅读了您的答案后,很明显我应该在重新构思我的问题后去查看RFC-2616文档。这解决了我在HTTP和Flask方面的问题。谢谢。 - user96

1
不,这是不可能的。Flask是建立在实现WSGI规范的Werkzeug之上的。WSGI周期要求对每个请求发送响应。放弃响应将需要对TCP/IP连接具有比HTTP更低的控制能力。这超出了WSGI的领域,因此也超出了Flask的领域。您可以返回错误代码或空主体,但必须返回一些东西。
return ''  # empty body

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接