Fix WEBrick range requests for local video playback
WEBrick's not_modified? treats a Range request's If-Range header like If-None-Match, replying 304 with no body instead of 206 with the requested bytes. Browsers rely on this to fetch a video's trailing moov atom, so jekyll serve was breaking playback for videos recorded with metadata at the end of the file. Dev-server-only; production is unaffected since it isn't served by WEBrick. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>main
parent
42de227b70
commit
25fa5f3c2c
@ -0,0 +1,16 @@
|
|||||||
|
# Dev-server-only fix: WEBrick's FileHandler#not_modified? treats a Range
|
||||||
|
# request's If-Range header the same as If-None-Match, replying 304 (no body)
|
||||||
|
# instead of 206 with the requested bytes. Browsers rely on ranged requests
|
||||||
|
# (with If-Range) to fetch a video's trailing moov atom when seeking/loading
|
||||||
|
# metadata, so this breaks video playback under `jekyll serve`.
|
||||||
|
# See https://github.com/ruby/webrick/blob/master/lib/webrick/httpservlet/filehandler.rb
|
||||||
|
#
|
||||||
|
require 'webrick'
|
||||||
|
|
||||||
|
module WebrickRangeFix
|
||||||
|
def not_modified?(req, res, mtime, etag)
|
||||||
|
req['Range'] ? false : super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
WEBrick::HTTPServlet::DefaultFileHandler.prepend(WebrickRangeFix)
|
||||||
Loading…
Reference in New Issue