web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务端的一系列流程
当在浏览器的地址栏内输入URL时,根据URL,Web浏览器从Web服务器端获取文件资源(resource)等信息,从而显示在Web页面。
在两台计算机之间使用HTTP协议通信时,在一条通信线路上,必定有一端是客户端,另一端是服务器端(仅从一条通信线路来说,服务器端和客户端是确定的)
(请求必定由客户端发出,服务器端回复响应,也就是说:肯定是先从客户端开始建立通信的,服务器端在没有收到请求之前是不会发送响应的)
发送的请求
GET /index.htm HTTP/1.1
Host: hacker.jp
起始行开头的GET表示请求访问服务器的类型,称为方法(method)。随后的字符串/index.htm指明了请求访问的资源对象,也叫做请求URI(request-URI)。最后的HTTP/1.1,即就是HTTP的版本号,用来提示客户端使用的HTTP协议功能。
大概意思就是:请求访问某台HTTP服务器上的/index.htm页面资源
GET:从指定的服务器中获取数据
POST:提交数据给指定的服务器处理
PUT:传输文件,就像FTP协议的文件上传一样(不带验证机制,任何人都可以上传文件,存在安全性问题)
HEAD:获得报文首部(和GET方法是一样的,只是不返回报文主体部分)
DELETE:删除文件(按请求URI删除制定的资源,和PUT一样,不带验证机制)
OPTIONS:询问支持的方法, 如:返回(GET,POST,HEAD)
TRACE:追踪路径,让web服务器端将之前的请求通信环回给客户端的方法;发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器端就将该数字减一,当刚好减到0时,就停止继续传输,最后接收到请求的服务器端则返回状态码200 OK的响应;客户端通过TRACE方法可以查询发送出去的请求是咋样被加工修改的,这是因为想要连接到源目标服务器可能会通过代理中转;但TRACE不常用,容易引发CST(Cross - Site - Tracing,跨站追踪)
客户端 --(trace)--代理服务器--(trace)--代理服务器--(trace)--服务器
max-forward:2 max-forward:1 max-forward:0
CONNECT:要求用隧道协议连接代理
在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要使用SSL(Secure Sockets Layer安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输
HTTP是不保存状态的协议
使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息
不做持久化处理,当然这也是为了更快的处理大量的事务,确保协议的可伸缩性,而特意把HTTP协议设计的如此简单的
(但是,有时候,我们也要保留用户的状态:比如,我们登录一个网站,然后跳转(必须保证继续登录的状态啊))
不可质疑:不保存状态,可以减少服务器的cpu及内存资源的消耗
Cookie
HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,引入了Cookie技术
1,客户端发送请求,服务器端在响应中添加Cookie后(发送的响应报文内一个叫做Set-cookie的首部字段信息,通知客户端保存Cookie)返回,此刻客户端已经保存Cookie了,
2,下次,客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie后发送过去
3,服务器端发现客户端发送过来的Cookie后,会去检查究竟是从那一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息
1,
GET /reader/ HTTP/1.1
Host: hacker.jp
*首部字段内没有Cookie的相关信息
2,(响应报文,服务器端生成Cookie信息)
HTTP /1.1 200 ok
Date:Thu,12 Jul 2012 07:12:20 GMT
Server:Apache
<Set-Cookie:sid = 1342077140226724;path = /;expires = Wed,10-Oct-12 07:12:20 GMT>
3,(请求报文,自动发送保存着Cookie的信息)
GET /image/ HTTP/1.1
Host: hacker.jp
Cookie: sid = 1342077140226724
持久连接
HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接,对于以前,传输的主要是容量很小的文本传输,么样什么影响;可是随着HTTP的普及,文档中包含大量图片的情况多了起来
如:发哦那个请求一份包含多张图片的HTML文档对应的Web页面,会产生大量的通信开销(多次断开)。
为了解决上面的问题,出现了持久连接:只要任意一端没有明确提出断开连接,则保持TCP连接状态(减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。明显的提高了速度,在HTTP/1.1中,所有的连接默认都是持久连接)
管线化
持久连接使得多数请求以管线化方式发送成为可能,以前发送请求后需要等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求,当再次遇到发送多个WEb页面的时候,可以一次发送多个请求(比持久连接快多了)