optimize http headers

This commit is contained in:
bxd
2023-10-23 14:30:50 +08:00
parent b3d563429f
commit 86e53f80bc
3 changed files with 12 additions and 22 deletions

2
go.mod
View File

@@ -15,7 +15,6 @@ require (
github.com/refraction-networking/utls v1.5.4
golang.org/x/exp v0.0.0-20231006140011-7918f672742d
golang.org/x/net v0.17.0
golang.org/x/text v0.13.0
)
require (
@@ -40,5 +39,6 @@ require (
golang.org/x/crypto v0.14.0 // indirect
golang.org/x/image v0.13.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
nhooyr.io/websocket v1.8.9 // indirect
)

View File

@@ -2,7 +2,6 @@ package requests
import (
"errors"
"net/http"
"github.com/gospider007/gson"
@@ -14,10 +13,10 @@ var AcceptLanguage = "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"
// 请求操作========================================================================= start
func DefaultHeaders() http.Header {
return http.Header{
"Accept-Encoding": []string{"gzip, deflate, br"},
"Accept": []string{"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"},
"Accept-Language": []string{AcceptLanguage},
"User-Agent": []string{UserAgent},
"Accept": []string{"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"},
"Accept-Encoding": []string{"gzip, deflate, br"},
"Accept-Language": []string{AcceptLanguage},
}
}
func (obj *RequestOption) initHeaders() error {

View File

@@ -9,6 +9,7 @@ import (
"fmt"
"io"
"net"
"net/textproto"
"net/url"
"sort"
"sync"
@@ -22,8 +23,6 @@ import (
"github.com/gospider007/tools"
utls "github.com/refraction-networking/utls"
"golang.org/x/exp/slices"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
type roundTripper interface {
@@ -326,12 +325,11 @@ func (obj *Connecotr) wrapBody(task *reqTask) {
type orderHeadersConn struct {
w io.Writer
raw []byte
fin bool
orderHeaders []string
}
func (obj *orderHeadersConn) Write(p []byte) (n int, err error) {
if obj.fin {
if obj.raw == nil {
return obj.w.Write(p)
}
obj.raw = append(obj.raw, p...)
@@ -341,20 +339,14 @@ func (obj *orderHeadersConn) Write(p []byte) (n int, err error) {
sort.Slice(kvs, func(i, j int) bool {
iIndex := bytes.Index(kvs[i], []byte{':'})
jIndex := bytes.Index(kvs[j], []byte{':'})
if iIndex == -1 && jIndex == -1 {
if iIndex == -1 || jIndex == -1 {
return false
} else if iIndex == -1 {
return false
} else if jIndex == -1 {
return true
} else {
return slices.Index(obj.orderHeaders, tools.BytesToString(kvs[i][:iIndex])) > slices.Index(obj.orderHeaders, tools.BytesToString(kvs[j][:jIndex]))
}
return slices.Index(obj.orderHeaders, tools.BytesToString(kvs[i][:iIndex])) > slices.Index(obj.orderHeaders, tools.BytesToString(kvs[j][:jIndex]))
})
copy(obj.raw[firstIndex:lastIndex], bytes.Join(kvs, []byte{'\r', '\n'}))
}
_, err = obj.w.Write(obj.raw)
obj.fin = true
obj.raw = nil
}
return len(p), err
@@ -362,12 +354,11 @@ func (obj *orderHeadersConn) Write(p []byte) (n int, err error) {
func (obj *Connecotr) http1Req(task *reqTask) {
defer task.cnl()
if task.orderHeaders != nil {
total := len(task.orderHeaders) * 2
orderHeaders := make([]string, total)
if task.orderHeaders != nil && len(task.orderHeaders) > 0 {
orderHeaders := make([]string, len(task.orderHeaders))
total := len(task.orderHeaders) - 1
for i, val := range task.orderHeaders {
orderHeaders[total-(i*2+1)] = val
orderHeaders[total-(i*2+2)] = cases.Title(language.Und, cases.NoLower).String(val)
orderHeaders[total-i] = textproto.CanonicalMIMEHeaderKey(val)
}
task.err = task.req.Write(&orderHeadersConn{w: obj, raw: []byte{}, orderHeaders: orderHeaders})
} else {