@@ -314,6 +314,13 @@ func (rp *reverseProxy) serveFromCache(s *scope, srw *statResponseWriter, req *h
314314
315315 // proxy request and capture response along with headers to [[BufferedResponseWriter]]
316316 rp .proxyRequest (s , bufferedRespWriter , srw , req )
317+
318+ contentEncoding := bufferedRespWriter .GetCapturedContentEncoding ()
319+ contentType := bufferedRespWriter .GetCapturedContentType ()
320+ contentLength := bufferedRespWriter .GetCapturedContentLength ()
321+ reader := bufferedRespWriter .Reader ()
322+ contentMetadata := cache.ContentMetadata {Length : contentLength , Encoding : contentEncoding , Type : contentType }
323+
317324 if bufferedRespWriter .StatusCode () != http .StatusOK || s .canceled {
318325 // Do not cache non-200 or cancelled responses.
319326 // Restore the original status code by proxyRequest if it was set.
@@ -327,22 +334,20 @@ func (rp *reverseProxy) serveFromCache(s *scope, srw *statResponseWriter, req *h
327334 if err = userCache .Fail (key ); err != nil {
328335 log .Errorf ("%s: %s; query: %q" , s , err , q )
329336 }
330- err = RespondWithoutData (srw )
337+
338+ err = RespondWithData (srw , reader , contentMetadata , 0 * time .Second , bufferedRespWriter .StatusCode ())
331339 if err != nil {
332- log .Errorf ("%s: %s; query: %q - failed to put response in the cache" , s , err , q )
340+ err = fmt .Errorf ("%s: %w; query: %q" , s , err , q )
341+ respondWith (srw , err , http .StatusInternalServerError )
342+ return
333343 }
334344 } else {
335345 cacheMiss .With (labels ).Inc ()
336346 log .Debugf ("%s: cache miss" , s )
337- contentEncoding := bufferedRespWriter .GetCapturedContentEncoding ()
338- contentType := bufferedRespWriter .GetCapturedContentType ()
339- contentLength := bufferedRespWriter .GetCapturedContentLength ()
340- reader := bufferedRespWriter .Reader ()
341347
342348 // we create this buffer to be able to stream data both to cache as well as to an end user
343349 var buf bytes.Buffer
344350 tee := io .TeeReader (reader , & buf )
345- contentMetadata := cache.ContentMetadata {Length : contentLength , Encoding : contentEncoding , Type : contentType }
346351 expiration , err := userCache .Put (tee , contentMetadata , key )
347352 if err != nil {
348353 log .Errorf ("%s: %s; query: %q - failed to put response in the cache" , s , err , q )
0 commit comments