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

时间:2015-07-30 23:47:22

标签: python flask httpresponse wsgi

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

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

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

2 个答案:

答案 0 :(得分:4)

要回答你的修正问题,是的,有这样的回应。来自RFC 2616-section 10(强调补充):

  

10.2.5 204无内容

     

服务器已完成请求但不需要返回   entity-body,可能想要返回更新的元信息。该   响应可能包括新的或更新的元信息形式   实体标题,如果存在,应该与...相关联   要求的变体。

     

如果客户端是用户代理,则不应更改其文档视图   从导致请求发送的那个。这个回应是   主要是为了允许在没有的情况下进行动作的输入   但是,导致更改用户代理的活动文档视图   任何新的或更新的元信息应该应用于文档   目前在用户代理的活动视图中。

     

204响应绝不能包含消息体,因此总是如此   由标题字段后的第一个空行终止。

因此,从烧瓶中你可以做到这样的事情。请记住,响应不得包含邮件正文,因此您要发送回的任何数据都应放入Cookie中。

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

答案 1 :(得分:1)

不,这是不可能的。 Flask建立在Werkzeug上,它实现了WSGI规范。 WSGI周期需要发送对每个请求的响应。丢弃响应将需要在甚至HTTP的更低级别上控制TCP / IP连接。这超出了WSGI的范畴,因此超出了Flask的范围。

您可以返回错误代码或空体,但您必须返回某些内容

return ''  # empty body