WebCore中的http響應信息維護

摘要:WebCore源代碼分析,WebKit,dlmu2001,http模塊,http響應,ResourceResponse,ResourceHandle,ResourceRequest,DocumentLoader,瀏覽器內核,curl

在“WebCore中的http請求信息維護”中,我們曾經簡單介紹過http的原理,並分析了WebCore中對請求信息的維護,這篇文章則分析WebCore對http響應信息的維護。

1. 作用

ResourceResponse負責維護服務器返回的http響應的信息,包括http的頭部、體部及其它信息。

2. ResourceResponse類分析

ResourceResponse繼承自ResourceResponseBase,大部分功能在ResourceResponseBase類中實現。

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函數中"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數組(ResponseVector m_responses),對應於派生資源(SubresourceLoader)。

類DocumentLoader中既包含ResourceRequest對象,也包含ResourceResponse對象。DocumentLoader中封裝了部分ResourceRequest和ResourceResponse的接口。

ResourceLoader類中也維護了ResourceResponse對象,在調用didReceiveResponse接口的時候會設置這個對象。

ResourceHandle類維護了ResourceResonse類對象,這是直接同http實現(curl)打交道的類,如curl的headCallback裏面,會把相應的頭部信息設置到這個對象中。

下面是一些函數調用系列圖:

html頁面http請求回調系列
 
派生資源http請求回調系列
4. 其它

MainResourceLoader::willSendRequest發起請求前會根據ResourceResponse的statusCode判斷是否是重定向請求,如果是,設置緩存策略爲ReloadIgnoringCacheData

當OFFLINE_WEB_APPLICATIONS宏打開,啓用離線web應用功能的時候,如果服務器返回4**或者5**的響應,就載入對應的Fallback Resource(這裏4**是否進行進一步分類比較好?)


 版權聲明:本文版權屬於dlmu2001,如有轉載,請註明來源於blog.csdn.net/dlmu2001,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章