- CHANGE: 优化`proxy`核心模块, 使用Chuncked Buffer传输数据, 减少内存占用 - REMOVE: caddy - REMOVE: nocache - CHANGE: 优化前端页面
57 lines
1.0 KiB
Go
57 lines
1.0 KiB
Go
package proxy
|
|
|
|
import (
|
|
"ghproxy/config"
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func CopyResponseHeaders(resp *http.Response, c *gin.Context, cfg *config.Config) {
|
|
|
|
copyHeaders(resp, c)
|
|
|
|
removeHeaders(resp)
|
|
|
|
setCORSHeaders(c, cfg)
|
|
|
|
setDefaultHeaders(c)
|
|
}
|
|
|
|
// 复制响应头
|
|
func copyHeaders(resp *http.Response, c *gin.Context) {
|
|
for key, values := range resp.Header {
|
|
for _, value := range values {
|
|
c.Header(key, value)
|
|
}
|
|
}
|
|
}
|
|
|
|
// 移除指定响应头
|
|
func removeHeaders(resp *http.Response) {
|
|
headersToRemove := map[string]struct{}{
|
|
"Content-Security-Policy": {},
|
|
"Referrer-Policy": {},
|
|
"Strict-Transport-Security": {},
|
|
}
|
|
|
|
for header := range headersToRemove {
|
|
resp.Header.Del(header)
|
|
}
|
|
}
|
|
|
|
// CORS配置
|
|
func setCORSHeaders(c *gin.Context, cfg *config.Config) {
|
|
if cfg.CORS.Enabled {
|
|
c.Header("Access-Control-Allow-Origin", "*")
|
|
} else {
|
|
c.Header("Access-Control-Allow-Origin", "")
|
|
}
|
|
}
|
|
|
|
// 默认响应
|
|
func setDefaultHeaders(c *gin.Context) {
|
|
c.Header("Age", "10")
|
|
c.Header("Cache-Control", "max-age=300")
|
|
}
|