真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

關于go語言的http操作的信息

golang net/http包 http請求的字節(jié)碼讀取與解析。

先配置Header最長讀取時間、req最長讀取時間、req最大讀取長度默認6M。

創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為個舊企業(yè)提供專業(yè)的成都網(wǎng)站設計、成都網(wǎng)站建設、外貿網(wǎng)站建設,個舊網(wǎng)站改版等技術服務。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

RFC7230禁止\r\n參數(shù),Url中只允許包含英文字母(a-zA-Z)、數(shù)字(0-9)、-_.~4個特殊字符以及所有保留字符。但go net/http包放寬了這個要求。

先構建newTextprotoReader,由于緩沖區(qū)是對象復用的,用完后要defer put。共完以以下解析任務:

TextprotoReader數(shù)據(jù)結構,將字節(jié)碼Reader轉成文本Reader。

第一步,從第一行解析出method uri prototype。

第二步解析URL。url.URL數(shù)據(jù)結構:

解析Scheme,協(xié)議前綴(小寫)。有查詢參數(shù)?,則配置url.ForceQuery url.RawQuery。有認證信息///...//,則解析url.User url.Host。最后配置url.Path和url.RawPath,如果Path==RawPath,則RawPath=""。

第三步解析MIMEHeader。

第四步readTransfer。重新配置如下參數(shù):RequestMethod ProtoMajor ProtoMinor Header Trailer ContentLength Close。對于Body,如果encodings支持chunked,讀取流用chunkedReader包裹。默認情況用LimitedReader,無body賦空的struct{}。

以下情況返回非空err,示得到正確的請求:

最后配置req.ctx req.RemoteAddr req.TLS body.doEarlyClose = true。

構建Response:

其中closeNotifyCh必須在構建時初始化,沒有content所以先置contentLength為-1。

配置w.cw并被w.w包裹。w.cw緩沖默認大小2M。

獲取Request可能出現(xiàn)如下錯誤:

先上響應數(shù)據(jù)結構:

response字段可以分類為:大對象、緩沖、KV對或bool型的狀態(tài)參數(shù)。

大對象有:

狀態(tài)字段:

chunkWriter數(shù)據(jù)結構:

chunkWriter包裹了Response,功能之一是完成Header設置,包括Content-Type Content-Length chunk-header。bufio.Writer是chunkWriter是緩沖包裹。

handler將響應寫入到response.w。

調用w.w.Flush()將w寫入到cw,注意到Flush()操作,如果未刷空緩存并報錯,觸發(fā)拷貝操作。報錯不會退回已寫出的數(shù)據(jù)。

進而調用cw.Write(),根據(jù)cw.chunking參數(shù)。

putBufioWriter(w.w)清空resp.w緩沖,如果池化放回sync.pool。

根據(jù)chunkWriter的定義,w.cw.close()負責cw的結束工作:寫入換行符和resp.trailers數(shù)據(jù)。

最后刷新TCP緩沖w.conn.bufw.Flush(),完成響應包發(fā)送。并正確關閉request。

[golang] fasthttp 使用http代理

golang net/http標準庫的client是可以配置各種代理的,http/https/sock5等,不過fasthttp僅支持配置sock5代理,通過定義fasthttp dialfunc實現(xiàn):

項目中碰到的問題是,ops只提供了用squid搭建的http代理,所以是想重新定義一個http代理的dialfunc,找了fasthttp github倉庫的issue,作者提供了一個dialFunc

經(jīng)測試,訪問https的站點是OK的,訪問http的站點不行,代理連接不上。先說一下http/https代理的區(qū)別,再說原因。

使用代理訪問https網(wǎng)站時,會先發(fā)CONNECT請求,讓代理與目標站點建立一個http tunnel,之后在這個tunnel基礎上進行傳輸,對應到上面的dialFunc過程就是:

可以看到http站點是不需要發(fā)CONNECT請求的,而是直接將目標站點的url作為path 填寫在http請求頭中。

