Comments (6)
Thanks a lot for the info. This did turn out to be a server-specific issue due to User-Agent 😅
from ureq.
If you send accept-encoding: identity
and the server responds with gzip, is it not the server that failed to obey the request header?
ureq does not double check the server fulfils the accept-encoding
, and whether it should can be debated, but from your description i'm a bit unclear of whether there's an outright bug here.
It sounds like you describe this:
ureq -> send accept-encoding: identity -> server
ureq <- sends gzipped content back <- server
from ureq.
To be clear, there are two separate pairs of headers:
Accept-Encoding: https://tools.ietf.org/html/rfc7231#section-5.3.4
Content-Encoding: https://tools.ietf.org/html/rfc7231#section-3.1.2.2
TE: https://tools.ietf.org/html/rfc7230#section-4.3
Transfer-Encoding: https://tools.ietf.org/html/rfc7230#section-3.3.1
Both Content-Encoding and Transfer-Encoding have a "gzip" option.
Also worth noting:
https://tools.ietf.org/html/rfc7230#page-13
For example, an
origin server might disregard the contents of a received
Accept-Encoding header field if inspection of the User-Agent header
field indicates a specific implementation version that is known to
fail on receipt of certain content codings.
from ureq.
If you send accept-encoding: identity and the server responds with gzip, is it not the server that failed to obey the request header?
I guess the issue is that I am unable to reproduce this behavior with the server in question when I'm testing with curl or wget. I see that it's always respected. When running with ureq, providing the same headers, the response to the GET request is always gzipped and chunked, when I want neither, and when I have specified 'identity' in Accept-Encoding and Transfer-Encoding. I believe additional headers are causing this but haven't yet discovered where they are being added. There doesn't seem to be an easy way to print out the traffic in ureq at the moment, perhaps modifying send_prelude to see exactly what is being sent is an option.
I ended up switching to another solution so I'm not sure I will have time to follow up. Please feel free to close if you think this is a server issue. Thanks for the quick responses!
from ureq.
I guess the issue is that I am unable to reproduce this behavior with the server in question when I'm testing with curl or wget. I see that it's always respected. When running with ureq, providing the same headers, the response to the GET request is always gzipped and chunked
If you want to share the name of the server, and the code you used, I'd be curious to check this out. The main thing that occurs to me is that the server might be detecting certain User-Agent strings and changing behavior based on that; you could try setting the User-Agent to match curl.
I have specified 'identity' in Accept-Encoding and Transfer-Encoding
What happens if you specify neither?
BTW, you probably want to specify identity
in TE rather than Transfer-Encoding. And the server is allowed to returned chunked encoding regardless; chunked encoding support is mandatory in HTTP.
from ureq.
from ureq.
Related Issues (20)
- [Bug] In some case return empty "Content-Length" response header HOT 3
- Timeout not working when having packet losses HOT 1
- Support Multipart Forms HOT 1
- Timeout not always respected HOT 5
- Invalid transformation to http::Response<Vec<u8>> for non utf8 response bodies HOT 3
- Example of requesting a continuous stream HOT 1
- Timeout not taking in consideration TimeoutConnect HOT 2
- ureq 2.9.3 fails to compile with errors in `hoot` HOT 3
- `ureq` 2.9.3 compilation fails due to `hoot` requiring rustc 1.65 HOT 4
- Keep-alive is disabled when using SOCKS HOT 1
- Update requirement of `url=2.3.1` HOT 3
- hootbin is a required dependency HOT 2
- Stream panics in drop during test
- Redirect history not available HOT 2
- Add support for configuring default headers in AgentBuilder HOT 1
- Potential to modify ordering for IS_TEST in lib module HOT 1
- Change `send_json` `data` argument HOT 4
- Add `Error::as_response` HOT 3
- Middleware cannot modify query string parameters? HOT 2
- Decide what to do about rustls defaulting to aws-lc-rs instead of ring HOT 12
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ureq.