Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Other Transfer-Encodings, such as Gzip, Compress, Deflate, etc #2

Closed
seanmonstar opened this issue Sep 3, 2014 · 13 comments
Closed

Comments

@seanmonstar
Copy link
Member

No description provided.

@reem
Copy link
Contributor

reem commented Sep 3, 2014

Compression specifically could be left up to downstream things to implement. Not sure this is the domain of an http library.

@seanmonstar
Copy link
Member Author

Looking through the spec, it does seem like its an optional thing, as opposed to chunked which the spec says a server MUST understand chunked to 1.1 compatibile.

@untitaker
Copy link
Contributor

Some servers send me a gzip-compressed response without me asking for it, so practically I must always be prepared for such responses.

Unfortunately the RFC's language isn't very clear what the server is supposed to do if no Accept-Encoding header is sent. From RFC 2616:

If no Accept-Encoding field is present in a request, the server MAY assume that the client will accept any content coding.

https://tools.ietf.org/html/rfc2616#section-14.3

From the newer RFC 7231:

A request without an Accept-Encoding header field implies that the user agent has no preferences regarding content-codings. Although this allows the server to use any content-coding in a response, it does not imply that the user agent will be able to correctly process all encodings.

https://tools.ietf.org/html/rfc7231#section-5.3.4

@untitaker
Copy link
Contributor

@seanmonstar
Copy link
Member Author

A header of "Accept-Encoding: identity" means the user agent is
specifically requesting no compression. Does that help your case?

On Sat, Jan 23, 2016, 11:22 AM Markus Unterwaditzer <
notifications@github.com> wrote:

See also
https://stackoverflow.com/questions/8364640/how-to-properly-handle-a-gzipped-page-when-using-curl


Reply to this email directly or view it on GitHub
#2 (comment).

@untitaker
Copy link
Contributor

Probably, though I'd still prefer if Hyper handled this transparently for me (even if behind a featureflag).

Would setting this as a default header (on Hyper's side) be acceptable?

@seanmonstar
Copy link
Member Author

I'm not so certain that this is a decision that hyper should default to. As you noticed in 7231, sending no header is valid, and implies no preference. If a user of hyper hasn't stated otherwise, I don't think we can assume a preference.

A higher level Client wrapper would probably be the place to be more opinionated, methinks.

@untitaker
Copy link
Contributor

This has bitten me again. This time a different library, @SimonSapin's kuchiki provides a parse_html().from_http(url) interface, but doesn't explicitly set a header. The result is a garbage DOM.

If a user of hyper hasn't stated otherwise, I don't think we can assume a preference.

If a user of hyper hasn't stated otherwise, I don't think we can assume they'd thought about it.

@seanmonstar
Copy link
Member Author

Again, does asking for identity fix the issue?

@untitaker
Copy link
Contributor

Sorry, it seems to be an issue with the server in this case.

EDIT: Yes, in the previous instance, setting Accept-Encoding: identity helped.

@SimonSapin
Copy link
Contributor

(@untitaker I’ve extended kuchiki’s from_http to also except an hyper::client::Response so that you can set headers and make the request yourself. In that case, the point of using it from_http instead of read_from with a Response as a generic std::io::Read is that it gets the charset from Content-Type, if any.)

untitaker added a commit to untitaker/rust-webicon that referenced this issue Mar 29, 2016
@Trolldemorted
Copy link

@seanmonstar is it possible to set the headers once per client, so that we don't have do add them with every request?

@seanmonstar
Copy link
Member Author

@Trolldemorted not in hyper. Such a feature does exist in reqwest, though!

@hyperium hyperium locked as resolved and limited conversation to collaborators Apr 23, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants