客户端和服务器端交互的过程
- 客户发起连接
- 客户发送请求
- 服务器响应请求
- 服务器关闭连接
概述
通常,有http客户端发起一个请求,创建一个到服务器的端口指定的端口(默认80端口)的TCP连接。http服务器则在那个端口监听客户端的请求。一旦收到请求,服务器向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
请求信息->发出的请求信息包括以下几个
- 请求行
- 例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件。
- (请求)头,
- 例如Accept-Language: en
- 空行
- 其他消息体
请求行和标题必须以<CR><LF>作为结尾。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1协议中,所有的请求头,除Host外,都是可选的。
GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) #一个标识客户端的字符串(应用程序名称,版本,包含的信息,如主机操作系统和语言)
Host: example.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
请求方法
请求方法用来定义操作资源的方式,HTTP/1.1 协议中定义了八种请求方法:
- GET:读取资源数据
- POST:新建资源数据
- PUT:更新资源数据
- DELETE:删除资源数据
- HEAD:读取资源的元数据
- OPTIONS:读取该资源所支持的所有请求方法
- TRACE:回显服务器收到的请求,主要用于测试或诊断
- CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经
由非加密的HTTP代理服务器)
请求头字段:用来传递客户端的更多信息,以及传递解析信息主题的必要信息
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: example.com
Accept-Language: en-us #可接受的语言
Accept-Encoding: gzip, deflate #支持的编码类型
#
- Accept: 客户端接受哪些 Mine 类型。如
Accept: text/html
- Referer: 从那个页面到的该页面。
响应头字段:和请求消息类似,首部字段会包括服务器本身的一些信息指示、以及响应消息本身的元数据
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
常见响应头有:
- Content-Encoding: 数据的编码类型。如
Content-Encoding: gzip
- Server: 服务器的名称。如
Server:thin 1.5.0 codename Knife
- Location: 通知客户端新的资源位置。如
Location: http://www.github.com/login
- Content-Type: 响应数据的类型。如
Content-Type:text/html; charset=UTF-8
Content-Encoding: 响应数据的编码格式。如 gzip
。客户端会根据该值对响应内容解码。