国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
WebCore中的http請(qǐng)求信息維護(hù)(dlmu2001)

      WebCore中的http請(qǐng)求信息維護(hù)(dlmu2001)

 

    WebCore內(nèi)核本身并不實(shí)現(xiàn)http協(xié)議,它通過調(diào)用不同平臺(tái)的http,比如QtQnetWorkRequest,gtksoup,或者curl等,來實(shí)現(xiàn)http協(xié)議的功能。這里將以curl為例,來理解webcore中的請(qǐng)求信息維護(hù)。

    http協(xié)議的細(xì)節(jié),如果希望深入了解的話,可以參考rfc2616,rfc2617。簡(jiǎn)單介紹下它的原理,http協(xié)議遵循的是一個(gè)請(qǐng)求à響應(yīng)的機(jī)制。也就是說,一個(gè)url,對(duì)應(yīng)一個(gè)請(qǐng)求à響應(yīng)鏈。而在網(wǎng)頁中,任何資源對(duì)應(yīng)的都是一個(gè)url。如果客戶端想從服務(wù)器端申請(qǐng)一個(gè)資源,需要發(fā)起一個(gè)請(qǐng)求,http的請(qǐng)求格式是純文本格式,如下是一個(gè)簡(jiǎn)單的例子:

Get /index.html  HTTP/1.1

