* feat(antigravity): 支持 Images 单向生图转换 * feat(images): 复用转换并支持 Gemini 渠道生图 * fix(images): 修正生图转换失败分类并恢复候选回退
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package httpheader
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
var representationMetadataNames = [...]string{
|
|
"Content-Encoding",
|
|
"Content-Length",
|
|
"ETag",
|
|
"Digest",
|
|
"Content-MD5",
|
|
"Content-Range",
|
|
"Content-Digest",
|
|
"Repr-Digest",
|
|
"Signature",
|
|
"Signature-Input",
|
|
}
|
|
|
|
func NormalizeUpstreamRequestRepresentation(request *http.Request, finalBodyLength int64) {
|
|
if request == nil {
|
|
return
|
|
}
|
|
if request.Header == nil {
|
|
request.Header = make(http.Header)
|
|
} else {
|
|
request.Header = request.Header.Clone()
|
|
}
|
|
StripRepresentationMetadata(request.Header)
|
|
deleteField(request.Header, "Accept-Encoding")
|
|
request.Header.Set("Accept-Encoding", "identity")
|
|
request.ContentLength = finalBodyLength
|
|
}
|
|
|
|
// StripRepresentationMetadata 清理绑定原始 HTTP 正文的元数据,适用于请求与响应。
|
|
func StripRepresentationMetadata(headers http.Header) {
|
|
if headers == nil {
|
|
return
|
|
}
|
|
for _, name := range representationMetadataNames {
|
|
deleteField(headers, name)
|
|
}
|
|
}
|
|
|
|
func deleteField(headers http.Header, target string) {
|
|
for name := range headers {
|
|
if strings.EqualFold(name, target) {
|
|
delete(headers, name)
|
|
}
|
|
}
|
|
}
|