CDNs (mostly Azure Front Door) is using HTTP Range Requests to retrieve data from Origin when caching enabled.
Express should ignore Range: requests header when gzip compression is in place since Express is unable to respond a HTTP/206 compliant answer with the right computed Content-Range header in the response that is taking the compressed data length into account.
A fair compliant workaround is to, in that very case of compression where computing Content-Range values would be too complex, ignore client's Range: header in the request, and answer the whole compressed content in a HTTP/200 response.
Handling Range: headers is optional so answering a HTTP/200 is OK.
Answering a HTTP/206 with wrong Content-Range values is notOK.
Meanwhile another workaround is to disable compression and make CDN handle it, or disable CDN caching, however it would be fair to expect Express to return a compliant HTTP response in any case.
References:
RFC7233
Details and highlighting Express behavior:
https://github.com/DanielLarsenNZ/nodejs-express-range-headers
CDNs (mostly Azure Front Door) is using HTTP Range Requests to retrieve data from Origin when caching enabled.
Express should ignore
Range:requests header whengzipcompression is in place since Express is unable to respond aHTTP/206compliant answer with the right computedContent-Rangeheader in the response that is taking the compressed data length into account.A fair compliant workaround is to, in that very case of compression where computing
Content-Rangevalues would be too complex, ignore client'sRange:header in the request, and answer the whole compressed content in a HTTP/200 response.Handling
Range:headers is optional so answering aHTTP/200is OK.Answering a
HTTP/206with wrongContent-Rangevalues is notOK.Meanwhile another workaround is to disable compression and make CDN handle it, or disable CDN caching, however it would be fair to expect Express to return a compliant HTTP response in any case.
References:
RFC7233
Details and highlighting Express behavior:
https://github.com/DanielLarsenNZ/nodejs-express-range-headers