Hi Gophers!

I ended up implementing a package for parsing the header. It didn't seem 
like there was anything else purpose-built for it:

* https://github.com/theckman/httpforwarded

Any feedback on the code, or the project in general, is welcome.

Cheers!
-Tim

On Saturday, October 8, 2016 at 12:17:27 PM UTC-7, Tim Heckman wrote:
>
> Hey Gophers!
>
> I'm working on a small project where I'm looking to support the 
> "Forwarded" header as defined in RFC-7239[1]. For those unfamiliar, it's a 
> standardization and unification of the "X-Forwarded-For" and 
> "X-Forwarded-Proto" headers, among others. The simplest version of the 
> header looks like the following:
>
> Forwarded: for=192.0.2.1; by=192.0.2.2; proto=http
>
> My initial (naïve) thought was that I could use the 
> mime.ParseMediaType()[2] function to parse the value of the header. This 
> results in an error because that function is only designed to parse things 
> like the "Content-Disposition" header (i.e., things that have a media-type 
> before the key=value parameters).
>
> Reading RFC-7239 further, it becomes quite apparent that more complex 
> header values are possible. You can not only have multiple Forwarded 
> headers, but you can also have multiples of the key=value parameters within 
> a single header-value. This means even the parameter parsing code of the 
> mime.ParseMediaType() function isn't compatible if the request has the 
> following (notice the comma in line 2):
>
> Forwarded: for=192.0.2.42; proto=http
> Forwarded: for=192.0.2.1, for=64.72.88.33
>
> At the time of writing, RFC-7239 is in the Proposed Standard status 
> (meaning it's ripe for implementation support). I've been doing some 
> digging, and it doesn't seem like the stdlib of Go is capable of parsing 
> this header in a meaningful way. Likewise, it doesn't look like anyone has 
> tackled parsing this header as a third-party package.
>
> I wouldn't want to duplicate effort, so does anyone know if someone has 
> built a package for parsing this header?
> Do you think it's a good idea to open an issue on the Go project to 
> inquire about implementing a parser, in the "mime" package, that's capable 
> of extracting the parameters from all "Forwarded" header values of a 
> request? Is this a better fit for a third-party package?
>
> Cheers!
> -Tim
>
> [1] https://tools.ietf.org/html/rfc7239 
> [2] https://golang.org/pkg/mime/#ParseMediaType
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to