Uploaded image for project: 'RESTEasy'
  1. RESTEasy
  2. RESTEASY-1094

Content-Range header not sent when the input Range is the entire file length

    Details

      Description

      I'm trying to use the Content-Range feature implemented by the https://issues.jboss.org/browse/RESTEASY-886 and patched by https://issues.jboss.org/browse/RESTEASY-897 to to serve videos to iOS devices via a JAX-RS ReST call.

      While testing, I noticed that the videos did not play. After some low level tracing I realized that this behaviour is due to the fact that a request with a range like this:

      Range: bytes=0-nnnnn

      where nnnnn is the file size - 1 does not properly return the Content-Range and Content-Length header.

      Looking at the source code in org.jboss.resteasy.plugins.providers.FileProvider, it seems to me that the if block at line 178 should not be there.

      if (begin == 0 && end + 1 >= fileSize)

      { writeIt(uploadFile, entityStream); return; }

      This block falls back to sending the file content chunked and without the appropriate headers.

      To test my theory, I removed the block, patched the jar and the videos are now playing properly in mobile Safari.

      To summarize, I think that any Range requests with a valid range should be answered as required, with the data and Content-Range and Content-Length headers. The final fix may of course be more involved.

        Gliffy Diagrams

          Attachments

            Activity

              People

              • Assignee:
                bill.burke Bill Burke
                Reporter:
                baciuv Valentin Baciu
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: