Your answer was given here:
https://github.com/golang/go/issues/65078#issuecomment-1890419683
In other words:
- net/http handles HTTP
- go-proxyprotocol handles the proxy protocol
- you combine the two to get the behaviour you want
Orthogonal pieces which handle their own responsibilities are a Good Thing™
IMO.
If you want to wrap this up in a library which has the same API as net/http
but implements proxy protocol, you are free to do so (and publish it, if
you wish). However, there is a very high bar for putting functionality into
the core Go library, because the backwards compatibility promise means it
has to be supported forever.
> I have previously posted two issues on this topic, but neither has been
accepted
I think that answers your question.
On Monday 15 April 2024 at 17:47:24 UTC+1 HappyTobi wrote:
> Dear Gophers,
>
> I would like to bring to your attention.
> There is an “issue” with the Go standard implementation when handling HTTP
> requests that are extended by the proxy protocol v1 or v2.
>
> While the simple HTTP server works fine with regular requests, it fails
> when a proxy protocol is added.
>
>
> Example:
>
> Simple http server:
>
> *package* main
>
>
>
> *import* (
>
> "*fmt*"
>
> "*net/http*"
>
> )
>
>
>
> *func* hello(*w* http.ResponseWriter, *req* ***http.Request) {
>
> fmt.Fprintf(w, "*hello world**\n*")
>
> }
>
>
>
> *func* main() {
>
> http.HandleFunc("*/hello*", hello)
>
> http.ListenAndServe("*:8080*", *nil*)
>
> }
>
> The server is working fine when you do something like:
>
> curl -kv http://*localhost:8080/hello*
>
>
>
> But the implementation is failing when you add a proxy protocol (v1) to
> the tcp request.
>
> curl -kv *--*haproxy-protocol http://*localhost:8080/hello*
>
>
>
> The issue arises because the implementation fails to read the HTTP
> message, as the message starts with the proxy protocol.
> Go read request function:
> https://github.com/golang/go/blob/91c04826723a10f6778a935e743a34de81312489/src/net/http/request.go#L1068
>
>
> The proxy protocol is widely used, and it would be beneficial for the Go
> standard implementation to handle such requests.
>
>
>
> I have previously posted two issues on this topic, but neither has been
> accepted. I would like to open a discussion on this topic and work towards
> implementing a solution that could be merged into the Go standard library.
> Your input and feedback is more than welcome!
>
> Thank you all.
>
>
>
> Github issue links that I posted:
>
> net/http: Http Server (request) is not working with enabled Proxy Protocol
> · Issue #64365 · golang/go (github.com)
> <https://github.com/golang/go/issues/64365>
>
> proposal: net/tspsock: filter/interceptor - concept with default
> implementation for proxyprotocol (v1/v2) · Issue #65078 · golang/go
> (github.com) <https://github.com/golang/go/issues/65078>
>
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/4aa1edea-4c34-44ea-80fb-84743443f77en%40googlegroups.com.