处理自定义Request Header
(reqHeader http.Header)
| 1727 | |
| 1728 | // 处理自定义Request Header |
| 1729 | func (this *HTTPRequest) processRequestHeaders(reqHeader http.Header) { |
| 1730 | this.fixRequestHeader(reqHeader) |
| 1731 | |
| 1732 | if this.web.RequestHeaderPolicy != nil && this.web.RequestHeaderPolicy.IsOn { |
| 1733 | // 删除某些Header |
| 1734 | for name := range reqHeader { |
| 1735 | if this.web.RequestHeaderPolicy.ContainsDeletedHeader(name) { |
| 1736 | reqHeader.Del(name) |
| 1737 | } |
| 1738 | } |
| 1739 | |
| 1740 | // Set |
| 1741 | for _, header := range this.web.RequestHeaderPolicy.SetHeaders { |
| 1742 | if !header.IsOn { |
| 1743 | continue |
| 1744 | } |
| 1745 | |
| 1746 | // 是否已删除 |
| 1747 | if this.web.RequestHeaderPolicy.ContainsDeletedHeader(header.Name) { |
| 1748 | continue |
| 1749 | } |
| 1750 | |
| 1751 | // 请求方法 |
| 1752 | if len(header.Methods) > 0 && !lists.ContainsString(header.Methods, this.RawReq.Method) { |
| 1753 | continue |
| 1754 | } |
| 1755 | |
| 1756 | // 域名 |
| 1757 | if len(header.Domains) > 0 && !configutils.MatchDomains(header.Domains, this.ReqHost) { |
| 1758 | continue |
| 1759 | } |
| 1760 | |
| 1761 | var headerValue = header.Value |
| 1762 | if header.ShouldReplace { |
| 1763 | if len(headerValue) == 0 { |
| 1764 | headerValue = reqHeader.Get(header.Name) // 原有值 |
| 1765 | } else if header.HasVariables() { |
| 1766 | headerValue = this.Format(header.Value) |
| 1767 | } |
| 1768 | |
| 1769 | for _, v := range header.ReplaceValues { |
| 1770 | headerValue = v.Replace(headerValue) |
| 1771 | } |
| 1772 | } else if header.HasVariables() { |
| 1773 | headerValue = this.Format(header.Value) |
| 1774 | } |
| 1775 | |
| 1776 | // 支持修改Host |
| 1777 | if header.Name == "Host" && len(header.Value) > 0 { |
| 1778 | this.RawReq.Host = headerValue |
| 1779 | } else { |
| 1780 | if header.ShouldAppend { |
| 1781 | reqHeader[header.Name] = append(reqHeader[header.Name], headerValue) |
| 1782 | } else { |
| 1783 | reqHeader[header.Name] = []string{headerValue} |
| 1784 | } |
| 1785 | } |
| 1786 | } |
no test coverage detected