客户端和服务器端:
- 仅从一条通信路线来说,服务器端和客户端是确定的;
- HTTP协议规定,通信一定是先从客户端开始建立,服务器端在没有接受到请求之前不会发送响应;
不保存状态:
- HTTP是无状态协议,对发送过的请求和响应都不做持久化处理,即不会根据之前的请求和响应的状态进行本次请求处理;
- 这是为了更快地处理大量事务;
- 使用cookie技术可以进行弥补;
请求/响应报文:
- 请求报文 //请求方法、请求URL、协议版本、可选请求首部字、内容实体
GET /index.html HTTP/1.1 Host: hackr.jp ------------------------------------ POST /form/enrty HTTP/1.1 Host: hackr.jp Connection: keep-alive Connection-Type: application/x-www-form-urlencoded Content-Length: 16 name=ueno&age=37
- 响应报文 //协议版本、状态码、解释状态码的原因短语、可选的响应首部字段、响应主体
HTTP/1.1 200 OK Date: Tie, 10 Jul 2012 06:50:15 GMT Content-Length: 362 Content-Type: text/html <html> ......................
- 请求方法:HTTP/1.1
- GET:用来请求访问已被URI识别的资源;指定的资源经服务器端解析后返回响应内容;即:
- 请求文本,直接返回;
- 请求CGI(通过网关接口)那样的程序,则返回执行后输出的结果;
- POST:用来传输实体的主体;
- HEAD:和GET方法一样,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间;
- OPTIONS:用来查询针对请求URI指定资源支持的方法;
- PUT:传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置;由于HTTP/1.1的PUT方法自身不带验证机制,因此一般不采用;
- DELETE:删除文件,与PUT方法相反;但也不不带验证机制,一般不采用;
- TRACE:让web服务器端将之前的请求通信返回给客户端;可以用来查询发送出去的请求是怎样被加工修改的;但不常用且易引发XST(跨站追击);
- CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信;
- GET:用来请求访问已被URI识别的资源;指定的资源经服务器端解析后返回响应内容;即:
持久连接:早期的HTTP协议中每进行一次通信就断开TCP连接;目前的HTTP协议已经实现了持久化连接;只要任意一端没有明确提出断开连接,则保持TCP连接状态;
管线化:从前发送请求后需等待并收到响应才能发送下一个请求;持久化连接实现之后,可以实现管线化技术,即同时并行发送多个请求;
Cookie的状态管理://Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态;
- 客户端:cookie会根据从服务器端发送的响应报文内觉得Set-Cookie的首部字段信息通知客户端保存Cookie;当下次客户端往服务器端发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去;
- 服务器端:发现客户端发送过来的Cookie之后,会去检查究竟是从哪一个客户端发出的连接请求,然后对比服务器上的记录,最后得到之前的状态信息;