從瀏覽器輸入url到顯示主頁的過程?
1. 瀏覽器查詢域名的IP地址
2. 瀏覽器和服務器TCP三次握手
3. 瀏覽器向服務器發送一個HTTP請求
4. 服務器處理請求,返回HTTP響應
5. 瀏覽器解析并且渲染頁面
6. 斷開連接
其中使用到的協議有DNS協議(域名解析協議),IP協議,OSPF協議(網路層路由選擇協議),ARP(地址解析協議,將IP地址轉換為MAC地址),NAT(網絡地址轉換,內網到外網),HTTP(端口80,用來傳輸HTTP報文)
說說DNS解析過程
首先查詢本地瀏覽器緩存,如果找到就返回,沒有查詢本地DNS服務器,還沒有的話,那就迭代或者遞歸查詢根域名服務器,頂級域名服務器,權限域名服務器
迭代查詢:自己的事情自己做
遞歸查詢:由根域名服務器幫你把事情都辦了
說說socket和websocket的區別
socket其實是端口+IP+協議
websocket用來解決http不支持持久化連接的問題
常見的端口和協議
FTP 21
TCP 6
UDP 17
DNS 53
Telnet 23 遠程登錄協議
SSH 22 安全遠程管理協議
HTTP 80
HTTPS 443
說說HTTP的狀態碼和含義
1XX 信息狀態碼
2XX 成功狀態碼
3XX 重定向狀態碼
4XX 客戶端錯誤
5XX 服務器端錯誤
口訣:信成重客服 (相信老板就再次(重)就變成了客服)
101 切換請求協議
200請求成功
301 請求資源永久移動,返回新的url
302 請求資源臨時移動,繼續使用原來的url
400 客戶端語法錯誤
401 請求需要進行驗證
403 服務端拒絕執行請求
500 服務器內部錯誤
HTTP有哪些請求方式
GET:對服務器獲取資源的簡單請求
POST:向服務器提交數據請求
PUT:修改指定資源
DELETE:刪除URL標記的指定數據
CONNECT:用于代理服務器
HEAD:獲取URL資源的首部
OPTIONS:返回所有可用的方法
POST增,DELETE刪,PUT改 GET查
get 與post的區別:
從HTTP報文層面看:get請求將信息放在url中,而post將請求信息放在請求體中,get請求攜帶的數據量有限,get請求將數據放在url上不太安全,get相對安全一些
get請求可以被緩存,這都是post所不具備的
get的長度限制:由于get通過url傳遞數據,但是url本身沒有對數據長度限制,而是由瀏覽器進行限制,長度針對整個url chrome是8182個字符
HTTP請求的過程和原理
每個服務器都有一個進程,監聽80端口,以發現是否有瀏覽器向它發出連接建立請求
監聽到連接請求,就會建立TCP連接
瀏覽器向服務器發出瀏覽某個界面的請求,服務器接著就返回所請求的頁面作為響應
最后,釋放TCP連接
說一下HTTP報文結構
HTTP請求報文
報文首部:請求行,請求首部字段,通用首部字段,實體首部字段
空行
報文主體
請求行包含三個字段:方法字段,url,http版本字段
HTTP響應報文
報文首部:狀態行,響應首部字段,通用首部字段,實體首部字段
空行
報文主體
狀態行包含三個字段:協議版本,狀態碼,狀態信息
url和uri的區別
uri 統一資源標識符,標識的是資源
url 統一資源定位符,提供的是資源的路徑
說說HTTP各個版本的區別
HTTP/1.0 默認短鏈接,但可以強制開啟長連接
HTTP/1.1 默認持久連接,分塊傳輸編碼,管道機制(同一個連接中,客戶端可以請求多個資源)
HTTP/2.0 頭信息和數據體都是二進制,完全多路復用:客戶端和瀏覽器都可以發送多個請求或者回應,而且不用按照順序一一對應,引入頭文件壓縮機制,使用gzip或者compress壓縮后再發送,且允許服務器主動向客戶端發送資源
HTTP/3 傳輸層基于UDP,靠QUIC保證可靠性:這就是3相對于之前最大的更改
QUIC(快速UDP網絡連接):多路復用無阻塞,首次握手需要1RTT完成密鑰交換,隨后就直接發送數據,通過Connection ID標識連接
HTTP什么時候超時
HTTP可以設置keep-alive timeout 當TCP閑置超過這個時間就會關閉
也可以由tcp實現,閑置keep-alive timeout后發送偵測包,如果沒有回復,那么就每隔一段時間(tcp_keepalive_intvl)再發一次,知道發送了tcp_keepalive_probes次,就會丟棄該連接
請介紹下HTTPS?
端口號位443,加入了SSL/TSL協議,使得報文可以加密傳輸,TCP握手后,還需要進行SSL/TSL握手
包含以下機制:
? ? ? ? 信息加密:保證信息不被竊取
? ? ? ? 校驗機制:無法篡改信息內容
? ? ? ? 身份證書:證明自己是自己
HTTPS的工作流程:
1.客戶端發出HTTPS請求,連接服務器443端口
2.服務器由一套數字證書,發送給客戶端
3.客戶端收到證書以后,驗證證書合法性,如果安全,就會生成一個隨機的對稱密鑰,用證書的公鑰加密
4.客戶端將公鑰加密后的密鑰發送給服務器
5.服務器用之前保留的私鑰對其進行非對稱解密,得到客戶端的密鑰,然后用客戶端密鑰對返回數據進行對稱加密,并發給客戶端
6.客戶端解密,得到數據
HTTP協議的無狀態?
服務器端不會保存任何客戶端的信息
但是我們可以使用session和cookie來保存信息
cookie 是客戶端的一小塊文本串的數據,客戶端向服務器端發送請求的時候,服務器端會返回一個cookie,再客戶端下次發起請求的時候,服務器可以根據這個cookie判斷用戶的身份和狀態,保存的位ASCLL
session
服務器和客戶端一次會話的過程,保存在服務器上,可以保存任意類型數據
使用cookie中存儲sessionid ,那么當客戶端發送cookie的時候,服務器就能從cookie中得到session,然后查找對應session信息,分布式下可以使用redis分布式緩存實現
如果無法使用cookie,就本地存儲在客戶端中,然后拼接到url中或者放到header中