Merge branch 'cowboy-streaming' into 'develop'
Allow Cowboy to stream the response instead of chunk it See merge request pleroma/pleroma!4138
This commit is contained in:
commit
bf8b251dc1
1
changelog.d/cowboy-stream-chunked.fix
Normal file
1
changelog.d/cowboy-stream-chunked.fix
Normal file
@ -0,0 +1 @@
|
|||||||
|
Restore Cowboy's ability to stream MediaProxy responses without Chunked encoding.
|
@ -8,7 +8,7 @@ defmodule Pleroma.ReverseProxy do
|
|||||||
~w(if-unmodified-since if-none-match) ++ @range_headers
|
~w(if-unmodified-since if-none-match) ++ @range_headers
|
||||||
@resp_cache_headers ~w(etag date last-modified)
|
@resp_cache_headers ~w(etag date last-modified)
|
||||||
@keep_resp_headers @resp_cache_headers ++
|
@keep_resp_headers @resp_cache_headers ++
|
||||||
~w(content-type content-disposition content-encoding) ++
|
~w(content-length content-type content-disposition content-encoding) ++
|
||||||
~w(content-range accept-ranges vary)
|
~w(content-range accept-ranges vary)
|
||||||
@default_cache_control_header "public, max-age=1209600"
|
@default_cache_control_header "public, max-age=1209600"
|
||||||
@valid_resp_codes [200, 206, 304]
|
@valid_resp_codes [200, 206, 304]
|
||||||
@ -180,6 +180,7 @@ defmodule Pleroma.ReverseProxy do
|
|||||||
result =
|
result =
|
||||||
conn
|
conn
|
||||||
|> put_resp_headers(build_resp_headers(headers, opts))
|
|> put_resp_headers(build_resp_headers(headers, opts))
|
||||||
|
|> streaming_compat
|
||||||
|> send_chunked(status)
|
|> send_chunked(status)
|
||||||
|> chunk_reply(client, opts)
|
|> chunk_reply(client, opts)
|
||||||
|
|
||||||
@ -417,4 +418,17 @@ defmodule Pleroma.ReverseProxy do
|
|||||||
|
|
||||||
@cachex.put(:failed_proxy_url_cache, url, true, ttl: ttl)
|
@cachex.put(:failed_proxy_url_cache, url, true, ttl: ttl)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# When Cowboy handles a chunked response with a content-length header it streams
|
||||||
|
# over HTTP 1.1 instead of chunking. Bandit cannot stream over HTTP 1.1 so the header
|
||||||
|
# must be stripped or it breaks RFC compliance for Transfer Encoding: Chunked. RFC9112§6.2
|
||||||
|
#
|
||||||
|
# HTTP2 is always streamed for all adapters.
|
||||||
|
defp streaming_compat(conn) do
|
||||||
|
with Phoenix.Endpoint.Cowboy2Adapter <- Pleroma.Web.Endpoint.config(:adapter) do
|
||||||
|
conn
|
||||||
|
else
|
||||||
|
_ -> delete_resp_header(conn, "content-length")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user