Files
sousa-gecko/testing/web-platform/tests/fetch/range/resources/partial-script.py
T
Anne van Kesteren 4e5f94aeb8 Bug 2011026 [wpt PR 57225] - Fetch: blocking opaque 416 responses to range requests, a=testonly
Automatic update from web-platform-tests
Fetch: blocking opaque 416 responses to range requests

See https://github.com/whatwg/fetch/pull/1907 for context.

We use an image instead of JavaScript as JavaScript requires a 2xx status whereas images don't care.

Also remove a redundant null check from useStoredRangeResponse() and a redundant catch() elsewhere.

--

wpt-commits: e3661ee657a61122b3026e8eaaba31cbddd7a9a8
wpt-pr: 57225
2026-01-23 14:41:34 +00:00

42 lines
1.6 KiB
Python

"""
This generates a partial response containing valid JavaScript or image data.
"""
def main(request, response):
require_range = request.GET.first(b'require-range', b'')
pretend_offset = int(request.GET.first(b'pretend-offset', b'0'))
range_not_satisfiable = request.GET.first(b'range-not-satisfiable', b'')
content_type = request.GET.first(b'type', b'text/plain')
range_header = request.headers.get(b'Range', b'')
if require_range and not range_header:
response.set_error(412, u"Range header required")
response.write()
return
# 1x1 red PNG image (67 bytes)
png_data = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90wS\xde\x00\x00\x00\x0cIDATx\x9cc\xf8\xcf\xc0\x00\x00\x00\x03\x00\x01\x00\x18\xdd\x8d\xb4\x00\x00\x00\x00IEND\xaeB`\x82'
if content_type == b'image/png':
to_send = png_data
else:
to_send = b'self.scriptExecuted = true;'
length = len(to_send)
response.headers.set(b"Content-Type", content_type)
response.headers.set(b"Accept-Ranges", b"bytes")
response.headers.set(b"Cache-Control", b"no-cache")
response.headers.set(b"Content-Length", length)
if range_not_satisfiable:
response.status = 416
response.headers.set(b"Content-Range", b"bytes */%d" % (pretend_offset + length))
else:
response.status = 206
content_range = b"bytes %d-%d/%d" % (
pretend_offset, pretend_offset + length - 1, pretend_offset + length)
response.headers.set(b"Content-Range", content_range)
response.content = to_send