`
vvvvbbbb
  • 浏览: 21810 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

WebCore中的http响应信息维护

阅读更多
在“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;

ResourceResponseBase 类的成员函数大多是用来维护上述成员变量。

响应头部以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请求回调系列
à headerCallback(html页面)
à ResourceLoader::didReceiveResponse(ResourceHandle*, const ResourceResponse& response)
à MainResourceLoader::didReceiveResponse(const ResourceResponse& r)  
à PolicyChecker::checkContentPolicy
à FrameLoaderClientQt::dispatchDecidePolicyForMIMEType
à….
à ResourceLoader::didReceiveResponse(const ResourceResponse& r)


派生资源http请求回调系列
à headerCallback
à ResourceLoader::didReceiveResponse(ResourceHandle*, const ResourceResponse& response)
àSubresourceLoader::didReceiveResponse(const ResourceResponse& r)
à ResourceLoader::didReceiveResponse(const ResourceResponse& r)
à ResourceLoadNotifier::didReceiveResponse
à DocumentLoader::addResponse(const ResourceResponse& r)
à DocumentLoader:: m_responses.append(r)
4. 其它

MainResourceLoader::willSendRequest发起请求前会根据ResourceResponse的statusCode判断是否是重定向请求,如果是,设置缓存策略为ReloadIgnoringCacheData

当OFFLINE_WEB_APPLICATIONS宏打开,启用离线web应用功能的时候,如果服务器返回4**或者5**的响应,就载入对应的Fallback Resource(这里4**是否进行进一步分类比较好?)


版权声明:本文版权属于dlmu2001,如有转载,请注明来源于blog.csdn.net/dlmu2001,谢谢。

分享到:
评论

相关推荐

    Delphi 12控件之Delphi12TMS WEB Core 2.6.0.0 Beta Retail Setup for D

    开发者在安装和配置完成后,可以开始探索TMS WEB Core提供的功能,这些功能可能包括但不限于:使用Delphi语言进行Web应用程序的编码、访问丰富的用户界面组件库、以及使用Delphi的强类型语言优势来处理Web应用的数据...

    TMS WEB Core for RAD Studio 10.3.rar

    【TMS WEB Core for RAD Studio 10.3】是一个专为RAD Studio 10.3版本设计的组件库,它扩展了Delphi开发环境,提供了丰富的Web应用程序开发功能。这个压缩包包含了与TMS WEB Core相关的多个文件,用于支持在Delphi中...

    Delphi 12 控件之TMS WEB Core 2.6.0.0 Beta Retail Setup for D12 (Sep

    Delphi 12是一个流行的集成开发环境(IDE),用于快速应用开发(RAD),特别用于...TMS WEB Core的使用将允许开发者在Delphi 12中将Web开发带到一个新的高度,使他们能够构建出更加丰富、互动和响应式的Web应用程序。

    Delphi 12 控件之【已支持D12.2.5】TMS WEB Core vv2.6.1.0 (2024.10.26)更新说明

    Delphi 12中的TMS WEB Core组件库是一个丰富的库,它允许开发者使用Delphi创建Web应用程序。TMS WEB Core vv2.6.1.0版本是在2024年10月26日发布的更新,支持Delphi版本D12.2.5,该更新增加了一些新的特性、改进以及...

    TMS web coreRSXE11 1.0.5.0

    在提供的压缩包中,"TMS web core"很可能是包含所有TMS Web Core库文件、头文件、样例代码、帮助文档等资源的主文件夹。开发者可以解压这个文件,然后在自己的项目中引用相关的库文件,开始使用TMS Web Core进行开发...

    ASP .NET Core 中的请求-响应日志记录

    ASP.NET Core中的请求-响应日志记录对于开发和维护高质量的Web应用是必不可少的。通过合理配置和使用中间件,结合强大的日志框架,开发者可以确保他们能够准确地监控应用的行为,及时地发现和解决问题,从而提升应用...

    C# 调用FiddlerCore实现http/https抓包

    FiddlerCore提供了丰富的API供开发者使用,如`oSession.oRequest.headers`、`oSession.oResponse.headers`以及`oSession.utilDecodeResponse()`等,可以获取请求和响应的详细信息。 总之,通过C#调用FiddlerCore,...

    ASP.NET Core 6 Web API 示例

    ASP.NET Core 6.0是微软推出的一款开源、跨平台的Web应用框架...开发者可以利用.NET 6.0的新特性来编写高效、可维护的代码,并通过Entity Framework Core简化数据库操作,最终创建出能够满足现代Web应用程序需求的API。

    httpcore4.4.5.rar

    6. 从`HttpResponse`中提取响应数据,如状态码、头部信息和实体内容。 四、应用场景 HTTPCore 4.4.5广泛应用于各种场景,包括: 1. **Web客户端开发**:构建自己的HTTP客户端库,实现更精细的控制和更高的性能。 ...

    httpcore-4.4.1

    HTTPCore是Apache基金会开发的一个核心库,主要负责处理HTTP协议的底层实现。在版本4.4.1中,它提供了高效的网络通信能力和灵活的HTTP协议处理机制,是许多Java Web应用和服务器的基础组件。本文将深入探讨HTTPCore ...

    httpcore教程(中文版)

    - **HTTP上下文**:HTTP上下文对象用于在HTTP请求和响应处理过程中传递状态信息,它可以帮助跟踪事务的状态,并且可以在多个组件之间共享。 #### 非阻塞I/O模型 除了传统的阻塞I/O模型之外,HttpCore还支持非阻塞I...

    C#.net core2.1开发的webAPI.rar

    在这个场景中,我们关注的是使用 C#.NET Core 2.1 开发的 Web API,这是一种用于构建 RESTful 服务的技术,广泛应用于前后端分离的应用架构中。 Web API 是 ASP.NET 的一部分,允许开发者创建 HTTP 服务,可以被...

    httpclient-4.5+httpcore-4.4.5架包

    5. 处理响应:从HttpResponse中提取状态码、头信息和实体内容,根据需要进行进一步处理。 这两个库广泛应用于各种Java应用,包括Web服务客户端、爬虫程序、自动化测试工具等。它们提供了丰富的功能,使开发者能够...

    Httpcore4.4与Httpcilent4.4 jar包合集

    在Java开发中,HTTP通信是不可或缺的一部分,特别是在Web应用和服务之间进行数据交互时。Apache HttpClient和Httpcore是两个非常重要的库,它们为Java开发者提供了强大的HTTP客户端功能。本篇文章将详细介绍这两个...

    利用C# Socket 实现HTTP WEB服务器

    在实际应用中,你可能会考虑使用更高级的库,如ASP.NET Core,它提供了一整套用于构建Web服务的框架,简化了HTTP服务器的实现。然而,理解基础的Socket通信对于网络编程来说是非常有益的,特别是在学习和调试过程中...

    ASP.NET Core AutoWrapper 自定义响应输出实现

    ASP.NET Core AutoWrapper 是一个非常实用的工具,它允许开发者快速构建API,专注于核心业务逻辑,而无需过多地处理HTTP响应的格式化。...这对于构建高质量、易于维护的ASP.NET Core Web API项目至关重要。

    Building RESTful Web Services with .NET Core [PDF]

    根据提供的文件信息,本书《利用 .NET Core 构建 RESTful Web 服务》是一本全面介绍如何使用 .NET Core 平台开发 RESTful Web 服务的技术书籍。下面将基于本书的目录来概述每一章节的关键知识点。 ### 第一章:入门...

    详解ASP.NET Core WebApi 返回统一格式参数

    在ASP.NET Core Web API开发中,确保返回的响应数据具有统一的格式是非常重要的,这有助于提高接口的可读性、可维护性和用户体验。本篇文章将详细介绍如何在ASP.NET Core WebAPI中实现返回统一格式参数。 首先,...

    Java中Httpclient需要的jar包(httpclient.jar,httpcore.jar及commons-logging.jar)

    在HttpClient中,这个库被用来记录HTTP客户端的调试信息和错误日志。 Commons Logging允许开发者选择他们喜欢的日志实现,如Log4j或Java内置的日志框架,而无需直接依赖特定的日志实现,提高了代码的可移植性和灵活...

    ASP.NET Core_ Cloud-ready, Enterprise Web Application Development

    ### ASP.NET Core:云就绪、企业级Web应用开发 #### 概述 ASP.NET Core是一种现代化、跨平台且开源的框架,专为构建高性能、云就绪的企业级Web应用程序而设计。它提供了丰富的功能集,包括灵活的依赖注入、模块化...

Global site tag (gtag.js) - Google Analytics