前段時間有人問我一個簡單的問題,html如何建立解析的? 我講了一大堆,什麼經過DocumentLoader, CachedResourceLoader, CacheResource, ResourceLoaderScheduler, ResourceHandle這些類一步一步的完成cache查找而後請求下載等等。 html
口若懸河,直到我調試xml解析時,我才發現好多問題都與理解的不一致,在分析源碼的時候只瞭解了大致步驟。細節你真的清楚嗎? 前端
1、HTTP header 網頁頭請求 程序員
列舉幾個重要的 web
Accept 瀏覽器 |
指定客戶端可以接收的內容類型 緩存 |
Accept: text/plain, text/html 服務器 |
Accept-Charset 微信 |
瀏覽器能夠接受的字符編碼集。 cookie |
Accept-Charset: iso-8859-5 網絡 |
Accept-Encoding |
指定瀏覽器能夠支持的web服務器返回內容壓縮編碼類型。 |
Accept-Encoding: compress, gzip |
Accept-Language |
瀏覽器可接受的語言 |
Accept-Language: en,zh |
Connection |
表示是否須要持久鏈接。(HTTP 1.1默認進行持久鏈接) |
Connection: close |
Cookie |
HTTP請求發送時,會把保存在該請求域名下的全部cookie值一塊兒發送給web服務器。 |
Cookie: $Version=1; Skin=new; |
Content-Length |
請求的內容長度 |
Content-Length: 537 |
Content-Type |
請求的與實體對應的MIME信息 |
Content-Type: application/x-www-form-urlencoded |
Date |
請求發送的日期和時間 |
Date: Tue, 15 Mar 2015 15:12:31 GMT |
User-Agent |
User-Agent的內容包含發出請求的用戶信息 |
User-Agent: Mozilla/5.0 (Linux; X11) |
Responses 部分
Accept-Ranges |
代表服務器是否支持指定範圍請求及哪一種類型的分段請求 |
Accept-Ranges: bytes |
Age |
從原始服務器到代理緩存造成的估算時間(以秒計,非負) |
Age: 12 |
Allow |
對某網絡資源的有效的請求行爲,不容許則返回405 |
Allow: GET, HEAD |
Cache-Control |
告訴全部的緩存機制是否能夠緩存及哪一種類型 |
Cache-Control: no-cache |
Content-Encoding |
web服務器支持的返回內容壓縮編碼類型。 |
Content-Encoding: gzip |
Content-Language |
響應體的語言 |
Content-Language: en,zh |
Content-Length |
響應體的長度 |
Content-Length: 348 |
Content-Location |
請求資源可替代的備用的另外一地址 |
Content-Location: /index.htm |
Content-MD5 |
返回資源的MD5校驗值 |
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== |
Content-Range |
在整個返回體中本部分的字節位置 |
Content-Range: bytes 21010-47021/47022 |
Content-Type |
返回內容的MIME類型 |
Content-Type: text/html; charset=utf-8 |
Date |
原始服務器消息發出的時間 |
Date: Tue, 15 Mar 2015 15:12:31 GMT |
Location |
用來重定向接收方到非請求URL的位置來完成請求或標識新的資源 |
Location: http://www.oschina.net/u/2335812/admin |
User-Agent這個字段用戶信息,代表你瀏覽器支持標準,服務器會解析該字段返回不一樣請求(一個適配多終端的網頁會作兼容處理)這點在iptv中要特別注意,好多時候有些前端網頁就是要加些特殊字段才能正常操做甚是鬱悶。HTTP 請求頭裏面能傳送較多的信息
2、webkit 如何區分建立html,xml等解析
它是在HTTP請求返回的200 OK中的Content-Type字段決定的,Content-Type: text/html; charset=utf-8,說明了text
類型html, 字符編碼utf-8。
在DOMImplementation.cpp 中createDocument()建立時判斷type是否爲html,xml,video等這個type就是請求返回OK字段中的Content-Type解析出來的。
3、請求重定向
重定向是在HTTP請求返回的302 Found的Location字段返回的url決定跳轉的新地址
4、設置load緩存大小
在loader/cache/MemoryCache.cpp 文件中setCapacities() 函數能夠設置緩存大小,找到一個資源加載速度與內存使用的平衡點
這樣的細節還有不少,你們也能夠訴說一下您遇到的問題
若是你們對本文章有疑問,能夠直接在公衆號留言,小編第一時間聯繫原創做者幫你耐心解答。
技術人員都有本身的情懷,深陷其中而不被理解,歡迎關注我的微信公衆平臺:程序員互動聯盟(coder_online),一個開發人員的家,來訴說本身的故事。