2017-03-20 9 views
0

これは私のWebアプリケーションのための流れです:HTTP_REFERERは元のウェブサイトを指していますか? (フラスコ)

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

これは、コードはmysite.com/routeのための次のようになります。/fooについては

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

、私は以下のロギング機能を持っています:私は@log_request持っ

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 

唯一の場所は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ではありませんか?

+0

はい、 'redirect()'は*ブラウザ*に新しいリクエストを行うように要求するためです。 –

答えて

0

redirect()は、Locationヘッダーを新しいURLに設定して、Flaskが302 Found応答をブラウザに返すようにします。ブラウザは新しいの新しい場所への訪問要求を行います。その時点で、Refererヘッダーは以前の場所を指します。これは302リダイレクトが発行されたものです。どちらのリダイレクトを使用していない

(ちょうど直接あなたfooビューを呼び出す)、またはブラウザがあなたの次のURLに渡すということクッキーや情報の他の部分にリファラを記録。

関連する問題