mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-19 07:33:20 +00:00
RequestServer: Issue a network request for failed cached responses
If transferring a cached response body fails for any reason, we will now issue a network request instead of failing the request outright. The catch here is that we will have already transferred the response code and headers to the client, and potentially some of the body. So we attempt to only request the remaining data over the network using a range request. This feels a bit sketchy, but this is also how Chromium behaves. However, the server may or may not support range requests. If they do, we can expect an HTTP 206 response with the bytes we need. If not, we will receive an HTTP 200 (assuming the request succeeded), along with the entire object's body. In this case, we also behave like Chromium, and internally drop number of bytes we had already transferred.
This commit is contained in:
parent
fc9233f198
commit
9b8f6b8108
Notes:
github-actions[bot]
2025-10-16 13:07:54 +00:00
Author: https://github.com/trflynn89
Commit: 9b8f6b8108
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6487
Reviewed-by: https://github.com/gmta
3 changed files with 112 additions and 26 deletions
|
@ -56,6 +56,12 @@ private:
|
|||
virtual void websocket_close(i64 websocket_id, u16, ByteString) override;
|
||||
virtual Messages::RequestServer::WebsocketSetCertificateResponse websocket_set_certificate(i64, ByteString, ByteString) override;
|
||||
|
||||
struct ResumeRequestForFailedCacheEntry {
|
||||
size_t start_offset { 0 };
|
||||
int writer_fd { 0 };
|
||||
};
|
||||
void issue_network_request(i32 request_id, ByteString, URL::URL, HTTP::HeaderMap, ByteBuffer, Core::ProxyData, Optional<ResumeRequestForFailedCacheEntry> = {});
|
||||
|
||||
HashMap<i32, RefPtr<WebSocket::WebSocket>> m_websockets;
|
||||
|
||||
struct ActiveRequest;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue