第二章、简单的HTTP协议
HTTP协议:
HTTP协议用于客户端(请求资源的一端)和服务器端(响应回复提供资源的一端)的通信,是一种无状态协议
HTTP1.1默认TCP持久连接,管线化发送(并行发送多个请求)
=======================客户端发送请求报文===========================
GET /index.html /HTTP/1.1 ----表示请求访问某台HTTP服务器上的/index.html页面资源,1.1是版本号
Host : hackr.jp -----指明了请求访问的资源对象/请求URI(request-URI)
<请求报文一般是由请求方法、请求URI、协议版本、可选的请求首部字段和请求内容组成>
POST + /form/entry + HTTP/1.1 ---方法+URI+协议版本
Host: hackr:jp ---请求首部字段
Connection: keep-alive ---请求首部字段
Content-Type: applocation/x-www-form-urlencoded ---请求首部字段
Content-Length: 16 ---请求首部字段
name=ueno&age =37 ---内容实体
========================服务器发送响应报文===============================
HTTP /1.1 + 200 + OK ---协议版本+状态码+状态码的原因短语
Date: Tue, 10 Jul 2012 06:50:15 GMT ---响应首部字段---显示了创建响应的日期
Content-Length: 362 ---响应首部字段
Content-Type: text/html ---响应首部字段
<空行>
<html> ---主体
… ---主体
==========================HTTP方法==================================
GET:请求访问已被URL识别的资源呢
POST:传输实体的主体
PUT:传输文件
DELETE:删除文件
HEAD:获取报文首部
OPTIONS:询问支持的方法
TRACE:追踪路径---Max-Forwards=x,每经过一个服务器端就减一,x=0是停止
CONNECT:要求用隧道协议连接代理【CONNECT 代理服务器名:端口号 HTTP版本】
LINK:建立与资源之间的联系(1.1废弃)
UNLINK:断开连接关系(1.1废弃)
=====================================================================
cookie技术:解决HTTP的无状态协议
根据服务器发送的响应报文中的Set-Cookie的首部字段信息停止客户端保存cookie,当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入cookie值再发送出去,服务器接收后检查是哪个客户端的连接请求,对比服务器上的记录可以得到之前的状态信息。
第三章、HTTP报文内的HTTP信息
HTTP报文:
用于HTTP协议交互的信息叫做HTTP报文(请求报文+响应报文),它是由多行数据构成的字符串文本,大致分为报文首部和报文主体两个部分,两者由一行空行(回车/CR+换行/LF)分隔,通常并不一定要有报文主体。
HTTP报文结构:
---请求报文:请求行+请求首部字段+通用首部字段+实体首部字段+其他+空行+报文主体
---响应报文:状态行+响应首部字段+通用首部字段+实体首部字段+其他+空行+报文主体
请求行:用于请求的方法:GET /HTTP/1.1
状态行:相应结果的HTTP版本,状态码和原因短语:HTTP/1.1 200 OK
首部字段:表示请求和响应的各种条件和属性的各类首部。分类:请求/响应/通用/实体首部字段
其他:包含HTTP的RFC例未定义的首部字段,如cookie
报文主体和实体主体:(报文实体是箱子,实体主体是货物)
通常报文主体==实体主体,只有当实体主体在传输过程中进行编码操作,实体的内容发生变化时两者才不相等
内容编码---压缩传输
内容编码指明应用在负责解码内容上的编码格式,并保持实体信息原样压缩,编码之后的实体由客户端接收并解码
常用的内容编码为以下四种:
gzip(GNU zip) ; compress(UNIX 系统的标准压缩) ; deflate(zlib) ; identity(不进行编码)
分块传输编码---分割发送的编码
把实体主体分块的功能称为分块传输编码,确保在HTTP通信过程中,传播的数据过大时浏览器能够逐步显示页面。
分割后的每一块数据会用十六进制来表示大小,实体的最后一块数据会使用0(CR+LF)来标记结尾。
分割后的数据块最后会由接收到的客户端进行解码恢复成原来的实体主体。
多部分对象集合---容纳多份不同类型的数据
包含如下对象:multipart/form-data ; multipart/byteranges 。
在HTTP报文中使用多部分对象集合时要在首部字段中加上Content-type。
范围请求---获取部分内容
范围请求服务于HTTP可恢复的机制,,所谓恢复是指从之前下载的中断处恢复下载。
要实现该功能需要指定下载的实体范围:
Range: bytes=5001-10000//表示5001到10000字节
Range: bytes=5001-//表示5001字节之后全部的
Range: bytes=0-3000,5000-7000//表示一开始到3000字节和5000到7000字节的多重范围
---响应---
针对范围请求,响应会返回状态码为206 Partial Content的响应报文,对于多重范围,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文。
若服务器端无法响应范围请求,则会返回状态码200 OK和完整的实体内容??
内容协商---返回最合适的内容,以语言、字符集、编码方式等为基准判断合适的响应的资源
类型*3:服务器驱动协商(服务器自行处理);客户端驱动协商(用户自行选择);透明协商(前两个的结合体)