简单的HTTP协议
一、HTTP的特征
1、用于客户端和服务端的通信
HTTP协议能够分清哪端是客户端,哪个是服务端。
2、通过请求和响应类达成通信
肯定是先从客户端发出请求,服务端接受到请求后,返回响应。
请求报文
GET src/index.html HTTP/1.1
Host: hark.jp
Connection: keep-alive
Content-Type: application/x-wwww-form-urlencoded
Content-Length: 16
name=meils&id=123456
请求由 请求方法、资源路径URI、HTTP版本、可选的请求首部、内容实体。
响应报文
HTTP/1.1 200 OK
Data: Tue 10 Jul 2012
Content-Length: 162
Content-Type: text/html
<html>
...
</html>
3、HTTP是不保存状态的协议
HTTP是不保存状态的,是无状态的协议,HTTP不会对请求和响应之间的通信进行保存的。不做持久化处理。
这样设计是为了保证能够处理大量的事务,但是随着WEB不断的发展,许多的有状态的需求不断出现,因此最后引入了Cookie技术。
4、通过URI定位资源
- URI为绝对URI
- URI 为相对的URI(需要Host指明网络的域名huoIP地址)
- 如果不访问任何资源,只是请求服务器,使用*代替
GET * HTTP/1.1
二、HTTP的请求方法
GET 获取资源
POST 传输实体主体
PUT 传输文件
允许在请求报文的主体中添加文件内容,然后保存到URI指定的位置。
由于PUT不带有验证机制,存在安全性问题,所以一般不用。
HEAD 获取报文首部
HEAD与GET类似,只是不返回报文主体,用于确认URI的有效性及资源更新的日期等。
DELETE 删除文件
与PUT相反,跟它存在由一样的问题,所以一般也不会用
OPTIONS 询问支持的方法
该方法用来查询针对的URI指定的资源的支持方法。
三、HTPP通信的持久链接
1、最初的版本每次通信都会断开一次连接
每一次通信只进行一次HTTP请求和响应。
2. 随着WEB技术的发展,HTTP通信实现了持久连接
随着WEB技术的发展,一张页面中会包含许多的资源。如果还是采用之前的那种方案,无疑会加重服务器的负担,降低效率。
为了解决上述难题,HTTP/1.1提出了持久连接(HTTPkeep-alive)。
持久连接的特点就是,只要任意一端没有提出断开连接,则一致保持连接状态。
但是持久连接仍然存在一定的问题,那就是每个请求和响应都是单独的,且必须是一个请求收到响应后再发送另一个请求。为了解决这个问题,就出现了管线化
。
四、管线化
四、使用Cookie实现状态保存
使用Cookie来进行状态保存。假设一个需要登陆验证的页面,如果不对用户的登陆状态进行保存,那么每一个页面都需要进行一次登陆,这将会是一件惹人讨厌的事情。
不可否认,HTTP正是因为这种无状态的特性,才使得它较为轻巧简介,自然也减少了服务器CPU及内存资源的消耗。所以才会再各种场景中被使用。
为了再不破坏HTTP这种不保存状态的特性下,还能使得它能够保持状态,就出现了伟大的Cookie
。
Cookie
技术是通过再请求和响应中写入Cookie信息来控制客户端的状态的。
Cookie会根据服务端返回的响应报文中的一个Set-Cookie
的首部信息,来通知客户端进行保存Cookie。当下次请求的是时候就会将这个Cookie
带上。服务端会检查客户端发来的Cookie,会检查究竟是哪个发来的,然后对比服务器上的记录,最后得到那个状态信息。
- 第一次请求
GET /reader/ HTTP/1.1
Host: hack.jp
// 没有cookie信息哦
- 响应
// 返回了Cookie值
HTTP/1.1 200 OK
Date: Tue, 12...
Server: Apache
<set-Cookie: sid=221312321321414; path=/; ...>
- 第二次请求
GET /reader/ HTTP/1.1
Host: hack.jp
Cookie: sid=221312321321414
关于Cookie具体的首部信息,之后会详细学习一下啦。未完待续!!加油~~~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。