HTTP_REFERER指向原始网站? (烧瓶)

时间:2017-03-20 20:04:15

标签: python flask

这是我的webapp的流程:

facebook.com  -->  mysite.com/route --> mysite.com/foo?uuid=X

这是mysite.com/route的代码:

@app.route('/route')
def route():
  return redirect(url_for('foo', uuid=some_uuid)) 

对于/foo,我有以下日志记录功能:

def log_request(route):
    @functools.wraps(route)
    def wrapper(*args, **kwargs):
      keys = ['HTTP_ACCEPT', 'HTTP_ACCEPT_ENCODING',
              'HTTP_X_FORWARDED_FOR',  'HTTP_REFERER',
              'HTTP_USER_AGENT', 'PATH_INFO',
              'QUERY_STRING', 'REMOTE_ADDR']
      dumpable = { k:request.environ.get(k, None) for k in keys }
      print(json.dumps(dumpable))
      return route(*args, **kwargs)
return wrapper 

我有@log_request的唯一地方是foo

@app.route('/foo')
@log_request
def foo():
    ... 

当我在Heroku中检查我的日志时,我看到以下内容被记录:

{"QUERY_STRING": "uuid=3de61bee07794323aaa5899bba2ef9e3",
"HTTP_ACCEPT_ENCODING": "gzip, deflate", "PATH_INFO": "/foo",
"HTTP_X_FORWARDED_FOR": "__REDACTED__", "REMOTE_ADDR": "__REDACTED__",
"HTTP_USER_AGENT": "__REDACTED__", "HTTP_ACCEPT":
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"HTTP_REFERER": "http://m.facebook.com"}

我的问题是,为什么HTTP_REFERER http://m.facebook.com?不应该是mysite.com/route吗?

1 个答案:

答案 0 :(得分:1)

redirect()会导致Flask向浏览器发送302 Found响应,并将Location标头设置为新网址。然后,浏览器发出请求以访问新位置。此时,Referer标题将指向前一个位置,即发出302重定向的任何位置。

要么不使用重定向(只需直接调用foo视图 ),要么将引荐来源记录在cookie或浏览器将传递给下一个的其他信息中URL。