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:
--
You received this message because you are subscribed to a topic in the Google Groups "golang-nuts" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/golang-nuts/Uvq-BlNLSOM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/4e914729-9d97-4822-83e6-6bceee907b2cn%40googlegroups.com.