服务器响应消息的内容,浏览器接收响应消息并显示内容

通过响应的数据类型判断其中的内容

Web服务器发送的响应消息会被分成多个包发送给客户端,然后客户端需要接收数据。首先,网卡将信号还原成数字信息,协议栈将拆分的网络包组装起来并取出响应消息,然后将消息转交给浏览器。这个过程和服务器的接收操作相同。接下来,我们来看一看浏览器是如何显示内容的。

要显示内容,首先需要判断响应消息中的数据属于哪种类型。Web可以处理的数据包括文字、图像、声音、视频等多种类型,每种数据的显示方法都不同,因此必须先要知道返回了什么类型的数据,否则无法正确显示。

这时,我们需要一些信息才能判断数据类型,原则上可以根据响应消息开头的Content-Type头部字段的值来进行判断。这个值一般是下面这样的字符串。

其中“/”左边的部分称为“主类型”,表示数据的大分类;右边的“子类型”表示具体的数据类型。在上面的例子中,主类型是text,子类型是html。主类型和子类型的含义都是事先确定好的,表6.1列出了其中主要的一些类型。

a6b52928050f6fcdb3849cb2d32575c3.png

此外,当数据类型为文本时,还需要判断编码方式,这时需要用charset附加表示文本编码方式的信息,内容如下。

这里的utf-8表示编码方式为Unicode,如果是euc-jp就表示EUC编码,iso-2022-jp表示JIS编码,shift_jis表示JIS编码

除了通过Content-Type判断数据类型,还需要检查Content-Encoding头部字段。如果消息中存放的内容是通过压缩或编码技术对原始数据进行转换得到的,那么Content-Encoding的值就表示具体的转换方式,通过这个字段的值,我们可以知道如何将消息中经过转换的数据还原成原始数据。

Content-Type字段使用的表示数据类型的方法是在MIME规格中定义的,这个规格不仅用于Web,也是邮件等领域中普遍使用的一种方式。不过这种方式也只不过是一种原则性的规范,要通过Content-Type准确判断数据类型,就需要保证Web服务器正确设置Content-Type的值,但现实中并非总是如此。如果Web服务器管理员不当心,就可能会因为设置错误导致Content-Type的值不正确。因此,根据原则检查Content-Type并不能确保总是能够准确判断数据类型。

因此,有时候我们需要结合其他一些信息来综合判断数据类型,例如请求文件的扩展名、数据内容的格式等 比如,我们可以检查文件的扩展名,如果为.html或.htm则看作是HTML文件,或者也可以检查数据的内容,如果是以开头的则看作是HTML文档。不仅是HTML这样的文本文件,图片也是一样。图片是经过压缩的二进制数据,但其开头也有表示内容格式的信息,我们可以根据这些信息来判断数据的类型。不过,这部分的逻辑并没有一个统一的规格,因此不同的浏览器以及不同的版本都会有所差异。

浏览器显示网页内容!访问完成!

判断完数据类型,我们离终点就只有一步之遥了。接下来只要根据数据类型调用用于显示内容的程序,将数据显示出来就可以了。对于HTML文档、纯文本、图片这些基本数据类型,浏览器自身具有显示这些内容的功能,因此由浏览器自身负责显示。

不同类型的数据显示操作的过程也不一样,我们以HTML文档为例来介绍HTML文档通过标签表示文档的布局和字体等样式信息,浏览器需要解释这些标签的含义,按照指定的样式显示文档的内容。实际的显示操作是由操作系统来完成的,浏览器负责对操作系统发出指令,例如在屏幕上的什么位置显示什么文字、使用什么样的字体等。

像HTML文档和图片等浏览器可自行显示的数据,就会按照上述方式委托浏览器在屏幕上显示出来。不过,Web服务器可能还会返回其他一些类型的数据,如文字处理、幻灯片等应用程序的数据。这些数据无法由浏览器自行显示,这时浏览器会调用相应的程序。这些程序可以是浏览器的插件,也可以是独立的程序,无论如何,不同类型的数据对应不同的程序,这一对应关系是在浏览器中设置好的,只要按照这一对应关系调用相应的程序,并将数据传递给它就可以了。然后,被调用的程序会负责显示相应的内容。

到这里,浏览器的显示操作就完成了,可以等待用户的下一个动作了。当用户点击网页中的链接,或者在网址栏中输入新的网址时,访问Web服务器的操作就又开始了。

总结

浏览器利用http响应头判断文件类型并决定如何显示

思考

Web服务器返回的数据包括文档、图片等多种类型,客户端如何判断返回数据的不同类型?

参考

HTTP 响应头信息 | 菜鸟教程

HTTP content-type | 菜鸟教程

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值