為何上面的dialfunc訪問http站點不行呢,查了squid代理的文檔,發(fā)現(xiàn)squid默認會禁止非https站點通過CONNECT方法建立通道,自己搭了個squid代理去掉配置項,發(fā)現(xiàn)上面的dialfunc是可以訪問http、https站點的,就是說http,https都先建立通過,再請求。

看了fasthttp的源碼,沒辦法在請求前修改request header中的path為目標站點url,所以如果需要通過fasthttp使用http代理,那么可以使用上面的dialfunc,同時代理需要允許非443端口的站點可以建立通道。如果做不到這一點,那么還是建議使用標準庫net/http的client,會更方便一點。

go語言聊天室實現(xiàn)(六)創(chuàng)建HTTP連接,并升級為長連接

我們在mian函數(shù)中,首先初始化配置文件,然后新建http連接。

這個連接創(chuàng)建之后,監(jiān)聽服務器的9999端口。如果url的路徑后綴為 "/ws",就轉發(fā)到ws/ws.go中的IndexHandler方法中。

這個方法中首先我們創(chuàng)建一個websocket的Upgrader實例,然后我們使用Upgrader的upgrade方法來升級一下我們的連接為長連接。

升級完成之后會返回一個*websocket.Conn的連接,我們之后所有的關于連接的操作,都是基于該conn的。

在該連接完成之后,我們將連接存放到一個名為Client的map中,以便之后管理更為方便。

之后,我們啟動一個goroutine來讀取連接中發(fā)送的信息內容,再根據(jù)內容進行相應的操作。

Go語言HTTPServer開發(fā)的六種實現(xiàn)

學完了 net/http 和 fasthttp 兩個HTTP協(xié)議接口的客戶端實現(xiàn),接下來就要開始Server的開發(fā),不學不知道一學嚇一跳,居然這兩個庫還支持Server的開發(fā),太方便了。

相比于Java的HTTPServer開發(fā)基本上都是使用Spring或者Springboot框架,總是要配置各種配置類,各種 handle 對象。Golang的Server開發(fā)顯得非常簡單,就是因為特別簡單,或者說沒有形成特別統(tǒng)一的規(guī)范或者框架,我發(fā)現(xiàn)了很多實現(xiàn)方式,HTTP協(xié)議基于還是 net/http 和 fasthttp ,但是 handle 語法就多種多樣了。

先復習一下: Golang語言HTTP客戶端實踐 、 Golang fasthttp實踐 。

在Golang語言方面,實現(xiàn)某個功能的庫可能會比較多,有機會還是要多跟同行交流,指不定就發(fā)現(xiàn)了更好用的庫。下面我分享我學到的六種Server開發(fā)的實現(xiàn)Demo。

基于 net/http 實現(xiàn),這是一種比較基礎的,對于接口和 handle 映射關系處理并不優(yōu)雅,不推薦使用。

第二種也是基于 net/http ,這種編寫語法可以很好地解決第一種的問題,handle和path有了類似配置的語法,可讀性提高了很多。

第三個基于 net/http 和 github.com/labstack/echo ,后者主要提供了 Echo 對象用來處理各類配置包括接口和handle映射,功能很豐富,可讀性最佳。

第四種依然基于 net/http 實現(xiàn),引入了 github.com/gin-gonic/gin 的路由,看起來接口和 handle 映射關系比較明晰了。

第五種基于 fasthttp 開發(fā),使用都是 fasthttp 提供的API,可讀性尚可,handle配置倒是更像Java了。

第六種依然基于 fasthttp ,用到了 github.com/buaazp/fasthttprouter ,有點奇怪兩個居然不在一個GitHub倉庫里。使用語法跟第三種方式有點類似,比較有條理,有利于閱讀。


標題名稱:關于go語言的http操作的信息
當前路徑:http://weahome.cn/article/dopdgpe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部