headers_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package http_test
  2. import (
  3. "bufio"
  4. "net/http"
  5. "strings"
  6. "testing"
  7. . "v2ray.com/core/common/protocol/http"
  8. . "v2ray.com/ext/assert"
  9. )
  10. func TestParseXForwardedFor(t *testing.T) {
  11. assert := With(t)
  12. header := http.Header{}
  13. header.Add("X-Forwarded-For", "129.78.138.66, 129.78.64.103")
  14. addrs := ParseXForwardedFor(header)
  15. assert(len(addrs), Equals, 2)
  16. assert(addrs[0].String(), Equals, "129.78.138.66")
  17. assert(addrs[1].String(), Equals, "129.78.64.103")
  18. }
  19. func TestHopByHopHeadersRemoving(t *testing.T) {
  20. assert := With(t)
  21. rawRequest := `GET /pkg/net/http/ HTTP/1.1
  22. Host: golang.org
  23. Connection: keep-alive,Foo, Bar
  24. Foo: foo
  25. Bar: bar
  26. Proxy-Connection: keep-alive
  27. Proxy-Authenticate: abc
  28. Accept-Encoding: gzip
  29. Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7
  30. Cache-Control: no-cache
  31. Accept-Language: de,en;q=0.7,en-us;q=0.3
  32. `
  33. b := bufio.NewReader(strings.NewReader(rawRequest))
  34. req, err := http.ReadRequest(b)
  35. assert(err, IsNil)
  36. assert(req.Header.Get("Foo"), Equals, "foo")
  37. assert(req.Header.Get("Bar"), Equals, "bar")
  38. assert(req.Header.Get("Connection"), Equals, "keep-alive,Foo, Bar")
  39. assert(req.Header.Get("Proxy-Connection"), Equals, "keep-alive")
  40. assert(req.Header.Get("Proxy-Authenticate"), Equals, "abc")
  41. RemoveHopByHopHeaders(req.Header)
  42. assert(req.Header.Get("Connection"), IsEmpty)
  43. assert(req.Header.Get("Foo"), IsEmpty)
  44. assert(req.Header.Get("Bar"), IsEmpty)
  45. assert(req.Header.Get("Proxy-Connection"), IsEmpty)
  46. assert(req.Header.Get("Proxy-Authenticate"), IsEmpty)
  47. }