Accept: text/html,*/*

User-Agent:mozilla/4.0

Host:www.csdn.net

Referer:www.hao123.com

Connection:Keep-Alive

 

 

以上是獲取http://www.csdn.net/index.html的請(qǐng)求。Accept,User-Agent,Host,Referer,Connection都是請(qǐng)求頭部的字段。

Csdn在收到這樣一個(gè)請(qǐng)求以后,如果它的服務(wù)器上確實(shí)存在test.png這個(gè)資源,則返回http響應(yīng)如下

HTTP/1.1 200 OK

Content-Length: 862

Date: Tue, 12 Oct 2010 06:21:46 GMT

Content-Type: text/html

ETag: "b59305a7-35e-484b91e27e9ec"

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

  <meta http-equiv="Content-Type" content="text/html;charset=gb2312">

  <title>csdn.net,中國(guó)領(lǐng)先的it技術(shù)社區(qū)</title>

</head>

<body>

 …………………………….

</body>

</html>

 

這樣,一個(gè)http請(qǐng)求就完成了,流程非常簡(jiǎn)單明了,所以在互聯(lián)網(wǎng)上使用特別廣泛。由于只是一個(gè)簡(jiǎn)單的請(qǐng)求à響應(yīng)機(jī)制,所以http是沒有狀態(tài)這一個(gè)說法的(這同大部分協(xié)議基于狀態(tài)機(jī)的機(jī)制是不同的),當(dāng)然,為了在某些情況下,維護(hù)一個(gè)狀態(tài),http加入了cookie的管理機(jī)制,利用cookie來實(shí)現(xiàn)了一些狀態(tài)的管理。另外,為了節(jié)約網(wǎng)絡(luò)流量,提高性能,http協(xié)議中定義了cache的機(jī)制。

 

http的協(xié)議細(xì)節(jié)實(shí)現(xiàn)并不需要WebCore來關(guān)注,WebCore要關(guān)注的是,如何設(shè)置請(qǐng)求的相關(guān)頭部信息,如何獲取服務(wù)器返回回來的響應(yīng)體部數(shù)據(jù)。

WebKit中同http打交道的類主要是ResourceRequestResourceResonse,ResourceHandle*ResourceHandleManager等,這里先介紹同請(qǐng)求信息維護(hù)相關(guān)的ResourceRequest.

ResourceRequest類的作用比較好理解,基本上就是維護(hù)http請(qǐng)求相關(guān)的信息(app或者內(nèi)核都有可能設(shè)置這些信息),然后當(dāng)WebCore發(fā)起http請(qǐng)求的時(shí)候,可以獲取這些信息,調(diào)用curl的接口設(shè)置對(duì)應(yīng)的http請(qǐng)求字段。在這些信息中,最常用到的是url。

ResourceRequest類繼承于ResourceRequestBase類,絕大部分功能在ResourceRequestBase類中實(shí)現(xiàn)。

一)ResourceRequest構(gòu)造:構(gòu)造一個(gè)ResourceRequest對(duì)象只需要url參數(shù)就夠了,這是比較簡(jiǎn)單的一個(gè)類,沒有維護(hù)其它類的對(duì)象或者句柄。
ResourceRequest(const String& url)
;
ResourceRequest(const KURL& url)
;

二)ResourceRequest對(duì)象的創(chuàng)建與維護(hù)


1.
當(dāng)用戶輸入網(wǎng)址,開始一個(gè)網(wǎng)頁的請(qǐng)求的時(shí)候,會(huì)調(diào)用QwebFrame::load函數(shù),在該函數(shù)中,會(huì)構(gòu)造出ResourceRequest對(duì)象,并將這個(gè)對(duì)象作為一個(gè)參數(shù),調(diào)用FrameLoader類的load函數(shù),DocumentLoader類中會(huì)維護(hù)這個(gè)ResourceRequest,在調(diào)用MainResourceLoaderload接口的時(shí)候,也會(huì)把ResourceRequest對(duì)象傳遞過去,在MainResourceLoader中維護(hù)相應(yīng)的信息。當(dāng)MainResourceLoaderloadNow接口的時(shí)候,又會(huì)在創(chuàng)建的ResourceHandle的內(nèi)部數(shù)據(jù)結(jié)構(gòu)成員(ResourceHandleInternald中維護(hù)ResourceRequest對(duì)象。


2.

點(diǎn)擊一個(gè)鏈接的時(shí)候,也會(huì)通過FrameLoader類的urlSelected發(fā)出一個(gè)新的請(qǐng)求,在發(fā)起請(qǐng)求的時(shí)候構(gòu)造出ResourceRequest對(duì)象。同樣也會(huì)在DocumentLoader、MainResourceLoaderResourceHandle類中都維護(hù)ResourceRequest對(duì)象。


3.

根據(jù)資源的種類,除了12,請(qǐng)求還可以分為子楨請(qǐng)求(如iframe標(biāo)簽),Css請(qǐng)求,Script請(qǐng)求,Image請(qǐng)求,Object請(qǐng)求,Media請(qǐng)求,Worker請(qǐng)求(HTML5),Prefetch請(qǐng)求等,參考ResourceRequestBase類中的TargetType枚舉。


4.

ResourceHandleManager(/curl)類的initializeHandle函數(shù)中,會(huì)通過ResourceHandle類來訪問ResourceRequest對(duì)象,獲取之前設(shè)置過的ResourceRequest的信息(比如urlmethod,user-agent,referer等),調(diào)用curl_easy_setopt接口,設(shè)置到curl里面。


5.FrameLoader

類的addExtraFieldsToRequest接口會(huì)設(shè)置一些請(qǐng)求頭的信息。


6.DocumentLoader

對(duì)應(yīng)的請(qǐng)求是不停地在變化的(比如發(fā)生重定向),所以結(jié)構(gòu)中維護(hù)了多個(gè)ResourceRequest對(duì)象,這些對(duì)象可能不一

 

 

三)其它
在這個(gè)類中,還可以通過cachePolicy,setCachePolicy,allowCookies,setAllowCookiesWebKithttp之間建立起控制的通道


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
WebKit之Http請(qǐng)求(流程詳細(xì) 具體函數(shù)有變化)
WebKit 內(nèi)核源代碼分析 ( 四 )
QT分析之WebKit(四) - net
WebKit移植分析之一
HTTP請(qǐng)求
基于C#的http協(xié)議開發(fā)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服