瀏覽器HTTP請求分析
普通網(wǎng)民打開網(wǎng)頁,訪問網(wǎng)站,并不需要了解所謂HTTP協(xié)議。作為軟件工程師,了解一下瀏覽器的工作過程還是一件比較有意思的事情。我向大家介紹一下當(dāng)我們在瀏覽器的地址欄里面回車的時候,瀏覽器如何和Web服務(wù)器通信。
DNS域名解析
瀏覽器第一步做的是DNS域名解析。域名解析的主要作用是將域名轉(zhuǎn)換成IP地址。例如www.sina.com.cn就是域名,202.108.33.81就是IP地址。Windows有個命令叫nslookup,就是域名解析命令。
通過nslookup,我們發(fā)現(xiàn)新浪域名解析出好多IP地址,新浪Web網(wǎng)站規(guī)模大,所以Web服務(wù)器比較多,通過多臺Web服務(wù)器解決負(fù)載問題。
建立Socket連接
第二步是和Web服務(wù)器建立Socket連接。Web服務(wù)器缺省是80端口。我們在地址欄里面輸入http://www.sina.com.cn,瀏覽器連接202.108.33.81服務(wù)器的80端口。如果Web服務(wù)器不是80端口,例如8080端口,我們需要輸入http://www.sina.com.cn:8080。
HTTP請求和響應(yīng)
第三步是瀏覽器通過Socket向Web服務(wù)器發(fā)送HTTP請求,接收HTTP響應(yīng)。HTTP協(xié)議比較復(fù)雜,下面是一個HTT請求的例子:
Host:rss.sina.com.cn
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language:zh-cn,zh;q=0.5
Accept-Encoding:gzip,deflate
Accept-Charset:gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive:300
Connection:keep-alive
Cookie:userId=C5bYpXrimdmsiQmsBPnE1Vn8ZQmdWSm3WRlEB3vRwTnRtW <-- Cookie
If-Modified-Since:Sun, 01 Jun 2008 12:05:30 GMT
Cache-Control:max-age=0
HTTP 響應(yīng)消息頭部實例:
Status:OK - 200
Date:Sun, 01 Jun 2008 12:35:47 GMT
Server:Apache/2.0.61 (Unix)
Last-Modified:Sun, 01 Jun 2008 12:35:30 GMT
Accept-Ranges:bytes
Content-Length:18616
Cache-Control:max-age=120
Expires:Sun, 01 Jun 2008 12:37:47 GMT
Content-Type:application/xml
Age:2
Connection:close
下載網(wǎng)頁文本內(nèi)容
第四步瀏覽器下載網(wǎng)頁文本內(nèi)容,網(wǎng)頁文本中標(biāo)記著圖片、CSS文件和Flash等等。瀏覽器分析出這些內(nèi)容后開4個線程對這些內(nèi)容進(jìn)行下載,顯示在屏幕上。