On 21/04/2013 4:20 a.m., Alex Rousskov wrote:
On 04/20/2013 05:53 AM, Amos Jeffries wrote:
The Via header is one of the important headers for signalling end-to-end
path properties for an HTTP request and response.

Traditionally Squid has used it for forwarding loop detection and
prevention. However, it also carries the feature of relaying

This header is becoming important to relay promises end-to-end security
in the presence of HTTPS interception I would like your opinions on
removing the current "via off" configuration setting behaviour from
Squid. It is way too blunt a tool for the HTTP protocol
permitted/forbidden things regarding this header.
I am opposed to removing the functionality to delete, adjust, or not
emit any header, including Via.

NP: this is not removing ability. The header mangling directives offer these same semantics in a much more flexible and targetable way. I am only proposing removing or updating the sledgehammer directive.

There are many good reasons for sending correct Via, of course, but they
do not trump the necessity to shape the headers specially under special
circumstances. If we do not give admins official tools to sculpture
outgoing traffic, they will waste their and our time discussing lack of
those tools and adding those tools unofficially.

Let's focus on implementing correct, smart, and compliant proxy while
allowing an admin to adjust Squid behavior under special circumstances,
at their own risk.

If you want to add a second "--enable really bad HTTP violations"
./configure option and honor "via off" only if that option is enabled,
that may be an acceptable compromise. However, I question whether
deleting Via is really much worse than many other HTTP violations we allow.

It's about on par with ignore-private, ignore-auth, ignore_expect_100 and a few others regarding impact when things do go wrong. Practical risk is unknowable because it is the mechanism for detection and the amount of network breakage is completely unrecorded as a result of popular eliding.

Now to the actual "upgrade" part of your proposal:

So my proposal for now is to modify the "via" config option to toggle
whether or not Squid compacts a series of semantically identical Via
entries down to one opaque blob or not. Hops are considered identical if
their protocol name and version are identical.

For example:

     Via: 1.0 foo, 1.1 internal.example.com, 1.1 localhost.example.com
becomes
     Via: 1.0 foo, 1.1 example.com

Opinions?
Is that your definition of semantical entry equivalence or an HTTP
definition? Either way is fine, of course, but the difference affects
what configuration knobs this feature will need.

HTTPbis definition. "A proxy or gateway /MAY/ combine an ordered subsequence of Via header field entries into a single such entry if the entries have identical received-protocol values."

I'm thinking we avoid that by default since it will break forwarding-loop detection just as badly a dropping the header would. However "via compact" or similar would be compliant instead of "via off". As would "via transparent" with identical meaning as "forwarded_for transparent" for use on internal hierarchy proxies.

Is there a specific use case that you are trying to accommodate here or
are we discussing a feature that seems useful in general but is not
currently requested (and so the actual future use cases may require a
different functionality)?

I'm trying to improve HTTP compliance while retaining support for all the current use cases. IMO in a lot of cases being properly compliant will meet the need better than the current code.

Amos

Reply via email to