【问题标题】:Send HTTP response that doesn't change the user's current page发送不改变用户当前页面的 HTTP 响应
【发布时间】:2015-07-30 23:47:21
【问题描述】:

我有一个 JavaScript 小书签,当用户在其他页面(即我的服务器上没有一个页面)时,它会将信息发布到(Flask 驱动的)服务器。我不想通过使用我的服务器响应劫持他们的会话来中断用户的浏览。

我最初的想法是我可以以某种方式抑制来自 Flask 的 HTTP 响应;阻止它向客户端发送任何内容,这样它们就不会被神秘地重定向。我希望我可以通过从视图返回 null 来做到这一点。

然后我认为这可能是一些 HTTP 响应,让客户端知道信息已成功提交,但会将客户端留在当前页面上。假设有一个标头值,例如“这是您的请求的结果,但您不应该更改当前显示”?

【问题讨论】:

  • 您的客户将徒劳地等待,您为什么要这样做?
  • 如果你以某种方式强迫 Flask 这样做,浏览器最终会在厌倦等待响应时超时
  • @nzjk2 - 这是一个临时解决方案。我正在使用 Javascript 小书签向服务器获取信息。那时,“客户端”浏览器位于我无法控制的页面上。不是我的页面,我不想通过劫持他的会话来中断用户的浏览。后来,我期望把这个操作封装在一个插件中。
  • IanAuld - 请参阅上面我对 nzjk2 的回复。我正在寻找一种通过 http 向服务器发送数据而不期待服务器响应的方法。
  • 您要解决的问题是什么?

标签: python flask httpresponse wsgi


【解决方案1】:

要回答您修改后的问题,是的,有这样的回答。来自RFC 2616-section 10(强调):

10.2.5 204 无内容

服务器已完成请求,但不需要返回 实体主体,并且可能想要返回更新的元信息。这 响应可能包括新的或更新的元信息,形式为 entity-headers,如果存在应该与 请求的变体。

如果客户端是用户代理,它不应更改其文档视图 从导致发送请求的原因。这个回应是 主要目的是允许输入进行操作,而无需 导致用户代理的活动文档视图发生变化,尽管 任何新的或更新的元信息都应该应用于文档 当前在用户代理的活动视图中。

204 响应 不得包含消息正文,因此始终 由标题字段后的第一个空行终止。

因此,你可以从烧瓶中做这样的事情。请记住,响应不能包含消息正文,因此您要发回的任何数据都应放入 cookie。

@app.route('/')
def index():
    r = flask.Response()
    r.set_cookie("My important cookie", value=some_cool_value)
    return r, 204

【讨论】:

  • Dannnno - 这就是我要找的。阅读您的答案后,很明显我应该在重新提出我的问题后转到 RFC-2616 文档。这解决了我使用 HTTP 和 Flask 的问题。谢谢。
【解决方案2】:

不,这是不可能的。 Flask 建立在 Werkzeug 之上,它实现了 WSGI 规范。 WSGI 循环需要对每个请求发送响应。丢弃响应将需要对 TCP/IP 连接的控制,即使是 HTTP 的级别也要低得多。这在 WSGI 的域之外,因此在 Flask 的域之外。

您可以返回错误代码或空正文,但您必须返回 something

return ''  # empty body

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2022-11-04
    相关资源
    最近更新 更多