本帖最後由 michael3636 於 2015-5-1 18:05 編輯
PART 1
- 正名: "POST" 這個叫法是很不科學的,必須正名,它真的真名是: XHR (Xml Http Requset)
墊底的知識點: 當我們打開瀏覽器,在裡面的輸入網址(http://bbs.),然後按下回車之後:
- 瀏覽器連接DNS服務器:把按鍵的域名域名解析為IP地址(117.27.152.245:80),域名是為了讓我們人類好記和容易理解而存在的.真正http通訊,它所需要的永遠是IP地址.
- 當瀏覽器得到IP地址以後:連接這個按鍵論壇的IP
- 連接成功後:向地址服務器發送消息,消息永遠分2個部分
- 瀏覽器自己發給服務的消息:比如:我是啥瀏覽器,我的工作系統是什麼系統,我能處理什麼格式的文件,我比較偏向簡體中文的網頁語言,我從什麼網址來到你這個服務器的等等...
- 我們使用者向服務器提交的請求:比如我要去的地方是按鍵的綜合討論板塊 等等
4.按鍵服務器接受到我們的請求以後開始工作了:
- 首先.給瀏覽器發個應答信息,意思是告訴瀏覽器,你的信息我收到了.我打算幹啥.這個信息是用數字表達的..不同的數字代碼不同的含義比如:200(代表我收到了,下面我將開始發給你你所請求的內容)301(我收到了,你去我給你的網址服務器拿吧,下面我把網址發給你)304(我收到了,你從緩存去拿網頁吧..我就不發了)400(我收到了..但是你發的是啥啊我看不懂)404(我收到了,但是你請求的東西不存在啊)等等
- 如果服務器返回的數字是200,這個工作才存在,服務器給瀏覽器發送數據,數據也包括2個內容,發給瀏覽器本身的和發給我們的,發給瀏覽器的有:我是啥服務器,我發給你的時間是什麼時間(服務器的時間哦,,大家想到點啥?),我發給你的內容是用什麼方式壓縮的,我發給你的內容一共多長,我發給你的網頁是用什麼字符編碼的,等等等 順便提一下:cookie也是在這發的......第2部分:發給我們的網頁的內容
5.瀏覽器開始接受服務器發來的內容,根據服務器發給瀏覽器本身的東西,開始工作,哦..你用gzip壓縮過啊..我就用gzip方式解 壓, 哦,你用gbk編碼的啊..我得用gbk解碼,哦你發的cookie啊..我該存的存,該改的改,,該刪的刪...哦,這是你的網頁源文件啊..我收收收.. 6.數據接收完成後,瀏覽器開始處理數據了,網頁裡的代碼該執行的執行,網頁裡的圖片和文件該下載的下載(這類資源文件是不包含在網頁裡的,網頁裡只有一個鏈接,瀏覽器得燈具鏈接去下載才能得到),根據網頁裡的css內容,基於網頁元素進行排版,最終生成網頁,顯示在我們眼前 7.響應用戶的各種操作,根據用戶的操作做出相應的行為,或者是提交表單.或者去是一個鏈接,或者是運行一段js代碼等等
以上,就是瀏覽器的工作流程,當我們在瀏覽器裡點擊鏈接或者輸入地址的後,,它就和服務器重複的進行如上的工作,從而讓我們看到並操作網頁
以下為本帖隱藏內容 ============================== 一些補充的知識點:
- 一張網頁遠遠不止是一次http請求所得,是很多次請求的綜合體:我們看到的圖片/聽到的聲音/很多js代碼/很多css規則/他們都是以文件形式存在的,瀏覽器得根據網頁得內容去分別下載
- 網頁是帶有代碼的,瀏覽器是會執行代碼的,編寫這個代碼的語言是javascript,也是種腳本語言,IE內核的瀏覽器支持2種腳本語言:javascript和vbs(IE12以前是這樣的,,,據傳IE12也開始不支持vbs了) 其他內核瀏覽器只支持javascript,真因為如此,所以現在的網頁都只帶一種代碼,javascript,簡稱js
- 同一個網址為啥他顯示的是中文版的,我顯示的是英文版的?答案在上面的3,瀏覽器向服務器發的語言偏好不一樣導致的(前提是服務器得有同一個網頁請求得不同語言版本!!!)
- 看到的網頁和源文件對不上? 因為網頁裡的js代碼帶有改變網頁的內容,瀏覽器執行了這些代碼..網頁內容被js改過了,所以不一樣了.
- Cookie是啥: 所有http服務器有個特點,他們沒有記憶力,當你打開一個網頁,馬上再去打開的時候,他們壓根是不知道你幾秒前曾經來過,為了讓服務器克服這個毛病..cookie就誕生了,,,他們由服務器發過來並被瀏覽器保存,瀏覽器每次請求都會帶著保存目標服務器的曾經給過它的cookie...服務器不認識你,,但是它認識cookie..它通過cookie間接的認識..並且也根據cookie的內容知道你曾經在它那幹了點啥.......比如:你登陸過..登陸名是什麼..你上次瀏覽網站是什麼時候,,,你瀏覽過哪些頁面..等等等等...這些信息都直接或者間接的來自cookie...
- Catche是啥:Catche就是緩存,是為了節省帶寬和提高網頁顯示速度而存在的,它是網頁的拷貝副本.除了你的瀏覽器設置,服務器也會告訴瀏覽器啟不啟用緩存功能...當他返回304的時候..瀏覽器就從緩存讀網頁了..同時,網站也不會發給你網頁了..這就節省了服務器的帶寬了..同時,瀏覽器從硬盤讀網頁速度當然遠遠快於服務器傳給你網頁..你的顯示也就快了....上網體驗也就好了
好了,讓我們整理下瀏覽器的功能吧:
- 瀏覽器功能=通過http協議取得網頁源文件,並且根據服務器的要求處理數據(cookie和Catche) +下載源文件裡指定的各種資源文件+執行js腳本代碼+根據css規則進行網頁排版並最終顯示
再進一步:
- 瀏覽器功能=XHR +下載源文件裡指定的各種資源文件+執行js腳本代碼+根據css規則進行網頁排版並最終顯示
所以XHR的功能大家也明白了
- XHR:通過http協議取得網頁源文件,並且根據服務器的要求處理數據(cookie和Catche)的這麼個玩樣.也就是實現了上面瀏覽器功能的1--5的步驟
個人補充:其實這麼定義是根本不全面和完整的.我完全是基於我們在按鍵裡使用它的功能來定義的.在按鍵裡..我們也就是用到了HR(Http Reauqest)功能.X(Xml,一種文檔格式,在網頁應用上有舉足輕重的地位)壓根用不上,大家將就著看吧....那為何叫XHR而不是叫HR呢....全世界都這麼叫嘛..我總不成為了按鍵改成HR吧....
==============================
囉嗦完了,我儘量用了最最普通的文字去解解釋所有涉及的知識概念,可能不是很精確.大家諒解吧..畢竟我的期望是所有人都能看懂!!!
|