最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Golang中使用http.FileServer返回靜態(tài)文件的操作

 更新時(shí)間:2020年12月18日 10:13:52   作者:寒江雪1719  
這篇文章主要介紹了在Golang中使用http.FileServer返回靜態(tài)文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

Golang中使用http.FileServer

使用http.FileServer可以管理向?yàn)g覽器返回靜態(tài)文件

http.Handle("/",http.FileServer(http.Dir("/Users/administrator/Desktop/public")))
err := http.ListenAndServe("0.0.0.0:8080",nil)
if err!=nil{
  fmt.Print(err);
}

補(bǔ)充:golang https server分析

https:

HTTPS是http安全版本的實(shí)現(xiàn),在http與tcp之間加了一層ssl/tls安全傳輸協(xié)議

為了防止請(qǐng)求被監(jiān)聽、篡改、冒充,在tls實(shí)現(xiàn)過程中引入了數(shù)字證書機(jī)制,數(shù)字證書由第三方權(quán)威機(jī)構(gòu)提供保證。

數(shù)字證書原理是采用非對(duì)稱加密生成一對(duì)公鑰、私鑰,服務(wù)端保存私鑰,下發(fā)公鑰給客戶端,由于非對(duì)稱加密計(jì)算量比較大,

所以https通信過程中,通過客戶端與服務(wù)端的握手交互產(chǎn)生三次隨機(jī)碼,從而生成一個(gè)相對(duì)安全的對(duì)稱加密密碼,密碼通過非對(duì)稱加密下發(fā)給客戶端,從而完成加密通信

https本質(zhì)上還是tcp通信,所以https的捂手是在建立tcp連接后,進(jìn)行的一系列校驗(yàn)而已,

在處理tcp conn連接的過程中,會(huì)判斷連接類型是不是tls類型,如果是會(huì)進(jìn)入tlsConn.serverHandshake()握手過程。詳細(xì)流程如下:

下面分析一下golang中如何實(shí)現(xiàn)的https握手

在建立tlsConn連接后,服務(wù)端新起一個(gè)goroutine處理,

config.serverInitOnce.Do(config.serverInit) // 產(chǎn)生一個(gè)隨機(jī)數(shù)作為通信憑證,下次通信時(shí)憑證校驗(yàn)通過后直接通信,校驗(yàn)不通過重新建立連接
msg, err := c.readHandshake() // 解析clientHello信息,此時(shí)獲取到由客戶端生成的第一個(gè)隨機(jī)數(shù)
c.vers, ok = config.mutualVersion(hs.clientHello.vers) // 檢查客戶端與服務(wù)端tls版本是否一致
_, err = io.ReadFull(config.rand(), hs.hello.random) // 服務(wù)端產(chǎn)生第二個(gè)隨機(jī)數(shù)
hs.setCipherSuite(id, supportedList, c.vers) // 確認(rèn)加密算法

設(shè)置服務(wù)器證書

