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表示请求结束
总结
GET / HTTP/1.1Host: m.baidu.comConnection: keep-aliveCache-Control: max-age=0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8User-Agent: iPhone AppleWebKitAccept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8,en;q=0.6
响应
HTTP协议规定:一个完整的HTTP 响应包含以下内容:
状态行
响应头
响应体
状态行
状态行:包含了HTTP协议版本、状态码、状态英文名称
# 请求成功HTTP/1.1200OK# 内容无变化HTTP/1.1304Not 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,04Jun201519:31:50GMT# ETag(HASH值,用于检测本地资源和服务器资源是否一致)ETag:"294-4e1862f57e7c0"
注意 :
请求发送的和响应返回的额外信息都是键值对的形式.
text/html : 大文件类型/小文件类型. 比如 : image/png
响应体
响应体:服务器返回给客户端的二进制数据