diff --git a/_source/_plugins/webrick_range_fix.rb b/_source/_plugins/webrick_range_fix.rb new file mode 100644 index 0000000..e25dcda --- /dev/null +++ b/_source/_plugins/webrick_range_fix.rb @@ -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)