hs.cert, err = config.getCertificate(&ClientHelloInfo{
CipherSuites: hs.clientHello.cipherSuites,
ServerName: hs.clientHello.serverName,
SupportedCurves: hs.clientHello.supportedCurves,
SupportedPoints: hs.clientHello.supportedPoints,
});
skx, err := keyAgreement.generateServerKeyExchange(config, hs.cert, hs.clientHello, hs.hello) // 生成服務(wù)端摘要信息
c.writeRecord(recordTypeHandshake, helloDone.marshal()) //發(fā)送helloDone信息
preMasterSecret, err := keyAgreement.processClientKeyExchange(config, hs.cert, ckx, c.vers) // 處理獲取由客戶端生成的第三個(gè)隨機(jī)數(shù)
hs.masterSecret = masterFromPreMasterSecret(c.vers, hs.suite, preMasterSecret, hs.clientHello.random, hs.hello.random) // 生成通信秘鑰
hs.finishedHash.Write() // 服務(wù)端發(fā)送最后一次確認(rèn)請(qǐng)求

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Golang的循環(huán)中break和continue語句的用法講解

    Golang的循環(huán)中break和continue語句的用法講解

    這篇文章主要介紹了Golang的循環(huán)中break和continue語句的用法講解,是Go語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Go語言基礎(chǔ)學(xué)習(xí)教程

    Go語言基礎(chǔ)學(xué)習(xí)教程

    這篇文章主要介紹了Go語言基礎(chǔ)知識(shí),包括基本語法、語句、數(shù)組等的定義與用法,需要的朋友可以參考下
    2016-07-07
  • 詳解Go語言中自定義結(jié)構(gòu)體能作為map的key嗎

    詳解Go語言中自定義結(jié)構(gòu)體能作為map的key嗎

    在Go中,引用類型具有動(dòng)態(tài)的特性,可能會(huì)被修改或指向新的數(shù)據(jù),這就引發(fā)了一個(gè)問題—能否將包含引用類型的自定義結(jié)構(gòu)體作為map的鍵呢,本文就來和大家想想講講
    2023-06-06
  • Golang中時(shí)間戳與時(shí)區(qū)轉(zhuǎn)換的方法詳解

    Golang中時(shí)間戳與時(shí)區(qū)轉(zhuǎn)換的方法詳解

    時(shí)間是我們生活的基石,而在計(jì)算機(jī)科學(xué)中,時(shí)間處理顯得尤為重要,尤其是當(dāng)你在處理分布式系統(tǒng)、跨時(shí)區(qū)應(yīng)用和全球服務(wù)時(shí),時(shí)間和時(shí)區(qū)的管理變得不可或缺,在這篇文章中,我們將深入探討Golang中的時(shí)間戳與時(shí)區(qū)轉(zhuǎn)換,需要的朋友可以參考下
    2024-06-06
  • 云端golang開發(fā),無需本地配置,能上網(wǎng)就能開發(fā)和運(yùn)行

    云端golang開發(fā),無需本地配置,能上網(wǎng)就能開發(fā)和運(yùn)行

    這篇文章主要介紹了云端golang開發(fā),無需本地配置,能上網(wǎng)就能開發(fā)和運(yùn)行的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Go語言Grpc?Stream的實(shí)現(xiàn)

    Go語言Grpc?Stream的實(shí)現(xiàn)

    本文主要介紹了Go語言Grpc?Stream的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Go json omitempty如何實(shí)現(xiàn)可選屬性

    Go json omitempty如何實(shí)現(xiàn)可選屬性

    在Go語言中,使用`omitempty`可以幫助我們?cè)谶M(jìn)行JSON序列化和反序列化時(shí),忽略結(jié)構(gòu)體中的零值或空值,本文介紹了如何通過將字段類型改為指針類型,并在結(jié)構(gòu)體的JSON標(biāo)簽中添加`omitempty`來實(shí)現(xiàn)這一功能,例如,將float32修改為*float32
    2024-09-09
  • Go語言 init函數(shù)的具體使用

    Go語言 init函數(shù)的具體使用

    init()函數(shù)是Go語言中一種特殊的函數(shù),用于在包被導(dǎo)入時(shí)執(zhí)行一次性的初始化操作,本文就來介紹一下Go語言 init函數(shù)的具體使用,感興趣的可以了解一下
    2024-09-09
  • GO 使用Webhook 實(shí)現(xiàn)github 自動(dòng)化部署的方法

    GO 使用Webhook 實(shí)現(xiàn)github 自動(dòng)化部署的方法

    這篇文章主要介紹了GO 使用Webhook 實(shí)現(xiàn)github 自動(dòng)化部署的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Golang處理內(nèi)存溢出方式

    Golang處理內(nèi)存溢出方式

    本文介紹了Golang中分析內(nèi)存溢出問題的三種工具:pprof、GoMemstats和程序crash時(shí)自動(dòng)創(chuàng)建dump文件,通過這些工具,可以對(duì)程序的內(nèi)存使用情況進(jìn)行詳細(xì)分析,從而找出內(nèi)存溢出的原因
    2024-12-12

最新評(píng)論

漳州市| 长治县| 新丰县| 哈尔滨市| 泾阳县| 长海县| 通榆县| 田东县| 宁国市| 龙南县| 阿鲁科尔沁旗| 巴青县| 中卫市| 怀远县| 同江市| 东阳市| 穆棱市| 师宗县| 桓台县| 北宁市| 海口市| 托克托县| 兴义市| 万全县| 武威市| 清丰县| 墨江| 花垣县| 长汀县| 波密县| 秭归县| 金沙县| 镇宁| 佛冈县| 左贡县| 西平县| 汶川县| 长治县| 舟山市| 乐业县| 临湘市|