Skip to content

Handle the infamous raw deflate response from old servers #2128

Description

@jimmywarting

Bug Description

Something node-fetch and browser could handle was the infamous raw deflate response from old servers
basically if the coding is either: coding === 'deflate' || coding === 'x-deflate'
then read the first byte. if it match chunk[0] & 0x0F) === 0x08 then use zlib.createInflate() otherwise use zlib.createInflateRaw()

Reproducible By

You already have a test for it here:

xit('should decompress deflate raw response from old apache server', () => {
const url = `${base}deflate-raw`
return fetch(url).then(res => {
expect(res.headers.get('content-type')).to.equal('text/plain')
return res.text().then(result => {
expect(result).to.be.a('string')
expect(result).to.equal('hello world')
})
})
})

Expected Behavior

Additional context

Relevant part that needs fixing:

undici/lib/fetch/index.js

Lines 2018 to 2019 in 51fa0fe

} else if (coding === 'deflate') {
decoders.push(zlib.createInflate())

how node-fetch solved it:
https://github.com/node-fetch/node-fetch/blob/7b86e946b02dfdd28f4f8fca3d73a022cbb5ca1e/src/index.js#L314-L350

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions