HTTP协议用于客户端和服务端之间的通信
应用HTTP协议时,必定是一段担任客户端,另一端担任服务器端
且HTTP协议可以明确区分哪端是客户端或服务器端
2.1 请求和响应
请求必定由客户端发出,肯定是先从客户端开始建立通信,服务端在没有接收到请求之前不会发送响应
客户端发送给HTTP服务器端请求报文的格式:
GET /index.html HTTP/1.1
Host: hackr.jp
..........
上面的报文:
请求方法(method):GET
请求URI: /index/html
协议版本:HTTP/1.1
可选的请求首部字段:Host: hackr.jp
内容实体
响应报文的构成:
2.2 HTTP协议
HTTP协议是stateless的协议(无状态),自身不对请求和响应之间的通信状态保存
为了保存状态:引入了Cookie技术
2.3 如何定位资源
HTTP使用URI定位资源
客户端请求访问资源发送请求时,URI要将请求URI包含在内
指定方式:
如果是对服务器本身发起请求,则可以用*代替URI:
OPTIONS * HTTP/1.1
此例子为查询HTTP服务器端支持的HTTP方法种类
2.4 请求报文中的method
用于告知服务器:客户端的意图
其中LINK,UNLINK已经被HTTP/1.1废弃了
GET
用于来请求访问已经被URI识别的资源,如果请求的是文本,则原样返回,如果是类似CGI的程序,则返回执行后的输出结果
POST
用于传输实体的主体
GET也可以传输实体的主体,但是一般是使用POST(用于传输数据)
PUT
用于传输文件,但是不带验证机制,所以一般不用
要求在请求报文的主体中包含文件内容,保存到请求URI指定的位置
响应:请求执行成功但是没有数据返回
HEAD
获取报文首部
用于确认URI的有效性以及资源更新的日期时间等
DELETE
删除文件,(不带验证机制所以一般也不用)
OPTIONS
查询支持的方法
TARCE
追踪路径
在Max-Forwards首部字段填入数值,经过一个服务器端就减1,减为0时,停止传输,最后接收到请求的服务端返回状态码200 OK的响应
CONNECT
2. 5 HTTP/1.1:持久连接
早期的HTTP通信:
持久连接可以在建立一次TCP连接后进性多次请求和响应的交互,节省通信量
只要任意一端没有明确提出断开连接,就保持TCP连接状态
减少了TCP连接的重复建立和断开造成的额外开销,减轻服务器负载,减少开销时间,让HTTP请求响应更早结束
HTTP/1.1中所有连接默认都是持久连接
2.5.2 管线化
管线化使得发送请求后无需等待响应即可发送下一请求
Cookie
通过在请求和响应报文中写入Cookie信息来控制客户端的状态
HTTP是无状态协议,不对之前发生过的请求和响应的状态做管理
Cookie通过在请求和响应报文中写入Cookie信息来控制客户端的状态
根据从服务器端发送的响应报文中的set-Cookie首部字段信息,通知客户端保存Cookie
,下一次客户端再次发送请求时(向该服务端),会自动在请求报文中写入Cookie值
服务器接收后会根据Cookie对比自己的记录