简单的HTTP协议
HTTP协议和TCP/IP协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。在应用HTTP协时,必定是一端担任客户端角色,另一端担任服务器角色。并且HTTP协议能够分辨出哪端是服务器,哪一端是客户端。
通过请求和响应的交换达成通信
首先声明:请求必定为客户端发出,最后服务器响应请求并且返回
下面我们来看一个例子:
我们来分布讲解
首先看客户端发送请:
- 起始行开头的GET表示请求访问服务器的类型,成为方法(method)
- /index.htm指明了请求访问的资源对象,也叫请求的URI
- 最后的HTTP/1.1,即HTTP版本号这段话翻译过来就是:请求访问某台HTTP服务器上的/index.htm页面的资源
请求报文时由请求方法、请求URI、协议版本、科员的请求首部字段和内容实体构成的
POST /form/entry HTTP/1.1
//请求首部字段
Host: hackr.jp
Connection:keep-alive
Content-type:
接下来我们来看返回的东西:
HTTP/1.1 200 OKDate: Tue,10 Jul 2016 06:50:15 GMT
Content-type: text/html
Content-Length:362
<html>
......
- HTTP/1.1表示服务器的对应HTTP版本
- 200 OK便是处理结果的状态码和原因短语
- 下面是响应首部字段,是首部字段内的一个属性
- 下面的html为主体
HTTP重要的概念
- HTTP是不保存状态的协议,也就是说HTTP自身不会记住上一次返回的东西。但是虽然HTTP没有保持状态的功能,所以人们引入了Cookie技术。这个在以后会讲。
- 请求URI定位资源
HTTP的方法
- GET :获取资源
- POST: 传输实体主体
- PUT:传输文件
- HEAD:获得报文首部,与GET类似,但是不返回报文的主题部分
- DELETE:删除文件
- OPTIONS:询问支持的方法,查询针对请求URI指定的资源支持的方法
- TRACE:追踪路径,让web服务器将之前的请求通信环给客户端的方法
- CONNECT:要求用隧道协议连接代理,要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要使用了SSL和TLS把通信的内容加密后经网络隧道传输。
在这里列举的方法中,LINK和UNLINK已被HTTP/1.1废弃,就不再复述。
HTTP的优化
试想一下,我们在上网的过程中,是不是会经常不停的打开网页,可能一个网页里面都嵌套着许多问题。而HTTP的请求的三次握手,而且没请求一次就得断开
持久化
为了解决上述问题,HTTP/1.1想出了持久连接,意味着三次握手成功后,不会立刻断开,而是在等全部请求结束后才断开,这就大大的减少了通信资源的浪费。
管线化
持久连接使得多数请求以管线话方式得到可能,让原来的一条请求必须等到返回后才能开始另一个请求成为历史,管线化后,能够同时发送多个请求,而不需要一个接一个地等待响应了
使用Cookie的状态管理
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态
Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。>服务器发现客户端发送过来的Cookie后,回去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。