HTTP通讯与F12下的Network学习笔记
前文:作为一名开发人员了解客户端和服务端的数据传输原理是很有必要的。
认识HTTP
HTTP(hypertext transfer protocol,HTTP)是应用层协议.HTTP通过两部分程序实现:一个是成为浏览器的客户机程序和另一个是称为Web服务器的服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行绘画。HTTP定义了这些报文的结构以及客户机和服务端交流报文的方式。
WEB页面
WEB页面是用超文本标记语言(hypertext markup language,HTML)格式制作的文件。所谓标记语言是一套标记标签(markup),例如用尖括号括起来的关键字< html >。Web浏览器读取HTML文档,并以网页的形式显示它们。浏览器不会显示HTML标签,而是使用标签来解释页面的内容。
每个Web页面或文档都是由对象组成的。一个对象可以是由单个URL指定的文件、如HTML文件、JPEG图形、Java程序员或视频片段等。Web页面含有一个基本的HTML文件以以及其他引用对象。例如,如果某WEB页面引用了4个JPEG图形文件和2个视频文件,则该页面连同基本HTML文件就共关联了7个对象。
WEB服务器(Web server)
Web服务器是提供Web信息服务的服务器软件,主要功能包括管理和存储各种Web对象,每个对象由URL寻址;接受来自用户浏览器的服务请求,通过相应的处理来制作并返回Web页面。
例如按F12打开Network我们就可以看到客户机请求的各种文件类型,它们都是以一个对象进行传输的。
WEB浏览器(Web browser)
我们大部分对“浏览器”和“客户机”是不区分的,因为这里我再谈它的时候,其实是在谈向服务器发送请求的那一方。其中,一个浏览器包括一组客户机程序、一组解释程序,以及管理这些管理这些客户程序和解释程序的控制程序。
例如,当用户用鼠标单击一个超链时,控制程序就条用客户机程序从远程服务器上取回该文档,它把输入的HTML文档转换为合适用户显示硬件处理的板式格式的命令。例如遇到一个强制换行标签< BR >,解释程序就输出一个新的行。
Web采用客户/服务器模式工作,其具体工作过程如下:当用户通过Web浏览器想Web服务器发送HTTP请求时,Web服务器会根据HTTP请求中统一资源定位所确定的位置,用HTTP响应返回所请求的Web页面。其中,HTTP定义了Web客户机如何向Web服务器请求Web页面,以及服务器如何向客户机传送Web页面的通信规则。
HTTP的工作过程
HTTP使用TCP作为它的支撑运输协议。HTTP客户机发起一个与服务器的TCP链接,一旦连接简历,该浏览器和服务器进程就可以通过TCP进行可靠数据交互。客户机向它的套接字接口发送HTTP请求报文并从它的套接字接口接受HTTP响应报文。
为了简化操作,HTTP被设计为一个无状态协议(stateless protocol)。**这意味着Web服务器和客户机都不会记忆上一次HTTP的交互情况,也不存储任何关于彼此的状态信息。**例如,加入某客户机用一次HTTP交互对系统进行了注册,获得了进入服务器操作的权限,但在下次交互汇总,该服务器却会忘记这一切,使后继的HTTP交互难以正常进行。尽管HTTP自身无法解决这个问题,但很多Web系统的开发工具却提供了将相关HTTP操作关联起来的Session对象。当用户在应用程序页面之间跳转时,Session对象中的变量不会被清楚,使系统能够知道哪些HTTP操作属于同一个会话。
WebSocket
为什么需要 WebSocket?
初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?
答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。
这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。
WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
WebSocket是HTML5开始提供的一种在单个TCP连接上的全双工通讯协议。
其他特点包括:
(1)建立在 TCP 协议之上,服务器端的实现比较容易。
(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
(3)数据格式比较轻量,性能开销小,通信高效。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于 HTTP 请求每次都要携带完整的头部,此项开销显著减少了。
(4)长连接,保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
(5)没有同源限制,客户端可以与任意服务器通信。
(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
总结:WebSocket 是 HTML5 开始提供的一种独立在单个 TCP 连接上进行全双工通讯的有状态的协议(它不同于无状态的 HTTP),并且还能支持二进制帧、扩展协议、部分自定义的子协议、压缩等特性。
–
websocket这部分来自于他人博客,也算是和我慢慢理解阅读的HTTP相对应上了。
还有F12下面的这个菜单项还没补充完整,过些天再总结。