Sometimes in an app you need to use an embedded HTTP server to make HTML content work properly. In theory you could serve up content from the FileSystem directly: but then HTML5 localstorage, media, cookies, requests for resources from other directories misbehave. What does cross-domain mean on a filesystem?
In our app we run the excellent NanoHTTPD to serve up content from epub (zipped) files. Chrome has some (seemingly undocumented) requirements:
When using Java inputstreams this of course means using the skip method: be careful that needs to go in a loop because the skip method often does not skill all the bytes requested. We implemented range support in our EmbeddedHTTPD and RangeInputStream .
In our app we run the excellent NanoHTTPD to serve up content from epub (zipped) files. Chrome has some (seemingly undocumented) requirements:
- You must support HTTP range requests. You don't need to support multiple ranges: but you must implement returning of 206 partial content in response to a range request. Interestingly on Android 5.1 Chrome seems to test this by sending a range request for the first byte (0-1).
- You must give chrome a means of validating the file remains the same and hasn't changed: A strong (normal) etag works for this. Setting the last-modified header might work as well.
When using Java inputstreams this of course means using the skip method: be careful that needs to go in a loop because the skip method often does not skill all the bytes requested. We implemented range support in our EmbeddedHTTPD and RangeInputStream .