摘要:WebCore源代碼分析,WebKit,dlmu2001,http模塊,http響應,ResourceResponse,ResourceHandle,ResourceRequest,DocumentLoader,瀏覽器內(nèi)核,curl
在“WebCore中的http請求信息維護”中,我們曾經(jīng)簡單介紹過http的原理,并分析了WebCore中對請求信息的維護,這篇文章則分析WebCore對http響應信息的維護。
1. 作用
ResourceResponse負責維護服務器返回的http響應的信息,包括http的頭部、體部及其它信息。
2. ResourceResponse類分析
ResourceResponse繼承自ResourceResponseBase,大部分功能在ResourceResponseBase類中實現(xiàn)。
FastAllocBase—>ResourceResonseBase—>ResourceResponse
ResourceResponseBase類成員變量一般由http響應的信息轉換而來:
KURL m_url; String m_mimeType; long long m_expectedContentLength; String m_textEncodingName; String m_suggestedFilename; int m_httpStatusCode; String m_httpStatusText; HTTPHeaderMap m_httpHeaderFields; time_t m_lastModifiedDate; bool m_wasCached : 1; unsigned m_connectionID; bool m_connectionReused : 1; RefPtr<ResourceLoadTiming> m_resourceLoadTiming; bool m_isNull : 1;
響應頭部以HTTPHeaderMap的結構存儲,要查找某一個頭部的值,可以參考FrameLoader::didBeginDocument函數(shù)中"X-DNS-Prefetch-Control"擴展頭部的讀取。
m_suggestedFilename用來設置下載的時候默認的文件名(擴展頭部Content-Disposition指定)。
m_textEncodingName用來存儲Charset頭部,在“Webcore中文本資源編解碼”一文中,我們介紹過文本編碼的確定方式,這里是http頭部指定的方式。
3. ResourceResponse類的維護及上下文
一個html幀對應于一個DocumentLoader,而一個html幀中,會有一個html資源,多個派生資源(image,css,object等),所以每個DocumentLoader維護一個m_response,對應于html資源,維護一個ResourceResponse數(shù)組(ResponseVector m_responses),對應于派生資源(SubresourceLoader)。
類DocumentLoader中既包含ResourceRequest對象,也包含ResourceResponse對象。DocumentLoader中封裝了部分ResourceRequest和ResourceResponse的接口。
ResourceLoader類中也維護了ResourceResponse對象,在調(diào)用didReceiveResponse接口的時候會設置這個對象。
ResourceHandle類維護了ResourceResonse類對象,這是直接同http實現(xiàn)(curl)打交道的類,如curl的headCallback里面,會把相應的頭部信息設置到這個對象中。
下面是一些函數(shù)調(diào)用系列圖:
html頁面http請求回調(diào)系列
派生資源http請求回調(diào)系列
4. 其它
MainResourceLoader::willSendRequest發(fā)起請求前會根據(jù)ResourceResponse的statusCode判斷是否是重定向請求,如果是,設置緩存策略為ReloadIgnoringCacheData
當OFFLINE_WEB_APPLICATIONS宏打開,啟用離線web應用功能的時候,如果服務器返回4**或者5**的響應,就載入對應的Fallback Resource(這里4**是否進行進一步分類比較好?)
版權聲明:本文版權屬于dlmu2001,如有轉載,請注明來源于blog.csdn.net/dlmu2001,謝謝。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
