第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Go Web 服務(wù) - 將 tar.gz 文件作為請(qǐng)求正文發(fā)布

Go Web 服務(wù) - 將 tar.gz 文件作為請(qǐng)求正文發(fā)布

Go
紅糖糍粑 2022-01-17 19:58:22
我需要在處理 tar.gz 文件的 go 中實(shí)現(xiàn) Web 服務(wù),我想知道正確的方法是什么,我需要定義什么內(nèi)容類(lèi)型等。另外,我發(fā)現(xiàn)很多事情都是自動(dòng)處理的——在客戶(hù)端我只是發(fā)布了一個(gè) gzip 閱讀器,因?yàn)檎?qǐng)求正文和Accept-Encoding: gzip標(biāo)頭是自動(dòng)添加的,而在服務(wù)器端——我不需要對(duì)請(qǐng)求正文進(jìn)行壓縮,它是已經(jīng)提取到焦油。那有意義嗎?我可以相信任何客戶(hù)都會(huì)這樣嗎?服務(wù)器:func main() {    router := mux.NewRouter().StrictSlash(true)    router.Handle("/results", dataupload.NewUploadHandler()).Methods("POST")    log.Fatal(http.ListenAndServe(*address, router))}上傳者:package datauploadimport (    "errors"    log "github.com/Sirupsen/logrus"    "io"    "net/http")// UploadHandler responds to /results http request, which is the result-service rest API for uploading resultstype UploadHandler struct {    uploader Uploader}// NewUploadHandler creates UploadHandler instancefunc NewUploadHandler() *UploadHandler {    return &UploadHandler{        uploader: TarUploader{},    }}func (uh UploadHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {    retStatus := http.StatusOK    body, err := getBody(request)    if err != nil {        retStatus = http.StatusBadRequest        log.Error("Error fetching request body. ", err)    } else {        _, err := uh.uploader.Upload(body)    }    writer.WriteHeader(retStatus)}func getBody(request *http.Request) (io.ReadCloser, error) {    requestBody := request.Body    if requestBody == nil {        return nil, errors.New("Empty request body")    }    var err error    // this part is commented out since somehow the body is already gunzipped - no need to extract it.    /*if strings.Contains(request.Header.Get("Accept-Encoding"), "gzip") {        requestBody, err = gzip.NewReader(requestBody)    }*/    return requestBody, err}
查看完整描述

2 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

由于以下代碼,您為客戶(hù)端編寫(xiě)的代碼只是直接發(fā)送 tar 文件:


reader, err := gzip.NewReader(f)

...

request, err := http.NewRequest("POST", "http://localhost:8080/results", reader)

如果您.tar.gz直接發(fā)送文件內(nèi)容,則需要在服務(wù)器上對(duì)其進(jìn)行壓縮。例如:


request, err := http.NewRequest(..., f)

我認(rèn)為這更接近您應(yīng)該期望第三方客戶(hù)表現(xiàn)出的行為。


查看完整回答
反對(duì) 回復(fù) 2022-01-17
?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊

顯然不是,但也許...

Golang 為 http 客戶(hù)端(和服務(wù)器)提供了非常好的支持。這是最早支持 http2 的語(yǔ)言之一,API 的設(shè)計(jì)清楚地表明了他們對(duì)快速 http 的關(guān)注。

這就是他們Accept-Econding: gzip自動(dòng)添加的原因。這將大大減少服務(wù)器響應(yīng)的大小,然后優(yōu)化傳輸。

但是 gzip 仍然是 http 1 中的一個(gè)選項(xiàng),并非所有客戶(hù)端都會(huì)將此標(biāo)頭推送到您的服務(wù)器。

請(qǐng)注意,Content-Type描述了您發(fā)送的數(shù)據(jù)類(lèi)型(這里是 tar.gz,但可能是application/jsontest/javascript, ...),當(dāng)Accept-Encoding描述數(shù)據(jù)為傳輸編碼的方式時(shí)

Go 將負(fù)責(zé)透明地Accept-Encoding為您處理數(shù)據(jù),因?yàn)樗?fù)責(zé)數(shù)據(jù)的傳輸。然后由你來(lái)處理,Content-Type因?yàn)橹挥心阒廊绾谓o你收到的內(nèi)容賦予意義


查看完整回答
反對(duì) 回復(fù) 2022-01-17
  • 2 回答
  • 0 關(guān)注
  • 163 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)