Skip to content

Commit c2266a6

Browse files
committed
增强请求头设置,添加Origin和Accept-Encoding头,确保代理请求的兼容性和稳定性。同时更新User-Agent和Referer的设置逻辑,以支持更灵活的请求处理。
1 parent 5418e89 commit c2266a6

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,4 @@ data/metrics/status_codes.json
3636
data/config.example.json
3737
data/config.json
3838
.env
39+
data/cache

internal/handler/proxy.go

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,35 @@ func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
223223
copyHeader(proxyReq.Header, r.Header)
224224

225225
// 添加常见浏览器User-Agent
226-
proxyReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
226+
if ua := r.Header.Get("User-Agent"); ua != "" {
227+
proxyReq.Header.Set("User-Agent", ua)
228+
} else {
229+
proxyReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
230+
}
231+
232+
// 添加Origin
233+
proxyReq.Header.Set("Origin", fmt.Sprintf("%s://%s", parsedURL.Scheme, parsedURL.Host))
234+
235+
// 设置Referer为源站的完整域名(带上斜杠)
236+
proxyReq.Header.Set("Referer", fmt.Sprintf("%s://%s/", parsedURL.Scheme, parsedURL.Host))
227237

228-
// 设置Referer为源站的host
229-
proxyReq.Header.Set("Referer", fmt.Sprintf("%s://%s", parsedURL.Scheme, parsedURL.Host))
238+
// 设置Host头和proxyReq.Host
239+
proxyReq.Header.Set("Host", parsedURL.Host)
240+
proxyReq.Host = parsedURL.Host
241+
242+
// 确保设置适当的Accept头
243+
if accept := r.Header.Get("Accept"); accept != "" {
244+
proxyReq.Header.Set("Accept", accept)
245+
} else {
246+
proxyReq.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7")
247+
}
248+
249+
// 确保设置Accept-Encoding
250+
if acceptEncoding := r.Header.Get("Accept-Encoding"); acceptEncoding != "" {
251+
proxyReq.Header.Set("Accept-Encoding", acceptEncoding)
252+
} else {
253+
proxyReq.Header.Set("Accept-Encoding", "gzip, deflate, br")
254+
}
230255

231256
// 特别处理图片请求
232257
if utils.IsImageRequest(r.URL.Path) {
@@ -244,12 +269,13 @@ func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
244269
proxyReq.Header.Set("CF-Image-Format", "auto") // 让 Cloudflare 根据 Accept 头自动选择格式
245270
}
246271

247-
// 设置其他必要的头部
248-
proxyReq.Host = parsedURL.Host
249-
proxyReq.Header.Set("Host", parsedURL.Host)
272+
// 设置最小必要的代理头部
250273
proxyReq.Header.Set("X-Real-IP", utils.GetClientIP(r))
251-
proxyReq.Header.Set("X-Forwarded-Host", r.Host)
252-
proxyReq.Header.Set("X-Forwarded-Proto", r.URL.Scheme)
274+
275+
// 如果源站不严格要求Host匹配,可以保留以下头部
276+
// 否则可能需要注释掉这些头部
277+
// proxyReq.Header.Set("X-Forwarded-Host", r.Host)
278+
// proxyReq.Header.Set("X-Forwarded-Proto", r.URL.Scheme)
253279

254280
// 添加或更新 X-Forwarded-For
255281
if clientIP := utils.GetClientIP(r); clientIP != "" {

0 commit comments

Comments
 (0)