欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統(tǒng) 1700 0


WebCore內(nèi)核本身并不實(shí)現(xiàn)http協(xié)議,它通過調(diào)用不同平臺(tái)的http庫,比如Qt的QnetWorkRequest,gtk的soup,或者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.htmlHTTP/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打交道的類主要是ResourceRequest,ResourceResonse,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)用MainResourceLoader的load接口的時(shí)候,也會(huì)把ResourceRequest對(duì)象傳遞過去,在MainResourceLoader中維護(hù)相應(yīng)的信息。當(dāng)MainResourceLoader類loadNow接口的時(shí)候,又會(huì)在創(chuàng)建的ResourceHandle的內(nèi)部數(shù)據(jù)結(jié)構(gòu)成員(ResourceHandleInternal)d中維護(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、MainResourceLoader和ResourceHandle類中都維護(hù)ResourceRequest對(duì)象。


3.

根據(jù)資源的種類,除了1和2,請(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的信息(比如url,method,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ì)象可能不一樣

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

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

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日韩福利在线 | 欧美三级免费看 | 91tv在线观看| 精品一区二区三区免费 | 欧美日韩精品一区二区三区视频 | 亚洲乱码在线 | 欧美精品一区二区在线观看 | 国产精品美女久久久久aⅴ国产馆 | 波多野结衣亚洲一区 | 妞干网在线观看 | 日韩av在线中文字幕 | 国产免费久久久久 | 色综合久久综合欧美综合 | 欧美成人全部费免网站 | 在线观看国产视频 | 99久久久久久久 | 一级免费a | 狠狠做深爱婷婷久久一区 | 亚洲电影免费观看高清完整版在线观 | 久久网精品视频 | 免费精品美女久久久久久久久久 | 成人午夜天堂 | 国产一区在线免费观看 | 精品日韩欧美一区二区三区在线播放 | 日本一级高清不卡视频在线 | 精品亚洲国产成av人片传媒 | 亚洲精品一区二区三区福利 | 97超碰免费 | 两性免费视频 | 精品视频一区二区三区 | 中文字幕av网 | 黄网站免费在线观看 | 中文字幕国产一区 | 国产日韩一区二区三区在线观看 | 国产午夜精品一区二区三区嫩草 | 久久丝袜视频 | 日韩欧美色 | 深夜你懂的在线网址入口 | 丰满少妇久久久久久久 | 欧美精彩视频 | 一区二区三区四区国产 |