web服务器的域名格式(超详解读web服务器知识)(19/21)

来源:国外服务器 在您之前已被浏览:1 次
导读:目前正在解读《web服务器的域名格式(超详解读web服务器知识)(19/21)》的相关信息,《web服务器的域名格式(超详解读web服务器知识)(19/21)》是由用户自行发布的知识型内容!下面请观看由(国外主机 - www.2bp.net)用户发布《web服务器的域名格式(超详解读web服务器知识)(19/21)》的详细说明。
笨笨网美国主机,w ww.2 b p .n e t

(b)如果响应体是Transfer-Encoding: chunked格式:这种格式并不知道响应体总长度是多少,也不知道剩余还有多少内容,返回的响应体是以一块一块数据块编码方式,每个数据块前面是当前数据块长度(16进制)加上rn,每个数据块结尾也加上rn为结尾。只有收到一个长度为0的数据块,才知道全部响应体已经结束和收齐了。由于网络传输的复杂性,每次接收数据时,并不一定会完整地收齐一个完整的数据块,所以需要将接收缓冲区的数据交给http_chunk模块判断,是否为接续块、是否收到结尾块等。

处理接收缓冲区数据前,先判断是否收齐了全部响应体,如果收齐了,设置res_body_chunk结束状态,关闭当前代理消息。将接收缓冲区的所有内容添加到http_chunk中解析判断,得出缓冲区的内容哪些是接续的数据块,是否收齐等,将接收缓冲区中那些接续数据块部分写入到.tmp的Raw缓存文件中,其中写文件句柄存放在源HTTPMsg对象中,更新总长度,删除接收缓冲区中已经写入的内容,并将写入成功的数据块的文件位置和长度信息,追加到CacheInfo对象中,并更新到缓存信息文件里。最后判断,如果全部数据块都接收齐全了,关闭当前HTTP代理消息,关闭当前HTTP代理消息,同时正式计算并确定当前收齐了所有数据,设置实际的文件长度。

(c)最后启动发送缓存文件数据到客户端。

(5)向源HTTPMsg的客户端发送响应

发送的响应包括响应头和位于缓存文件中的响应体,调用http_proxy_cli_cache_send来处理:

通过HTTP的承载协议TCP来发送数据前,需要有序地整理待发送的数据内容,一般情况下,待发送的数据内容包括缓冲区数据、文件数据(完整文件内容、部分文件内容等)、未知的需要网络请求的数据等等,这些数据的总长度有可能知道、也可能不知道,这些待发送数据一般情况下,都位于不同存储位置,譬如在内存中、硬盘上、网络里等,其特点是分布式的、不连续的、碎片化的、甚至内容长度非常大(大到内存都不可能全部容纳的极端情况),管理这些不连续的、碎片化、甚至超大块头数据,是由数据结构chunk_t来实现的。

chunk_t数据结构提供了各类功能接口,包括添加各种数据(内存块、文件名、文件描述符、文件指针等)、有序整理、统一输出、检索等访问接口,最主要的功能是该数据结构解决了不同类别数据整合在一起,模拟成为了一个大缓冲区,大大减少了数据读写拷贝产生的巨额性能开销,大大减少了内存消耗。使用该数据结构,只需将要发送的各种数据内容,通过chunk_t的各类数据追加接口,添加到该数据结构的实例对象中,最后通过tcp_writev或tcp_sendfile来实现数据高效、快速、零拷贝方式的传输发送。

基于以上逻辑,向客户端发送数据的主要工作是如何将待发送内容添加到源HTTPMsg中的res_body_chunk中:

(a)首先计算出res_body_chunk中累计存放的响应体数据总长度,加上源HTTP请求文件的起始位置(如果有Range取其起始位置,如果没有Range,缺省为0),得到当前要追加发送给客户端的数据在缓存文件中的位置偏移量。分别考虑两种响应体编码格式的处理情况;

(b)如果响应体是通过Content-Length来标识:

先用HTTP消息响应总长度减去chunk中的响应体总长度,就计算出剩余的有待添加的数据长度。通过CacheInfo的碎片数据管理接口,查询出当前Raw缓存文件中,以(a)中计算出的缓存文件偏移量位置,查出可用的数据长度有多少。

如果Raw缓存文件中存在可用数据,对比剩余数据长度,截取多余部分。将该Raw缓存文件名、文件偏移位置、截取处理过的可用数据长度等作为参数,调用chunk添加数据接口,添加到res_body_chunk中,如果跟chunk中之前存储且未发送出去的数据是接续的,合并处理。如果添加到chunk中的数据总长度达到或超过源请求HTTPMsg消息的响应总长度,则将res_body_chunk设置结束状态,启动TCP发送流程。

如果Raw缓存文件中不存在可用数据,则判断是否向Origin服务器发送HTTP代理请求:当前源HTTP请求中没有其他的代理请求存在、Raw缓存文件数据不完整、源HTTP请求的数据范围不在Raw缓存文件中,这三个条件都满足时,则需要向Origin服务器发送HTTP代理请求。这个代理请求是HTTP GET请求,可能跟源HTTP请求方法不一样,只是获取缓存数据的某一部分内容,其Range值是从源请求起始位置开始,去查找实际Raw缓存文件存储情况,得出的空缺处偏移位置。该HTTP代理请求,只负责下载数据存储到本地缓存文件,其响应头信息并不更新到缓存信息文件中。

笨笨网美国主机,w ww.2 b p .n e t
提醒:《web服务器的域名格式(超详解读web服务器知识)(19/21)》最后刷新时间 2025-03-21 11:16:08,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《web服务器的域名格式(超详解读web服务器知识)(19/21)》该内容的真实性请自行鉴别。