淺談一下前端http與https有什么區(qū)別
從 http 到 https
現(xiàn)今大部分的網(wǎng)站都已經(jīng)使用了 https 協(xié)議,這樣我們?cè)诰W(wǎng)絡(luò)上進(jìn)行沖浪時(shí),基本也就無需擔(dān)心自己的隱私被竊取了。不過,稍微了解一點(diǎn)計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)的人都明白,http 默認(rèn)是 80 端口,https 默認(rèn)是 443 端口。但是現(xiàn)在在網(wǎng)頁(yè)輸入網(wǎng)址訪問的人, 大部分都不會(huì)加 http://
,因此默認(rèn)訪問的是 http
協(xié)議,那么為什么大家還能繼續(xù)訪問 https
協(xié)議呢?因?yàn)檫@些網(wǎng)站都做了一個(gè)跳轉(zhuǎn),訪問 80 端口會(huì)被自動(dòng)重定向到 443 端口(即 http -> https
)。
讓我們來看一個(gè),日常生活中使用最廣泛的網(wǎng)站的例子吧!
注意到了嗎?我并沒有輸入?yún)f(xié)議,所以瀏覽器默認(rèn)是會(huì)訪問 http 網(wǎng)站的,但是最終的結(jié)果是訪問了 https 網(wǎng)站。我前面說了這是做了跳轉(zhuǎn),但是這種說法是很模糊的,你并不知道實(shí)際上是使用了什么技術(shù)?作為一個(gè)有點(diǎn)技術(shù)追求的人,讓我們來一探究竟吧!
或者你可以先猜測(cè)一下:這里使用的技術(shù)是 請(qǐng)求轉(zhuǎn)發(fā) Request Forward 還是 重定向 Redirect 呢?
瀏覽器調(diào)試
直接上瀏覽器調(diào)試,這樣最清楚了。可以看到這里會(huì)有兩個(gè) www.baidu.com,直接看第一個(gè)前面問題的答案就已經(jīng)出來了,是重定向 Redirect。
注意,下面這樣訪問是錯(cuò)誤的。 如果你調(diào)試的話,你也只能看到一個(gè) www.baidu.com 的網(wǎng)站。因?yàn)橹霸L問過了,瀏覽器會(huì)記住你訪問過的網(wǎng)址的,這里的區(qū)別在于匹配到網(wǎng)址后,出現(xiàn)了百度的 logo 圖標(biāo)。所以,如果你想要真實(shí)的看到這種跳轉(zhuǎn),你需要清空自己的瀏覽器瀏覽器歷史記錄(關(guān)于百度的瀏覽器歷史記錄)。
實(shí)現(xiàn)自己的 http 到 https 的重定向
既然已經(jīng)了解了前面的內(nèi)容,那么我們就可以把這個(gè)方式給簡(jiǎn)單的應(yīng)用上了。這里大致的思路是:監(jiān)聽兩個(gè)端口,一個(gè)是端口提供 http 服務(wù)(只有一個(gè)根路徑),一個(gè)提供 https 服務(wù)(正常的應(yīng)用服務(wù)路徑),然后如果有人訪問了 http 的根路徑,那么將其轉(zhuǎn)發(fā)到 https 服務(wù)的根路徑上即可。
網(wǎng)上有很多訪問生成自簽名的 CA 證書,這里就不多做介紹了,那么接下來直接看代碼吧!
package main import ( "log" "net/http" ) var ( CertFile = "C:/Users/alfred/Desktop/ssl/server.cer" KeyFile = "C:/Users/alfred/Desktop/ssl/server.key" ) func main() { go ListenHttp() go ListenHttps() select {} } func ListenHttp() { // 監(jiān)聽 http 端口,并把請(qǐng)求重定向到 https 端口 httpServer := http.NewServeMux() httpServer.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { log.Printf("http --> https") http.Redirect(w, r, "https://localhost:10000", http.StatusPermanentRedirect) }) err := http.ListenAndServe(":9999", httpServer) if err != nil { log.Fatal(err) } } func ListenHttps() { // 監(jiān)聽 https 端口,提供實(shí)際的服務(wù) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Welcome to SSL World!")) }) http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello Https World!")) }) // 本機(jī)自簽名證書,僅演示使用 err := http.ListenAndServeTLS(":10000", CertFile, KeyFile, nil) if err != nil { log.Fatal(err) } }
因?yàn)槭亲院灻C書,不是正統(tǒng) CA 機(jī)構(gòu)簽發(fā)的,所以這里是有警告的。不過這與我們所有說明的過程無關(guān),忽視就好了。這是一個(gè)很小的細(xì)節(jié)問題,其實(shí)理解它挺簡(jiǎn)單的,只需要一點(diǎn)點(diǎn)計(jì)算機(jī)網(wǎng)絡(luò)的知識(shí)就足夠了。
到此這篇關(guān)于淺談一下前端http與https有什么區(qū)別的文章就介紹到這了,更多相關(guān)http與https區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言使用sort包對(duì)任意類型元素的集合進(jìn)行排序的方法
這篇文章主要介紹了Go語言使用sort包對(duì)任意類型元素的集合進(jìn)行排序的方法,實(shí)例分析了sort排序所涉及的方法與相關(guān)的使用技巧,需要的朋友可以參考下2015-02-02golang高性能的http請(qǐng)求 fasthttp詳解
fasthttp 是 Go 的快速 HTTP 實(shí)現(xiàn),當(dāng)前在 1M 并發(fā)的生產(chǎn)環(huán)境使用非常成功,可以從單個(gè)服務(wù)器進(jìn)行 100K qps 的持續(xù)連接,總而言之,fasthttp 比 net/http 快 10 倍,下面通過本文給大家介紹golang fasthttp http請(qǐng)求的相關(guān)知識(shí),一起看看吧2021-09-09對(duì)Golang中的runtime.Caller使用說明
這篇文章主要介紹了對(duì)Golang中的runtime.Caller使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12