在“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 for RAD Studio 10.3】是一个专为RAD Studio 10.3版本设计的组件库,它扩展了Delphi开发环境,提供了丰富的Web应用程序开发功能。这个压缩包包含了与TMS WEB Core相关的多个文件,用于支持在Delphi中...
在提供的压缩包中,"TMS web core"很可能是包含所有TMS Web Core库文件、头文件、样例代码、帮助文档等资源的主文件夹。开发者可以解压这个文件,然后在自己的项目中引用相关的库文件,开始使用TMS Web Core进行开发...
FiddlerCore提供了丰富的API供开发者使用,如`oSession.oRequest.headers`、`oSession.oResponse.headers`以及`oSession.utilDecodeResponse()`等,可以获取请求和响应的详细信息。 总之,通过C#调用FiddlerCore,...
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 服务的技术书籍。下面将基于本书的目录来概述每一章节的关键知识点。 ### 第一章:入门...
在HttpClient中,这个库被用来记录HTTP客户端的调试信息和错误日志。 Commons Logging允许开发者选择他们喜欢的日志实现,如Log4j或Java内置的日志框架,而无需直接依赖特定的日志实现,提高了代码的可移植性和灵活...
### ASP.NET Core:云就绪、企业级Web应用开发 #### 概述 ASP.NET Core是一种现代化、跨平台且开源的框架,专为构建高性能、云就绪的企业级Web应用程序而设计。它提供了丰富的功能集,包括灵活的依赖注入、模块化...
在ASP.NET Core Web API开发中,确保返回的响应数据具有统一的格式是非常重要的,这有助于提高接口的可读性、可维护性和用户体验。本篇文章将详细介绍如何在ASP.NET Core WebAPI中实现返回统一格式参数。 首先,...
FiddlerCore是一款强大的网络调试工具Fiddler的.NET库版本,它允许开发人员在自己的应用程序中集成网络抓包和分析功能。FiddlerCore在.NET Core上的实现使其跨平台,不仅限于Windows,还可以在Linux等其他操作系统上...
- **DLL之家.htm**:可能是介绍 DLL 文件的网页,包含有关如何使用和理解 DLL 文件的信息,特别是对于 `System.Web.Http.WebHost` 相关的 DLL。 - **X86** 和 **X64** 文件夹:通常代表不同的处理器架构,X86 适用于...
JSTL提供了各种标签库,如core、fmt、sql等,简化了页面逻辑;EL则允许在JSP页面中直接表达和访问Java对象的属性。 6. **前端技术**:虽然核心是后端开发,但前端界面同样重要。系统可能使用HTML、CSS和JavaScript...
从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer Pages Standard Tag Library)的诞生。
此外,中间件(Middleware)是构建*** Core应用程序的一个核心概念,它允许开发者在处理请求和响应的管道中插入自定义的处理逻辑,可以用于日志记录、认证和授权等。 *** Core还提供了多种日志记录机制,比如内置的...