基本网络通信模型
请求
HTTP协议规定:一个完整的由客户端发给服务器的 HTTP 请求 需要包含以下内容
- 请求行
- 请求头
- 请求体(可选)
- 请求行
请求行:指定 请求方法、请求资源路径 以及 HTTP协议版本.
GET / HTTP/1.1
GET / 后面的 / 表示访问根目录
- 请求头
请求头:对客户端的环境描述、客户端请求的主机地址等信息.至少包含以
//客户端要访问的服务器主机地址
Host: www.baidu.com
中还可以包含以下信息,告诉服务器一些额外的信息
# 访问结束后,是否断开连接
Connection: keep-alive
# 是否缓存数据
Cache-Control: max-age=0
# 客户端所能接收的数据类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
# 客户端的类型,客户端的软件环境
User-Agent: iPhone AppleWebKit
# 客户端支持的数据压缩格式
Accept-Encoding: gzip, deflate, sdch
# 客户端的语言环境
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
请求体
请求体(可选):客户端发给服务器的具体数据,例如要上传的文件数据- GET请求没有请求体.
- POST请求有请求体.告诉服务器一些类似于用户名和密码的信息.比如注册和登陆.
请求格式
每一项请求信息末尾使用 \r\n
最后一个请求项末尾使用 \r\n\r\n 表示请求结束
响应
HTTP协议规定:一个完整的 HTTP 响应包含以下内容:
- 响应行
- 响应头
- 响应体
- 状态行
状态行:包含了HTTP协议版本、状态码、状态英文名称
# 请求成功
HTTP/1.1 200 OK
# 内容无变化
HTTP/1.1 304 Not Modified
状态码
1XX 消息
2XX 成功
3XX 更多选择
4XX 客户端错误
5XX 服务器错误响应头
响应头:服务器告诉客户端一些信息.包含了对服务器的描述、对返回数据的描述
# 服务器的类型
Server: Apache/2.4.10 (Unix) PHP/5.5.20
# 返回数据的类型
Content-Type: text/html; charset=utf-8
# 返回数据的长度
Content-Length: 660
# 响应时间
Date: Thu, 04 Jun 2015 19:31:50 GMT
# ETag(HASH值,用于检测本地资源和服务器资源是否一致)
ETag: "294-4e1862f57e7c0"
注意 :
请求发送的和响应返回的额外信息都是键值对的形式.
text/html : 大文件类型/小文件类型. 比如 : image/png.响应体
响应体:服务器返回给客户端的二进制数据