的2022年愿望是什么?
今年自己也定了個(gè)目標(biāo),我要寫16本編程的書。
同步開啟每天更新公眾號(hào)的任務(wù)。因?yàn)楣娞?hào)更新的內(nèi)容也是我自己每天書里摘錄的一些內(nèi)容。這樣也能夠堅(jiān)持的把書寫下去。
那么,你今年的愿望又是什么呢?可以在留言下記錄下來哦~
面試中愛問的問題:網(wǎng)站請求的過程是怎樣的?
這個(gè)問題如果你如果有逛過一些編程社區(qū),或者是看過一些編程網(wǎng)站,這個(gè)問題你會(huì)發(fā)現(xiàn)經(jīng)常會(huì)出現(xiàn)。特別是新人去面試的過程中,也會(huì)經(jīng)常遇到。在這里我也就簡單的寫寫我自己整理出來的筆記。希望對你的認(rèn)識(shí)有所幫助。
答案:
一個(gè)Web應(yīng)用程序一般都是由客戶端程序與服務(wù)端程序兩部分組成。其中,客戶端主要是指用戶和瀏覽器,用戶可以通過瀏覽器查找所需的資源,而這些資源則位于服務(wù)器上。瀏覽器是一個(gè)工具軟件,它主要有兩個(gè)作用:一是完成與服務(wù)端的交互,二是完成HTML(Hyper Text Mark-up Language,超文本標(biāo)記語言,用來告訴瀏覽器怎樣給用戶展示內(nèi)容)的解析,從而實(shí)現(xiàn)把用戶需要查看的資源信息以直觀的形式展現(xiàn)出來。服務(wù)端用來接收客戶端發(fā)來的請求,并對該請求進(jìn)行處理,找到客戶端請求的資源,最后把查找到的資源返回給客戶端,這些資源主要包括HTML頁面、圖片、音頻、視頻、PDF文件等內(nèi)容。
下圖2-1給出了最基本的頁面請求與響應(yīng)的流程。
圖2-1頁面請求與響應(yīng)
(1) 用戶通過瀏覽器輸入鏈接地址來請求所需的資源。
(2) 瀏覽器接受用戶的請求,并把該請求組裝成指定的格式發(fā)送給服務(wù)端,客戶端與服務(wù)端之間通過HTTP協(xié)議來完成具體的交互。其中請求的數(shù)據(jù)流中主要包含HTTP(Hypertext transfer protocol,超文本傳輸協(xié)議,建立在TCP/IP協(xié)議基礎(chǔ)上的一個(gè)協(xié)議,主要用來實(shí)現(xiàn)客戶端與服務(wù)端之間的通信)請求方法(GET或POST)、請求的網(wǎng)址(URL,全稱Uniform Resource Locator,統(tǒng)一資源定位符)以及請求的一些參數(shù)信息。(當(dāng)然在把數(shù)據(jù)發(fā)送給服務(wù)器之前,首先需要根據(jù)網(wǎng)頁地址獲取服務(wù)器的IP地址,這就需要通過訪問DNS服務(wù)器來完成)。
(3) 服務(wù)器接收到客戶端發(fā)來的請求,并查找用戶所需要的資源。
(4) 服務(wù)器查找到用戶請求的資源后,把該資源返回給客戶端。
(5) 服務(wù)器通過把響應(yīng)消息組裝成特定的消息格式后返回給客戶端,這個(gè)過程通過HTTP協(xié)議來完成。響應(yīng)的數(shù)據(jù)流主要包含狀態(tài)碼(代表請求成功或失敗),Content-type(例如text、picture、HTML等),響應(yīng)消息的內(nèi)容(圖片或HTML格式的內(nèi)容)。
瀏覽器對HTML進(jìn)行解析后并把響應(yīng)結(jié)果展現(xiàn)給用戶。
更多精彩文章,歡迎關(guān)注《琉憶編程庫》。
當(dāng)你在瀏覽器輸入url到發(fā)起http請求,這過程到底發(fā)生了什么?其實(shí)整個(gè)流程如下:
當(dāng)用戶輸入url,操作系統(tǒng)會(huì)將輸入事件傳遞到瀏覽器中,在這過程中,瀏覽器可能會(huì)做一些預(yù)處理,比如 Chrome 會(huì)根據(jù)歷史統(tǒng)計(jì)來預(yù)估所輸入字符對應(yīng)的網(wǎng)站,例如輸入goog,根據(jù)之前的歷史發(fā)現(xiàn) 90% 的概率會(huì)訪問「www.google.com 」,因此就會(huì)在輸入回車前就馬上開始建立 TCP 鏈接甚至渲染了。
接著是輸入url之后,點(diǎn)擊回車,這時(shí)瀏覽器會(huì)對 URL 進(jìn)行檢查,首先判斷協(xié)議,如果是 http 就按照 Web 來處理,另外還會(huì)對這個(gè) URL 進(jìn)行安全檢查
安全檢查完成之后,在瀏覽器內(nèi)核中會(huì)先查看緩存,然后設(shè)置 UA 等 HTTP 信息,接著調(diào)用不同平臺(tái)下網(wǎng)絡(luò)請求的方法。
注意:
瀏覽器和瀏覽器內(nèi)核是不同的概念,瀏覽器指的是 Chrome、Firefox,而瀏覽器內(nèi)核則是 Blink、Gecko,瀏覽器內(nèi)核只負(fù)責(zé)渲染,GUI 及網(wǎng)絡(luò)連接等跨平臺(tái)工作則是瀏覽器實(shí)現(xiàn)的
dns查詢ip
DNS,英文是Domain Name System,中文叫域名系統(tǒng),是Internet的一項(xiàng)服務(wù),他將域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫
假設(shè)用戶在瀏覽器中輸入的是www.google.com,大概過程:
如果輸入的是域名,則需要進(jìn)行dns查詢,將域名解析成ip;
進(jìn)行DNS查詢的主機(jī)或軟件叫做DNS解析器,用戶使用的工作站或電腦都屬于解析器。域名解析就是利用DNS解析器得到對應(yīng)IP過程,解析器會(huì)向域名服務(wù)器進(jìn)行查詢處理。
主要過程如下:
如果以上都沒有找到,則繼續(xù)往下向dns域名服務(wù)器查詢
注意,
域名查詢時(shí)有可能是經(jīng)過了CDN調(diào)度器的(如果有cdn存儲(chǔ)功能的話)
而且,需要知道dns解析是很耗時(shí)的,因此如果解析域名過多,會(huì)讓首屏加載變得過慢,可以考慮dns-prefetch優(yōu)化
tcp/ip請求
有了 IP 地址,就可以通過 Socket API 來發(fā)送數(shù)據(jù)了,這時(shí)可以選擇 TCP 或 UDP 協(xié)議。
http本質(zhì)是tcp協(xié)議。
TCP是一種面向有連接的傳輸層協(xié)議。他可以保證兩端(發(fā)送端和接收端)通信主機(jī)之間的通信可達(dá)。他能夠處理在傳輸過程中丟包、傳輸順序亂掉等異常情況;此外他還能有效利用寬帶,緩解網(wǎng)絡(luò)擁堵。
建立TCP連接一開始都要經(jīng)過三次握手:
三次握手
第一次握手,請求建立連接,發(fā)送端發(fā)送連接請求報(bào)文
第二次握手,接收端收到發(fā)送端發(fā)過來的報(bào)文,可知發(fā)送端現(xiàn)在要建立聯(lián)機(jī)。然后接收端會(huì)向發(fā)送端發(fā)送一個(gè)報(bào)文
第三次握手,發(fā)送端收到了發(fā)送過來的報(bào)文,需要檢查一下返回的內(nèi)容是否是正確的;若正確的話,發(fā)送端再次發(fā)送確認(rèn)包
在TCP連接建立完成之后就可以發(fā)送HTTP請求了。
注意
瀏覽器對同一個(gè)域名有連接數(shù)限制,大部分是 6,http1.0中往往一個(gè)資源下載就需要對應(yīng)一個(gè)tcp/ip請求,而像 HTTP 2.0 協(xié)議盡管只使用一個(gè) TCP 連接來傳輸數(shù)據(jù),但性能反而更好,而且還能實(shí)現(xiàn)請求優(yōu)先級。
后面會(huì)分享更多devops和DBA內(nèi)容,感興趣的朋友可以關(guān)注下!!
404頁面的目的是:告訴瀏覽者其所請求的頁面不存在或鏈接錯(cuò)誤,同時(shí)引導(dǎo)用戶使用網(wǎng)站其他頁面而不是關(guān)閉窗口離開。
現(xiàn)在大部分開源系統(tǒng)都會(huì)為大家考慮到404頁面的跳轉(zhuǎn)引導(dǎo),比如:z-blog/wordpress,都是很不錯(cuò)的開源系統(tǒng)(注意不要用最原始的開源系統(tǒng),而是采用帶有模板的系統(tǒng))。菜鳥后院網(wǎng)站本身也是wordpress的開源程序,然后我們用robin模板。(花299元擁有和菜鳥后院一樣的網(wǎng)站,包括域名和1G阿里巴巴云空間)
搜索引擎使用 http 狀態(tài)碼來識(shí)別網(wǎng)頁的狀態(tài)。當(dāng)搜索引擎獲得不正確的鏈接時(shí),網(wǎng)站應(yīng)該返回一個(gè)狀態(tài)代碼404,告訴搜索引擎放棄索引該鏈接。如果返回一個(gè)200或302狀態(tài)代碼,搜索引擎會(huì)對鏈接進(jìn)行索引,導(dǎo)致許多不同的鏈接指向相同的頁面內(nèi)容。結(jié)果,搜索引擎對這個(gè)網(wǎng)站的信任度大大降低。很多網(wǎng)站存在這個(gè)問題,那就是404頁面返回的是200或302狀態(tài)碼而不是404狀態(tài)碼。
1、做一個(gè)簡單的404頁面,命名如:404.html;
2、通過ftp把這個(gè)404頁面上傳到網(wǎng)站根目錄;
3、進(jìn)入虛擬主機(jī)管理后臺(tái),找到404頁面提交的入口,添加以上404頁面的地址,如:www.cnbackyard.com/404.html(一般空間服務(wù)商都有帶著種功能,也可以直接找他們技術(shù)客服完成這步操作)
4、輸入一個(gè)錯(cuò)誤的鏈接進(jìn)行訪問測試,隨便輸入,比如:www.cnbackyard.com/123.html,如果正確返回到404.html頁面,則算正確;
5、使用站長工具(http://tool.chinaz.com/pagestatus),輸入任意一個(gè)錯(cuò)誤網(wǎng)址,檢查返回值是否為404。如果返回值是200,代表該主機(jī)商設(shè)置有誤,可以與其技術(shù)反饋。
以上操作方法對于一個(gè)seo初學(xué)者來說,還是有點(diǎn)復(fù)雜,同學(xué)們可以關(guān)注燃燈教育直播課程,參加我們的培訓(xùn),理解起來會(huì)更透徹一點(diǎn)。
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。