职责
- HTTP:生成针对目标服务器的HTTP报文:请给我某个页面的资源
- TCP:为了方便通信,将HTTP切成多个报文段,按照序号进行发送,把每个报文段可靠传给对方。
- IP:搜索对方的地址,一边中转,一边传送
URI
- URI:统一资源标识符,
- URL:统一资源定位符,资源的地点
绝对定位符:
- 查询字符串:可以传入参数
- 片段标识符:可标记出已获取资源的子资源(文档的某个位置)
HTTP
定义:用于服务器端和客户端之前通信的协议。
一定是从客户端开始发起通信的
- 请求: 方法,资源的地址,版本号,请求首部字段,内容实体
- 响应:协议版本,状态码,状态码原因短语,响应首部字段
HTTP是不保存状态的协议:可以快速处理大量的事务。
方法:GET & POST
GET
GET:告诉服务器端我要访问某个资源 GET /index.html HTTP/1.1 HOST : www.hackr.jp if-Modified-Since Jul2012
只是返回从2012年以后更新过的页面。
如果此时间之后没有更新则返回304 Not Modified。
### POST
POST:我要把这个信息告诉服务器端。
HTTP/1.0和HTTP/1.1支持的方法 | |
方法 | 说明 |
GET | 获取资源 |
POST | 传输给服务器端实体主体 |
PUT | 传输文件 |
HEAD | 获得报文首部 |
DELETE | 删除文件 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议连接代理 |
持久连接
持久连接使得多数请求以管线化方式发送。不需要等待,直接发送下一个请求
** 使用Cookie进行状态管理:**
服务器使用Set-Cookie(响应报文的首部字段信息),客户端保存Cookie
客户端第二次发起连接的时候,会加入Cookie
HTTP报文格式
首部 +主体
首部:
- 请求行
- 请求首部行
- 通用首部行
- 实体首部行
不同的编码方式
- 压缩
- 分块发送:Chunked Transfer Coding
发送多种数据的多部分对象集合:MIME
获取部分内容范围请求:206 Partial Content
内容协商返回最合适的内容:
- 服务器驱动协商:
- 客户端驱动协商
- 透明协商
HTTP状态码
成功状态码
## 重定向状态码
客户端错误
服务器错误
与HTTP协作的Web服务器
VM:一台服务器搭建多个站点,使用DNS解析以后IP地址会相同。所以必须在HOST的首部指定主机名或者域名的URL
- 代理:有转发功能的程序,接收客户端的请求并发送给服务器。
- 网关:转发其他服务器的数据的服务器。可以直接处理请求。
- 隧道:中转程序,主要用于客户端和服务器端相隔比较远的时候。
代理
接收客户端的请求并转发,不改变URL,直接转发。
每次通过代理转发请求或者响应时,会追加到Via首部中。
代理的作用:
- 缓存技术:可以减少流量:缓存代理 & 透明代理
- 访问控制:针对特定的URL进行控制,
缓存
服务器返回请求的同时,代理服务器也会保存一份副本
但是缓存有可能和源资源不同步,所以需要设定有效期。
客户端缓存:
网关
将HTTP转换为其他的协议。
隧道
使用SSL建立一条与其他服务器的通道。
首部
通用首部
请求和响应都会用到的首部
Cache-Control
### Connection
作用:
- 控制不再转发给代理的首部字段:Connection:Upgrade
- 管理持久连接:Connection:close
请求首部字段
响应首部字段
## 实体首部字段
请求和响应都含有与实体相关的首部字段
Cookie相关的字段
Set-Cookie
服务器端在准备开始管理客户端的状态的时候,会事先告知各种信息