要编写两个用于网络通信的应用软件,程序员必须会考虑几个问题:
- 传输的信息的语法和语义
- 客户端或者服务器端是否可以开始通信
- 当通信出错时怎么办
- 什么时候结束通信
为了规范这些细节,程序员编写了应用层协议。应用层协议根据用途划分主要分为两大类:
- Private communication.
- Standardized services.
这个很好理解,对于互联网服务来说,如果你是私人用途的话,这个通信过程是直接的,无需为这个写一个正式地通用的协议(作者接触的实例较少,无法举个很恰当的例子);而如果这个互联网服务希望广大的程序员为它编写服务器软件(用来提供服务)或客户端软件(用来获取服务),这种情形下,应用层协议必须独立于任何实例,并且这个协议的规定必须准确清晰,保证互操作性。例如Web服务。
应用层协议主要有两方面的规范:描述(Representation)和传输(Transfer)。
World Wide Web 是被应用得最广的互联网服务。由于Web很复杂,产生了针对不同部分和细节的协议标准。
URL(Uniform Resouece Location)的基本格式:
protocol:// computer_name:port/ document_name%parameters
HTTP(HyperText Transfer Protocol)的主要表征:
- 使用文本控制消息
- 传输二进制文件
- 上载或下载数据
- 合并缓存
在应用层传输的是HTTP数据包。
A Get request:
GET /item version CRLF
使用HTTP时,浏览器发送版本信息给服务器,然后选择两边都能理解的最高HTTP版本。即HTTP协商。
A basic response header:
HTTP/1.0 status_code status_string CRLF
Server: server_identification CRLF
Last-Modified: date_document_was_changed CRLF
Content-Length: datasize CRLF
Content-Type: document_type CRLF
CRLF
status_code状态码 status_string状态描述
server_identification服务器描述,可能包含服务器域名
content-length the size of the data item单位是byte
content-type 文件类型/文件格式 eg. text/html image/jpeg
Header+blank line+contents