HTTP协议

HTML编写的Web文档可以在本地浏览其内容。那么如何让互联网上的用户来浏览我们创建的web文档呢?这涉及到web文档在互联网传输需要的协议:HTTP协议。

HTTP(超文本传输协议,HyperText Transfer Protocol)提供了一种发布和接收HTML页面的方法。HTTP协议标准是由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)制定的,其中最著名的是RFC 2616,定义了HTTP协议中现今广泛使用的一个版本—HTTP 1.1。

让我们用一个互联网上的真实网站 http://www.baidu.com 作为例子,来讨论HTML文件是如何从服务器到达我们的浏览器的。

首先我们会打开一个浏览器,比如Chrome,在地址栏中输入 http://www.baidu.com ,接下来百度主页就显示在了浏览器中。在这个过程中,浏览器内部实际做了这样一些事情:

  • 解析URL: http://www.baidu.com 的主机www.baidu.com(即IP)
  • 使用HTTP协议,向该主机发送请求,表示我想要该URL对应的页面
  • 百度服务器应答该请求,并使用HTTP协议传输HTML文档给浏览器
  • 浏览器解析该HTML(web文档)并显示

上述的过程是一个典型的HTTP通信流程:客户端发送请求(request),服务器返回响应(response)。在web开发的目的,便是实现上述过程中百度服务器所做的事情:得到Request,进行一系列计算,返回Response。很显然使用HTTP协议进行通信的过程和之前介绍的客户端-服务器模型是非常吻合的,事实上HTTP协议也是以TCP协议为基础,它的通信过程仍然是通过TCP连接进行,只不过针对Web的特性进行了更高层次的抽象,使得我们开发的应用程序能够更加简单的进行网络通信。

接下来,我们来看看HTTP协议中的这两个实体:Request、Response。

HTTP 请求

HTTP请求理解为一段文本,上面的例子中,我们发送的HTTP请求如下描述:

GET / HTTP/1.1
HOST www.baidu.com

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36

该请求包括如下的含义:

  1. 使用1.1版本的HTTP协议,指定该请求使用GET方法;
  2. 对方主机为www.baidu.com
  3. 接受的响应格式为:HTML、XHTML、XML、图片、或任何其他格式;

    q=0.9为质量值(q value),是一种HTTP协商参数的限定符,在这里表示客户端更喜欢接受哪种格式。

  4. 用户代理(User-Agent)提供了当前浏览器的兼容性能。

这个请求会被发送到www.baidu.com对应的主机的80端口(80是HTTP的默认端口)。

计算机网络采用分层设计,HTTP协议运行在TCP协议之上。TCP协议提供了一对socket(主机+端口)之间的可靠通信,于是HTTP协议只需提供主机名和端口来指定对方计算机,即可在TCP之上与之通信。

HTTP 响应

如果百度的主机成功接收到了我们的请求,那么也会返回一段文本:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

<HTML内容>

上述响应包含了如下的内容:

  • HTTP协议版本,这里是1.1
  • 响应状态码,200表示成功(OK)
  • Content-Type表示响应内容的类型,这里是HTML(还有可能是pdf, image等,浏览器会通过该字段来合适地显示该文档)
  • 响应的主体内容,即URL http://www.baidu.com 所对应的资源:百度首页的HTML文件

实例

我们来手动发送一个HTTP请求,并查看结果!我们需要使用一个工具:Telnet。如果你在使用MacOS或Linux,你的终端(或称Terminal、命令行、Bash)里直接可以使用telnet命令;如果你在使用Windows,则需要开启或者安装Telnet软件。

Telnet协议是TCP/IP协议族的其中之一,是Internet远程登录服务的标准协议和主要方式,常用于网页服务器的远程控制,可供用户在本地主机运行远程主机上的工作。

下图便是在 Telnet 中进行一个HTTP请求的整个过程:

可以看到,服务器返回的body中包含了一大段文本——也就是上一节中描述的HTML文档,虽然我们阅读起来很困难,但是浏览器能够很快地将他们翻译成我们能够容易阅读的网页。

MIME类型

在Web上需要传输的数据除了HTML文档之外,还可能包含图片、音频、视频等等不同格式的数据。MIME(Multipurpose Internet Mail Extensions)是指定HTTP协议中传输数据类型的标准,例如:

  • HTML文档:text/html
  • png图片:image/png

通常服务器对于不同类型的数据会在HTTP响应的Header中指定:Content-Type: text/html。这样做的目的是方便浏览器能够很好地识别数据类型,正确的在客户端展示数据。

登录发表评论 注册

反馈意见