MCPcopy Index your code
hub / github.com/GoEdgeLab/EdgeNode / setForwardHeaders

Method setForwardHeaders

internal/nodes/http_request.go:1661–1726  ·  view source on GitHub ↗

设置代理相关头部信息 参考:https://tools.ietf.org/html/rfc7239

(header http.Header)

Source from the content-addressed store, hash-verified

1659// 设置代理相关头部信息
1660// 参考:https://tools.ietf.org/html/rfc7239
1661func (this *HTTPRequest) setForwardHeaders(header http.Header) {
1662 // TODO 做成可选项
1663 if this.RawReq.Header.Get("Connection") == "close" {
1664 this.RawReq.Header.Set("Connection", "keep-alive")
1665 }
1666
1667 var rawRemoteAddr = this.RawReq.RemoteAddr
1668 host, _, err := net.SplitHostPort(rawRemoteAddr)
1669 if err == nil {
1670 rawRemoteAddr = host
1671 }
1672
1673 // x-real-ip
1674 if this.reverseProxy != nil && this.reverseProxy.ShouldAddXRealIPHeader() {
1675 _, ok1 := header["X-Real-IP"]
1676 _, ok2 := header["X-Real-Ip"]
1677 if !ok1 && !ok2 {
1678 header["X-Real-IP"] = []string{this.requestRemoteAddr(true)}
1679 }
1680 }
1681
1682 // X-Forwarded-For
1683 if this.reverseProxy != nil && this.reverseProxy.ShouldAddXForwardedForHeader() {
1684 forwardedFor, ok := header["X-Forwarded-For"]
1685 if ok && len(forwardedFor) > 0 { // already exists
1686 _, hasForwardHeader := this.RawReq.Header["X-Forwarded-For"]
1687 if hasForwardHeader {
1688 header["X-Forwarded-For"] = []string{strings.Join(forwardedFor, ", ") + ", " + rawRemoteAddr}
1689 }
1690 } else {
1691 var clientRemoteAddr = this.requestRemoteAddr(true)
1692 if len(clientRemoteAddr) > 0 && clientRemoteAddr != rawRemoteAddr {
1693 header["X-Forwarded-For"] = []string{clientRemoteAddr + ", " + rawRemoteAddr}
1694 } else {
1695 header["X-Forwarded-For"] = []string{rawRemoteAddr}
1696 }
1697 }
1698 }
1699
1700 // Forwarded
1701 /**{
1702 forwarded, ok := header["Forwarded"]
1703 if ok {
1704 header["Forwarded"] = []string{strings.Join(forwarded, ", ") + ", by=" + this.serverAddr + "; for=" + remoteAddr + "; host=" + this.ReqHost + "; proto=" + this.rawScheme}
1705 } else {
1706 header["Forwarded"] = []string{"by=" + this.serverAddr + "; for=" + remoteAddr + "; host=" + this.ReqHost + "; proto=" + this.rawScheme}
1707 }
1708 }**/
1709
1710 // others
1711 if this.reverseProxy != nil && this.reverseProxy.ShouldAddXForwardedByHeader() {
1712 this.RawReq.Header.Set("X-Forwarded-By", this.ServerAddr)
1713 }
1714
1715 if this.reverseProxy != nil && this.reverseProxy.ShouldAddXForwardedHostHeader() {
1716 if _, ok := header["X-Forwarded-Host"]; !ok {
1717 this.RawReq.Header.Set("X-Forwarded-Host", this.ReqHost)
1718 }

Callers 2

doOriginRequestMethod · 0.95
doURLMethod · 0.95

Calls 4

requestRemoteAddrMethod · 0.95
requestSchemeMethod · 0.95
GetMethod · 0.45
SetMethod · 0.45

Tested by

no test coverage detected