在“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,谢谢。
分享到:
相关推荐
开发者在安装和配置完成后,可以开始探索TMS WEB Core提供的功能,这些功能可能包括但不限于:使用Delphi语言进行Web应用程序的编码、访问丰富的用户界面组件库、以及使用Delphi的强类型语言优势来处理Web应用的数据...
【TMS WEB Core for RAD Studio 10.3】是一个专为RAD Studio 10.3版本设计的组件库,它扩展了Delphi开发环境,提供了丰富的Web应用程序开发功能。这个压缩包包含了与TMS WEB Core相关的多个文件,用于支持在Delphi中...
Delphi 12是一个流行的集成开发环境(IDE),用于快速应用开发(RAD),特别用于...TMS WEB Core的使用将允许开发者在Delphi 12中将Web开发带到一个新的高度,使他们能够构建出更加丰富、互动和响应式的Web应用程序。
Delphi 12中的TMS WEB Core组件库是一个丰富的库,它允许开发者使用Delphi创建Web应用程序。TMS WEB Core vv2.6.1.0版本是在2024年10月26日发布的更新,支持Delphi版本D12.2.5,该更新增加了一些新的特性、改进以及...
在提供的压缩包中,"TMS web core"很可能是包含所有TMS Web Core库文件、头文件、样例代码、帮助文档等资源的主文件夹。开发者可以解压这个文件,然后在自己的项目中引用相关的库文件,开始使用TMS Web Core进行开发...
ASP.NET Core中的请求-响应日志记录对于开发和维护高质量的Web应用是必不可少的。通过合理配置和使用中间件,结合强大的日志框架,开发者可以确保他们能够准确地监控应用的行为,及时地发现和解决问题,从而提升应用...
FiddlerCore提供了丰富的API供开发者使用,如`oSession.oRequest.headers`、`oSession.oResponse.headers`以及`oSession.utilDecodeResponse()`等,可以获取请求和响应的详细信息。 总之,通过C#调用FiddlerCore,...
ASP.NET Core 6.0是微软推出的一款开源、跨平台的Web应用框架...开发者可以利用.NET 6.0的新特性来编写高效、可维护的代码,并通过Entity Framework Core简化数据库操作,最终创建出能够满足现代Web应用程序需求的API。
6. 从`HttpResponse`中提取响应数据,如状态码、头部信息和实体内容。 四、应用场景 HTTPCore 4.4.5广泛应用于各种场景,包括: 1. **Web客户端开发**:构建自己的HTTP客户端库,实现更精细的控制和更高的性能。 ...
HTTPCore是Apache基金会开发的一个核心库,主要负责处理HTTP协议的底层实现。在版本4.4.1中,它提供了高效的网络通信能力和灵活的HTTP协议处理机制,是许多Java Web应用和服务器的基础组件。本文将深入探讨HTTPCore ...
- **HTTP上下文**:HTTP上下文对象用于在HTTP请求和响应处理过程中传递状态信息,它可以帮助跟踪事务的状态,并且可以在多个组件之间共享。 #### 非阻塞I/O模型 除了传统的阻塞I/O模型之外,HttpCore还支持非阻塞I...
在这个场景中,我们关注的是使用 C#.NET Core 2.1 开发的 Web API,这是一种用于构建 RESTful 服务的技术,广泛应用于前后端分离的应用架构中。 Web API 是 ASP.NET 的一部分,允许开发者创建 HTTP 服务,可以被...
5. 处理响应:从HttpResponse中提取状态码、头信息和实体内容,根据需要进行进一步处理。 这两个库广泛应用于各种Java应用,包括Web服务客户端、爬虫程序、自动化测试工具等。它们提供了丰富的功能,使开发者能够...
在Java开发中,HTTP通信是不可或缺的一部分,特别是在Web应用和服务之间进行数据交互时。Apache HttpClient和Httpcore是两个非常重要的库,它们为Java开发者提供了强大的HTTP客户端功能。本篇文章将详细介绍这两个...
在实际应用中,你可能会考虑使用更高级的库,如ASP.NET Core,它提供了一整套用于构建Web服务的框架,简化了HTTP服务器的实现。然而,理解基础的Socket通信对于网络编程来说是非常有益的,特别是在学习和调试过程中...
ASP.NET Core AutoWrapper 是一个非常实用的工具,它允许开发者快速构建API,专注于核心业务逻辑,而无需过多地处理HTTP响应的格式化。...这对于构建高质量、易于维护的ASP.NET Core Web API项目至关重要。
根据提供的文件信息,本书《利用 .NET Core 构建 RESTful Web 服务》是一本全面介绍如何使用 .NET Core 平台开发 RESTful Web 服务的技术书籍。下面将基于本书的目录来概述每一章节的关键知识点。 ### 第一章:入门...
在ASP.NET Core Web API开发中,确保返回的响应数据具有统一的格式是非常重要的,这有助于提高接口的可读性、可维护性和用户体验。本篇文章将详细介绍如何在ASP.NET Core WebAPI中实现返回统一格式参数。 首先,...
在HttpClient中,这个库被用来记录HTTP客户端的调试信息和错误日志。 Commons Logging允许开发者选择他们喜欢的日志实现,如Log4j或Java内置的日志框架,而无需直接依赖特定的日志实现,提高了代码的可移植性和灵活...
### ASP.NET Core:云就绪、企业级Web应用开发 #### 概述 ASP.NET Core是一种现代化、跨平台且开源的框架,专为构建高性能、云就绪的企业级Web应用程序而设计。它提供了丰富的功能集,包括灵活的依赖注入、模块化...