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

Method processRequestHeaders

internal/nodes/http_request.go:1729–1802  ·  view source on GitHub ↗

处理自定义Request Header

(reqHeader http.Header)

Source from the content-addressed store, hash-verified

1727
1728// 处理自定义Request Header
1729func (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 }

Callers 3

doFastcgiMethod · 0.95
doOriginRequestMethod · 0.95
doURLMethod · 0.95

Calls 3

fixRequestHeaderMethod · 0.95
FormatMethod · 0.95
GetMethod · 0.45

Tested by

no test coverage detected