一、web及网络基础
TCP/IP分层管理
应用层——传输层——网络层——链路层
TCP/IP通信传输流
想浏览http://www.xxx.com/aaa/页面,客户端(浏览器)请求DNS服务,得到与域名对应的IP地址,生成HTTP请求报文,TCP将请求报文分割为若干段,依靠IP协议,搜索对方的地址,一边跳转一边传送,TCP将收到的报文段重组为原来的顺序,WEB服务器依靠HTTP协议,对请求的内容进行处理,请求的处理结果同样也用TCP/IP协议向用户回传。
URL格式
协议方案名://登录信息@服务器地址:服务器端口号/带层次的文件路径?查询字符串#片段标识符
http://user:password@www.example.com:80/dir/index.htm?uid=1#ch1
二、HTTP协议
HTTP协议用于客户端和服务器之间的通信,是无状态协议。
客户端发出请求,服务器端响应该请求并返回。
HTTP方法:
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
HEAD | 获得报文首部 |
DELETE | 删除文件 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议连接代理 |
持久连接
只要任意一端没有提出断开连接,则保持TCP连接状态。
管线化
不必等待响应亦可直接发送下一个请求。
COOKIE
cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。
三、HTTP报文内的HTTP信息
HTTP报文
HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的报文叫做请求报文,响应端(服务器端)的报文叫做响应报文。
HTTP报文大致分为报文首部和报文主体两部分,由空行划分(CR+LF)。通常,并不一定要有报文主体。
请求报文首部分为请求行、请求首部字段 、通用首部字段和实体首部字段;
响应报文首部分为状态行、响应首部字段、通用首部字段和实体首部字段。
请求报文和响应报文的首部内容由以下内容组成:
- 请求行
- 状态行
- 首部字段
- 其他(cookie等)
编码提升传输效率
报文主体和实体主体的差异
报文(message)是HTTP通信中的基本单位,由8位组字节流(octet sequence,其中octet为8个比特)组成,通过HTTP通信传输。
实体(entity)作为请求请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
HTTP报文的主体用于传输请求或响应的实体主体。
通常,报文主体等于实体主体,只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
内容编码是指应用在实体内容上的编码格式,并保持实体信息原样压缩,由客户端接收并解码。
常用内容编码有:
- gzip(GNU zip)
- compress(UNIX系统的标准压缩)
- deflate(zlib)
- identity(不进行编码)
分块传输编码(chunked transfer coding),把实体主体分块的功能,将实体主体分成多个块,第一块都会用十六进制来标记块的大小,最后一块会用"0(CP+LF)"来标记。客户端负责解码,恢复被压缩前的实体主体。
四、返回结果的HTTP状态码
状态码描述返回的请求结果,类别有:
类别 | 原因短语 | |
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
主要使用的有14种:
- 200 OK
- 204 No Content
- 206 Partial Content
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 307 Temporary Redirect
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 500 Internal Server Error
- 503 Service Unavailable
五、与HTTP协作的WEB服务器
用虚拟主机可实现同台服务器多个域名。
六、HTTP首部
HTTP首部字段结构
首部字段名:字段值
分类:
- 通用首部字段
- 请求首部字段
- 响应首部字段
- 实体首部字段
通用首部字段(9个)
首部字段名 |
说明 |
Cache-Control |
控制缓存的行为 |
Connection | 逐跳首部、连接的管理 |
Date | 创建报文的日期时间 |
Program | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
请求首部字段(19个)
首部字段名 |
说明 |
Accept |
用户代理可处理的媒体类型 |
Accept-Charset |
优先的字符集 |
Accept-Encoding |
优先的内容编码 |
Accept-Language |
优先的语言(自然语言) |
Authorization |
Web认证信息 |
Expect |
期待服务器的特定行为 |
From |
用户的电子邮箱地址 |
Host |
请求资源所在的服务器 |
If-Match |
比较实体标记(ETag) |
If-Modified-Since |
比较资源的更新时间 |
If-None-Match |
比较实体标记(与If-Match相反) |
If-Range |
资源未更新时发送实体Byte的范围请求 |
If-Unmodified-Since |
比较资源的更新时间(与If-Modified-Since相反) |
Max-Forwards |
最大传输逐跳数 |
Proxy-Authorization |
代理服务器要求客户端的认证信息 |
Range |
实体的字节范围请求 |
Referer |
对请求中的URI的原始获取方 |
TE |
传输编码的优先级 |
User-Agent |
HTTP客户端程序的信息 |
响应首部字段(9个)
首部字段名 |
说明 |
Accept-Ranges |
是否接受字节范围请求 |
Age |
推算资源创建经过时间 |
Content-Disposition |
可以控制返回的资源是下载还是预览(图片) |
ETag |
资源的匹配信息 |
Location |
令客户端重定向至指定URI |
Proxy-Authenticate |
代理服务器对客户端的认证信息 |
Retry-After |
对再次发起请求的时机要求 |
Server |
HTTP服务器的安装信息 |
Vary |
代理服务器缓存的管理信息 |
WWW-Authenticate |
服务器对客户端的认证信息 |
实体首部字段(10个)
首部字段名 |
说明 |
Allow |
资源可支持的HTTP方法 |
Content-Encoding |
实体主体试用的编码方式 |
Content-Language |
实体主体的自然语言 |
Content-Length |
实体主体的大小(单位:字节) |
Content-Location |
替换对应资源的URI |
Content-MD5 |
实体主体的报文摘要 |
Content-Range |
实体主体的位置范围 |
Content-Type |
实体主体的媒体类型 |
Expires |
实体主体过期的日期时间 |
Last-Modified |
资源的最后修改日期时间 |