亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1863 0


WebCore內(nèi)核本身并不實(shí)現(xiàn)http協(xié)議,它通過調(diào)用不同平臺(tái)的http庫(kù),比如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)頁(yè)中,任何資源對(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)頁(yè)的請(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)論
主站蜘蛛池模板: 久久做 | 91视频精选 | 奇米第一色 | 女女女女女女bbbbbb级毛片 | 久久成人永久免费播放 | 精品久久久久久久久中文字幕 | 免费人成激情视频在线看 | 亚洲国产精品高清在线一区 | h片免费 | 全部免费特黄特色大片视频 | 欧美日日日 | 国产特黄一级毛片特黄 | 国产精品亚洲一区二区三区正片 | 京野结衣免费一区二区 | 久久国产精品2020盗摄 | 久久一区二区三区免费播放 | 女18毛片| 中文字幕精品在线 | 久草视频精品 | 精品综合久久久久97 | 亚洲综合色婷婷在线观看 | 午夜激情男女 | 淫综合网| 能在线观看的一区二区三区 | 欧美视频一二三区 | 国产精品久久久久乳精品爆 | 全免费a级毛片免费看视频免 | 欧美高清视频www夜色资源网 | 国产三级在线精品男人的天堂 | 天天干天天曰天天操 | 天天做人人爱夜夜爽2020毛片 | 久久精品国产精品亚洲毛片 | 交换国产精品视频一区 | 欧美丰满大乳大屁股毛片 | 天天欧美 | 中文字幕一区二区三区精品 | 久久香蕉国产线看观看乱码 | 99视频在线看观免费 | 一区二区三区四区国产 | 日韩欧美综合在线二区三区 | 和日本免费不卡在线v |