Chrome网络库的请求处理

本文详细解析了HTTP资源加载过程中的关键步骤,从发起请求到获取响应的整个流程,包括缓存处理、网络交互等核心环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ResourceLoaderAndroid::start
->WebUrlLoader::start (或者 clientAndroid->webFrame()->startLoadingResource)
->WebUrlLoaderClient::start

       创建一个网络线程来处理请求

->thread->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(m_request.get(), &WebRequest::start));

---------------------------------------------------------------------------------

网络线程

->WebRequest::start
->net::URLRequest::start
根据URL类型创建不同的Job,并启动URLRequestXXXXJob::Start

【Http】
->URLRequestHttpJob::Start
->AddExtraHeaders()
->取Cookie

->创建HttpCacheTransaction

HttpCacheTransaction

      ->启动事务HttpCache::Transaction::Start

      ->循环Doloop() 状态机

       do {
          switch (state) {
               DoGetBackend();
                       DoGetBackendComplete(rv);
               DoSendRequest();
                       DoSendRequestComplete(rv);
               DoSuccessfulSendRequest();
               DoNetworkRead();
                       DoNetworkReadComplete(rv);
               DoInitEntry();
               DoOpenEntry();
                       DoOpenEntryComplete(rv);
               DoCreateEntry();
                       DoCreateEntryComplete(rv);
               DoDoomEntry();
                       DoDoomEntryComplete(rv);
               DoAddToEntry();
                       DoAddToEntryComplete(rv);
               DoNotifyBeforeSendHeaders();
                       DoNotifyBeforeSendHeadersComplete(rv);
               DoStartPartialCacheValidation();
               DoCompletePartialCacheValidation(rv);
               DoUpdateCachedResponse();
                       DoUpdateCachedResponseComplete(rv);
               DoOverwriteCachedResponse();
               DoTruncateCachedData();
                       DoTruncateCachedDataComplete(rv);
               DoTruncateCachedMetadata();
                       DoTruncateCachedMetadataComplete(rv);
               DoPartialHeadersReceived();
               DoCacheReadResponse();
                       DoCacheReadResponseComplete(rv);
               DoCacheWriteResponse();
               DoCacheWriteTruncatedResponse();
                       DoCacheWriteResponseComplete(rv);
               DoCacheReadMetadata();
                       DoCacheReadMetadataComplete(rv);
               DoCacheQueryData();
                       DoCacheQueryDataComplete(rv);
               DoCacheReadData();
                       DoCacheReadDataComplete(rv);
               DoCacheWriteData(rv);
                       DoCacheWriteDataComplete(rv);
          }
        } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE);


->创建HttpNeworkTransaction   (HttpCacheTransaction::DoSendRequest)

HttpNeworkTransaction
      ->启动事务HttpNetworkTransaction::Start

      ->循环DoLoop() 状态机

       do {
          switch (state) {
               DoCreateStream();
                       DoCreateStreamComplete(rv);
               DoInitStream();
                       DoInitStreamComplete(rv);
               DoGenerateProxyAuthToken();
                       DoGenerateProxyAuthTokenComplete(rv);
               DoGenerateServerAuthToken();
                       DoGenerateServerAuthTokenComplete(rv);
               DoBuildRequest();
                       DoBuildRequestComplete(rv);
               DoSendRequest();     Socket阻塞发送
                       DoSendRequestComplete(rv);
               DoReadHeaders();    Socket阻塞读取
                       DoReadHeadersComplete(rv);
               DoReadBody();         Socket阻塞读取
                       DoReadBodyComplete(rv);
               DoDrainBodyForAuthRestart();
                       DoDrainBodyForAuthRestartComplete(rv);
          }
        } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE);


【Ftp】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值