深入理解计算机系统 第十一章 网络编程 (2)
一、Web基础
Web客户端和服务器之间的交互用的是一个基于文本的应用级协议,叫做HTTP(Hypertext Transfer Protocol,超文本传输协议)。HTTP是一个简单的协议。一个Web客户端(即浏览器)打开一个到服务器的因特网连接,并且请求某些内容。服务器响应所请求的内容,然后关闭连接。服务器读取这些内容,并把它显示在屏幕上。
二、Web内容
对于Web客户端和服务器而言,内容是与一个MIME(Multipurpose Internet Mail Extensions,多用途的网际邮件扩充协议)类型相关的字节序列。
Web服务器以两种不同的方式向客户端提供内容:
取一个磁盘文件,并将它的内容返回给客户端。磁盘文件称为静态内容(static content),而返回文件给客户端的过程称为服务静态内容(serving static content)。
运行一个可执行文件,并将它的输出返回给客户端。运行时可执行文件产生的输出称为动态内容(dynamic content),而运行程序并返回它的输出到客户端的过程称为服务动态内容(serving dynamic content)。
每条由Web服务器返回的内容都是和它管理的某个文件相关联的。这些文件中的每一个都有一个唯一的名字,叫做URL(Universal Resource Locator,通用资源定位符)。
三、HTTP 事务
因为HTTP是基于在因特网连接上传送的文本行的,我们可以使用Linux的TELNET程序来和因特网上的任何Web服务器执行事务。对于调试在连接上通过文本行来与客户端对话的服务器来说,TELNET程序是非常便利的。
为了发起事务,我们输入一个HTTP请求,服务器返回HTTP响应,然后关闭连接。
1)、HTTP请求
一个HTTP请求的组成是这样的:一个请求行(request line),后面跟随零个或更多个请求报头(request header),再跟随一个空的文本行来终止报头列表,一个请求行的形式是:
method URI version
HTTP支持许多不同的方法,包括GET、POST、OPTIONS、HEAD、PUT、DELETE和TRACE。
GET方法指导服务器生成和返回URI(Uniform Resource Identifier,统一资源标识符)标识的内容。URI是相应的URL的后缀,包括文件名和可选的参数。
请求行中的version字段表明了该请求遵循的HTTP版本。
2)、HTTP响应
HTTP响应和HTTP请求是相似的。一个HTTP响应的组成是这样的:一个响应行(response line),后面跟随着零个或更多的响应报头(response header),再跟随一个终止报头的空行,再跟随一个响应主体(response body)。一个响应行的格式是:
version status-code status-message
version字段描述的是响应所遵循的HTTP版本。状态码(status-code)是一个3位的正整数,指明对请求的处理。状态消息(status message)给出与错误代码等价的英文描述。