@@ -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