Все,
Я могу захватывать заголовки запросов всякий раз, когда делается запрос к конечной точке, но мне было интересно, как захватывать заголовки запроса всякий раз, когда запрашивается файл stati c.
Например, всякий раз, когда делается запрос на получение изображения через эту конечную точку, я могу записать заголовки в файл .txt с меткой времени, как показано ниже.
https://<host_name>/img
Пример заголовков запроса:
============================
28/05/2020, 14:31:03
Request Headers:
Host: <host_name>
Connection: close
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,kn;q=0.8
X-Request-Id: 00a79a7f-84eb-4fb3-b949-76254a93a001
X-Forwarded-For: 157.49.191.87
X-Forwarded-Proto: https
X-Forwarded-Port: 443
Via: 1.1 vegur
Connect-Time: 0
X-Request-Start: 1590676263802
Total-Route-Time: 0
============================
Но когда кто-то напрямую обращается к объектам stati c следующим образом:
https://<host_name>/static/img/<img_name>.png
Как захватить заголовки запросов для stati c объекты при запросе напрямую без какого-либо маршрута или представления как указанная выше конечная точка?
В настоящее время я захватываю заголовки запросов, используя request.headers
в Flask. Моя функция для конечной точки img выглядит так:
@app.route('/img')
def img_func():
req_headers = request.headers
dir = "static"
full_path = os.path.join(dir, "logs")
filename = full_path +'/request_headers_img.txt'
if os.path.exists(filename):
append_write = 'a' # append if already exists
else:
append_write = 'w' # make a new file if not
now = datetime.datetime.now()
date_time = now.strftime("%d/%m/%Y, %H:%M:%S")
app_logs = open(filename, append_write)
app_logs.write("============================" + '\n')
app_logs.write(date_time + '\n')
app_logs.write("Request Headers: " + '\n' + str(req_headers))
app_logs.write("============================"+ '\n')
app_logs.close()
fn = os.path.join(dir, "img") + '/<file_name>.png'
return send_file(fn)
Когда я проверял некоторые онлайн-ссылки, кто-то упомянул об использовании request.path('static')
, но не уверен, как это реализовать и захватить заголовки запроса.
Еще одна вещь, о которой упоминалось там, что файлы stati c обслуживаются с веб-сервера, например Nginx
или Apache
, а не из приложения flask, если файлы stati c запрашиваются напрямую как я уже упоминал выше. Если да, есть ли способ захватить эти c заголовки запросов stati на уровне веб-сервера?
FYI: приложение создано с использованием Flask, Python 3 и развернуто в Heroku с использованием CI / CD из Github.
Любая помощь по этому поводу или если кто-то может указать на ресурсы, где я могу прочитать и реализовать это, будет очень полезным, ребята.
Заранее спасибо!