Fix issues with headers

This commit is contained in:
Mukhtar Akere
2025-08-05 04:39:03 +01:00
parent d0ae839617
commit 40755fbdde
3 changed files with 30 additions and 31 deletions

View File

@@ -463,31 +463,30 @@ func (h *Handler) handleGet(w http.ResponseWriter, r *http.Request) {
return
}
err, ranged := file.StreamResponse(w, r)
// Check if this will be a range request before streaming
isRangeRequest := r.Header.Get("Range") != ""
if err != nil {
// Write status headers before streaming starts
if isRangeRequest {
w.WriteHeader(http.StatusPartialContent)
} else {
w.WriteHeader(http.StatusOK)
}
if err := file.StreamResponse(w, r); err != nil {
var streamErr *streamError
if errors.As(err, &streamErr) {
// Handle client disconnections silently (just debug log)
if errors.Is(streamErr.Err, context.Canceled) || errors.Is(streamErr.Err, context.DeadlineExceeded) || streamErr.IsClientDisconnection {
return
}
if streamErr.StatusCode > 0 {
http.Error(w, streamErr.Error(), streamErr.StatusCode)
return
}
} else {
// Generic error
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
// For other errors, we can't send HTTP error response since headers are already written
h.logger.Error().Err(streamErr.Err).Str("file", file.name).Msg("Stream error after headers written")
return
}
} else {
if ranged {
// If the file was served as a ranged request, return a 206 status code
w.WriteHeader(http.StatusPartialContent)
} else {
w.WriteHeader(http.StatusOK)
// Generic error - can't send HTTP error response since headers are already written
h.logger.Error().Err(err).Str("file", file.name).Msg("Generic stream error after headers written")
return
}
}
return