HTML前端连接go语言后段,一次完整的浏览器请求响应过程-Go语言中文社区
寫在前面
本篇博客旨在理解在瀏覽器中輸入url地址后,瀏覽器和服務器之間都干了些什么。
整個流程如下:
域名解析,獲取IP地址
建立TCP連接,瀏覽器發送html請求
服務器web相應,發回html響應
釋放TCP連接,瀏覽器解析html,渲染呈現頁面
域名解析,獲取IP地址
輸入網址后,瀏覽器會根據域名獲取IP地址。怎么獲取IP地址呢?
瀏覽器要首先獲取DNS。那什么是DNS呢?
DNS(Domain Name System)即網絡名稱系統,它是一個將域名和IP地址相互映射的分布式數據庫。簡單地說,DNS就是一種域名和IP地址查對表,通過搜尋DNS法則,獲得當前域名對應的IP地址,反之亦然。
瀏覽器查詢DNS緩存的方式采用遞進式查找,即
瀏覽器緩存–>系統緩存–>路由器緩存–>ISP DNS緩存
建立TCP連接,瀏覽器發送html請求
瀏覽器通過DNS查找到url對應的ip地址之后,通過握手協議與服務器建立TCP連接,隨后向服務器發送http請求。
建立TCP連接
socket
socket是對TCP/IP協議的封裝,本身不是一個協議,而是一個調用接口(API),是對TCP/IP協議的抽象,提供了方便的基本函數接口。
socket建立連接
建立socket連接至少需要一對*套接字,其中一個運行在客戶端,稱為ClientSocket。另一個運行在服務器端,稱為ServerSocket。
套接字連接過程如下:
1. 服務器監聽:服務器端處于實時監控狀態,等待客戶端連接請求。
2. 客戶端請求:客戶端套接字提出連接請求,提供要連接的服務器套接字的地址和端口號。
3. 連接確認:當服務器監聽到客戶端請求后,就建立一個新的線程,把服務器端套接字的描述發送給客戶端,等待客戶端確認。建立連接后,服務器繼續保持監聽狀態,等待接受其他客戶端套接字請求。
請求報文
一個http請求報文由請求行< request-line >、請求頭部< headers >、空行< blank-line >、請求數據< request-body >4個部分組成。下圖是請求報文的一般格式。
請求行
請求行由請求方法字段、URL字段、HTTP協議版本三個字段組成,用空格分開。例如
GET /index.html HTTP/1.1
#常見的請求方法除了GET還有POST,兩者區別是前者將數據存放在url中并以?間隔,后者將數據封裝在HTTP請求數據中,以名稱/值的形式出現。
請求頭部
請求頭部通知服務器有關客戶端請求的信息,由關鍵字/值對組成,每行一對,關鍵字和值之間用:分隔。
空行
最后一個請求頭部之后需要一個空行,發送回車符和換行符,通知服務器以下不再有請求頭部。
請求數據
請求數據不用于GET方法 ,而用于POST方法中。
服務器web相應,發回html響應
響應報文
一個http響應報文由狀態行< status-line >、響應頭部< headers >、空行< blank-line >和響應數據< response-body >4個部分組成,響應報文的一般格式如下圖:
狀態行
狀態行由HTTP協議版本、服務器返回的響應狀態碼以及對應的文本描述組成。
狀態碼由三位數字組成,第一位定義了響應的類別。
1xx:信息性狀態碼,表示服務器已接收了客戶端請求,客戶端可繼續發送請求。
2xx:成功狀態碼,表示服務器已成功接收到請求并進行處理。
3xx:重定向狀態碼,表示服務器要求客戶端重定向。
4xx:客戶端錯誤狀態碼,表示客戶端的請求有非法內容。
5xx:服務器錯誤狀態碼,表示服務器未能正常處理客戶端的請求而出現意外錯誤。
響應頭部
語法規則與請求頭部相同,略。
空行
略
響應數據
服務器返回給客戶端的文本信息。
釋放TCP連接,瀏覽器解析html,渲染呈現頁面
略。
參考文獻
總結
以上是生活随笔為你收集整理的HTML前端连接go语言后段,一次完整的浏览器请求响应过程-Go语言中文社区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为防火墙做单臂路由_华为单臂路由配置详
- 下一篇: 朴素贝叶斯文本分类java_朴素贝叶斯文