HTTP协议入门
一、WWW基本概念
WWW是World Wide Web的缩写,意为万维网。要了解什么是万维网,需要先了解超文本的概念。超文本就是一种用于显示信息的文本,而在这个文本中可以包含有跳转到其他文本的超链接,通过这些链接就可以访问与文本相关联的其它文本,就这样通过链接的方式将两个或多个文本关联起来的文本称为超文本。
在用户访问网站时,打开了一个超文本之后有许多链接,点击一个链接就可以跳转到其他文本,也就是能够在多个文本之间来回跳转,这样就形成了一个类似“蜘蛛网”一样的网,称为万维网(World Wide Web, WWW),或称为Web。
WWW定义了3个重要的概念,它们分别是用以标识(描述)服务器某特定资源的位置(URL, Uniform Resource Identifier)、信息的表现形式(HTML, HyperText Markup Language)以及用于将信息传送给用户的方式(HTTP, HyperText Transfer Protocol)。
有了URL,用户通过浏览器就可以直接访问网站,网站上提供的有用的信息都可以称为“Web资源”或“资源”。HTML是一门超文本标记语言,也是一门编程语言,用于开发超文本文档。而HTTP是一种协议规范,规定了Web客户端和Web服务器端之间如何传输信息相关的标准。
如图,用户可在浏览器中键入URL即可访问页面。
使用HTML开发的超文本文件框架如下:
<html>
<head>
<title>TITLE</title>
</head>
<body>
<h1></h1>
<p>blabla... <a href="http://www.example.com/index.html">blabla...</a></p>
<h2></h2>
...
</body>
</html>
二、HTTP协议介绍
HTTP是HyperText Transfer Protocol的缩写,即超文本传输协议,属于应用层协议。HTTP是一种写在文档上的协议规范,它规定了Web客户端和Web服务器端之间的网络通信方式,因此是基于C/S架构的。HTTP协议同其他的应用层协议一样,是为了实现某一具体应用的协议,都需要程序员开发出遵循这种协议规范的程序来实现其功能。HTTP协议也一样,它的实现方式分为两种,分别是客户端实现程序和服务器端实现程序,客户端实现主要为Web浏览器,包括微软的Internet Explorer、Mozilla基金会的Firefox、Google公司的Google Chrome、网景的Navigator、Opera软件公司的Opera以及Apple公司的Safari等,客户端的命令行工具还有curl、elink等,另外爬虫程序也是Web客户端程序的一种;服务器端实现为Web服务器,例如httpd, nginx, tomcat, IIS等。
三、MIME机制
HTTP协议既然叫做超文本传输协议,从字面上看HTTP只能传输文档文件,而用户在浏览器上应该只能获取文档资源。早期的HTTP协议确实只能传送文本格式的文件(超文本也是纯文本文件), 但后来用户之所以能够通过浏览器还能获取图像、音频、视频、程序等形式的资源,是因为HTTP借鉴了电子邮件中的MIME扩展。MIME是Multipurpose Internet Mail Extensions的缩写,意为多用途互联网邮件扩展。在很长的一段时间里,电子邮件只能发送文本格式的文件,引入了MIME扩展之后,电子邮件就能发送图像、音频、视频、程序等形式的数据了。HTTP借鉴了这一点,也引入了MIME机制,因此通过HTTP就能传送非文本格式的文件了。
MIME机制的主要作用是通知客户端对应的某一资源的内容的编码格式,这样客户端就知道要如何显示资源了(可能会借助于操作系统上的工具或浏览器插件)。这种编码格式是通过多媒体资源类型(Content-Type首部)来进行标记的,标记格式为主类型/次类型(major/minor)。常见的MIME类型有:text/plain, text/html, image/gif, image/png, audio/basic, video/avi等。
对于二进制格式的资源(例如图片、视频等)就需要编码再编码为文本格式(可以使用Base64编码),因为HTTP协议只能传输文本格式的数据。
四、HTTP的工作模式
Web客户端(例如Web浏览器)通常请求访问的是互联网上的Web资源,而Web资源是存放在Web服务器上的,Web客户端可向Web服务器发送HTTP请求,而Web服务器则通过HTTP响应回送客户端所请求的数据。
例如,当我们浏览百度页面时(http://www.baidu.com/index.html),浏览器会向百度服务器www.baidu.com发送一条HTTP请求,而百度服务器收到客户端的请求后,会去其本地磁盘上寻找客户端所期望的对象(/index.html),如果服务器查找到该文件,并且Web服务器进程有权限读取该文件,就可以把对象(/index.html)以及对象内容的属性信息(对象长度、对象类型等)等数据通过HTTP响应一起返回给我们的浏览器。如图。
当然,一个正常的Web页面通常由多次请求/响应之后才能显示出来的。
HTTP通信过程由Web客户端发往Web服务器端的请求和Web服务器端返回给Web客户端的响应组成,而从Web客户端发往Web服务器端的请求是由HTTP请求报文构成,从Web服务器端返回给Web客户端的响应则由HTTP响应报文组成。
五、HTTP事务
由一次请求和与之对应的一次响应共同组成的一次通信过程,称为一次HTTP的事务过程。
六、Web资源
Web资源分为:静态资源和动态资源。
①静态资源:无须服务器端作出额外处理,直接返回给客户端的资源。常见的静态资源的格式有.txt, .html, .jpg, .png, .gif, .js, .css, .mp3, .avi等。
②动态资源:服务器端需要通过运行程序,把程序的运行结果发送给客户端的资源。常见的动态资源的格式有.php, .jsp等。
我们平时访问网站时获取的文本、图像、音频、视频等资源都属于静态资源,它们是存放在服务器磁盘上的一段不变的数据流,当客户端请求时,服务器只需要把这些数据打包发送给客户端即可。而动态资源则需要根据需要通过运行程序生成结果,例如我们在淘宝购物时实现的搜索功能,以及互联网搜索引擎等。
我们所说的Web服务器,即存放了Web资源(web resource)的主机,它是HTTP服务器端的程序实现,负责向请求提供对方请求的静态资源,或提供动态资源运行后生成的结果,这些资源通常应该放置于本地文件系统某路径下(该路径称为DocRoot)。在互联网上这些资源都可以通过URL来标识其位置。
七、浏览器加快打开页面的机制
我们知道,当我们使用浏览器访问站点上的页面时,一个页面展示的资源可能有多个,每个资源都需要单独请求,为了加快我们访问站点的速度,在客户端浏览器上实现了两个加速机制,以提供更好的用户体验:
(1)浏览器多线程请求资源。用户打开一个浏览器时,浏览器在后台会启动多个线程,一个线程请求一个资源。
(2)浏览器对静态资源做缓存。