设置代理相关头部信息 参考:https://tools.ietf.org/html/rfc7239
(header http.Header)
| 1659 | // 设置代理相关头部信息 |
| 1660 | // 参考:https://tools.ietf.org/html/rfc7239 |
| 1661 | func (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 | } |
no test coverage detected