初识HTTP事务

概述

web客户端和服务器之间的交互用的是一个基于文本的应用级协议——HTTP(超文本传输协议)。一个web客户端打开一个到服务器的因特网连接,并且请求某些内容。服务器响应所请求的内容,然后关闭连接。浏览器读取这些内容,并把它显示在屏幕上。

对于web客户端和服务器而言,内容是与一个MIME类型相关的字节序列,常用MIME类型有:

text/plain
text/html
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/octet-stream

更多MIME相关内容,参考这里

web服务器以两种不同的方式向客户端提供内容:

  1. 取一个磁盘文件(静态内容),并将它的内容返回给客户端,返回过程叫做服务静态内容。
  2. 运行一个可执行文件(产生的输出叫做动态内容),并将它的输出返回给客户端,返回过程叫做服务动态内容。
    每条由web服务器返回的内容(URL)都是和它管理的某个文件相关联的,可执行文件的URL可以在文件名后包含程序参数。‘?’字符分割文件名和参数,’&’字符分割每个参数

HTTP请求

一个HTTP请求的组成是这样的:一个请求行,后面跟随零个或多个请求报头,再跟随一个空的文本行来终止报头列表,一个请求行的格式是
method URI version
method表示HTTP支持的方法,包括GET,POST,OPTIONS,HEAD,PUT,DELETE和TRACE。
URI(统一资源标识符)即标识的内容。URI是相应的URL后缀,包括文件名和可选的参数。
version字段表明了该请求遵循的HTTP版本,最新版本是HTTP/1.1。

请求报头为服务器提供了额外的信息,例如浏览器的商标名,活路浏览器理解的MIME类型。请求报头的格式为:
header-name:header-data
上图中的Host请求报头在HTTP/1.0中是不需要的。代理缓存会使用Host报头,这个代理缓存有时会作为浏览器和管理被请求文件的原始服务器的中介。客户端和原始服务器之间可以有多个代理,即所谓的代理链。Host报头中的数据指示了原始服务器的域名,使得代理链中的代理能够判断它是否在本地缓存中拥有一个被请求内容的副本。

HTTP响应

一个HTTP响应的组成是这样的:一个响应行,后面跟随零个或多个响应报头,再跟一个终止响应报头的空行,再跟随一个响应主体,响应主体中包含着被请求的内容。如上图中的HTTP/1.1 200 OK就是响应行。一个响应行的格式是:
version status-code status-message
version描述响应所遵循的HTTP版本。
status-code状态码是一个3位的正整数,指明对请求的处理。
status-message状态消息给出与错误代码等价的英文描述。

一般比较关注的是响应报头中的Content-Type字段,它表示客户端响应主体中内容的MIME类型;以及Content-Length字段,它表示响应主体的字节大小。


参考资料:
《深入理解计算机系统 3th》(CSAPP)