mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-02-05 00:15:51 +01:00
optimize caching of image data from api
This commit is contained in:
parent
bc0206de9d
commit
91539de3ff
@ -81,11 +81,13 @@ http {
|
|||||||
add_header Access-Control-Expose-Headers 'Server,range,Content-Length,Content-Range';
|
add_header Access-Control-Expose-Headers 'Server,range,Content-Length,Content-Range';
|
||||||
add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS';
|
add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS';
|
||||||
add_header Access-Control-Allow-Origin '*';
|
add_header Access-Control-Allow-Origin '*';
|
||||||
expires -1;
|
add_header Cache-Control "no-store";
|
||||||
|
expires off;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /stream/ {
|
location /stream/ {
|
||||||
add_header 'Cache-Control' 'no-cache';
|
add_header Cache-Control "no-store";
|
||||||
|
expires off;
|
||||||
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
|
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
|
||||||
add_header 'Access-Control-Allow-Credentials' 'true';
|
add_header 'Access-Control-Allow-Credentials' 'true';
|
||||||
add_header 'Access-Control-Expose-Headers' 'Content-Length';
|
add_header 'Access-Control-Expose-Headers' 'Content-Length';
|
||||||
@ -170,7 +172,20 @@ http {
|
|||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location ~* /api/(.*\.(jpg|jpeg|png)$) {
|
||||||
|
add_header 'Access-Control-Allow-Origin' '*';
|
||||||
|
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
|
||||||
|
proxy_pass http://frigate_api/$1;
|
||||||
|
proxy_pass_request_headers on;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
location /api/ {
|
location /api/ {
|
||||||
|
add_header Cache-Control "no-store";
|
||||||
|
expires off;
|
||||||
|
|
||||||
add_header 'Access-Control-Allow-Origin' '*';
|
add_header 'Access-Control-Allow-Origin' '*';
|
||||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
|
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
|
||||||
proxy_pass http://frigate_api/;
|
proxy_pass http://frigate_api/;
|
||||||
@ -180,11 +195,11 @@ http {
|
|||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
add_header Cache-Control "no-cache";
|
add_header Cache-Control "no-store";
|
||||||
|
expires off;
|
||||||
|
|
||||||
location ~* \.(?:js|css|svg|ico|png)$ {
|
location /assets/ {
|
||||||
access_log off;
|
access_log off;
|
||||||
expires 1y;
|
expires 1y;
|
||||||
add_header Cache-Control "public";
|
add_header Cache-Control "public";
|
||||||
|
@ -318,6 +318,8 @@ def event_thumbnail(id):
|
|||||||
response.headers["Content-Type"] = "image/jpeg"
|
response.headers["Content-Type"] = "image/jpeg"
|
||||||
if event_complete:
|
if event_complete:
|
||||||
response.headers["Cache-Control"] = "private, max-age=31536000"
|
response.headers["Cache-Control"] = "private, max-age=31536000"
|
||||||
|
else:
|
||||||
|
response.headers["Cache-Control"] = "no-store"
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
@ -350,15 +352,18 @@ def label_thumbnail(camera_name, label):
|
|||||||
|
|
||||||
response = make_response(jpg.tobytes())
|
response = make_response(jpg.tobytes())
|
||||||
response.headers["Content-Type"] = "image/jpeg"
|
response.headers["Content-Type"] = "image/jpeg"
|
||||||
|
response.headers["Cache-Control"] = "no-store"
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/events/<id>/snapshot.jpg")
|
@bp.route("/events/<id>/snapshot.jpg")
|
||||||
def event_snapshot(id):
|
def event_snapshot(id):
|
||||||
download = request.args.get("download", type=bool)
|
download = request.args.get("download", type=bool)
|
||||||
|
event_complete = False
|
||||||
jpg_bytes = None
|
jpg_bytes = None
|
||||||
try:
|
try:
|
||||||
event = Event.get(Event.id == id, Event.end_time != None)
|
event = Event.get(Event.id == id, Event.end_time != None)
|
||||||
|
event_complete = True
|
||||||
if not event.has_snapshot:
|
if not event.has_snapshot:
|
||||||
return "Snapshot not available", 404
|
return "Snapshot not available", 404
|
||||||
# read snapshot from disk
|
# read snapshot from disk
|
||||||
@ -391,6 +396,10 @@ def event_snapshot(id):
|
|||||||
|
|
||||||
response = make_response(jpg_bytes)
|
response = make_response(jpg_bytes)
|
||||||
response.headers["Content-Type"] = "image/jpeg"
|
response.headers["Content-Type"] = "image/jpeg"
|
||||||
|
if event_complete:
|
||||||
|
response.headers["Cache-Control"] = "private, max-age=31536000"
|
||||||
|
else:
|
||||||
|
response.headers["Cache-Control"] = "no-store"
|
||||||
if download:
|
if download:
|
||||||
response.headers[
|
response.headers[
|
||||||
"Content-Disposition"
|
"Content-Disposition"
|
||||||
@ -606,6 +615,7 @@ def latest_frame(camera_name):
|
|||||||
)
|
)
|
||||||
response = make_response(jpg.tobytes())
|
response = make_response(jpg.tobytes())
|
||||||
response.headers["Content-Type"] = "image/jpeg"
|
response.headers["Content-Type"] = "image/jpeg"
|
||||||
|
response.headers["Cache-Control"] = "no-store"
|
||||||
return response
|
return response
|
||||||
else:
|
else:
|
||||||
return "Camera named {} not found".format(camera_name), 404
|
return "Camera named {} not found".format(camera_name), 404
|
||||||
|
Loading…
Reference in New Issue
Block a user