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 golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/6826556b-e73d-4888-b8ef-e6d8ab582da2n%40googlegroups.com.

Reply via email to