3

简单的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定位资源

  1. URI为绝对URI
  2. URI 为相对的URI(需要Host指明网络的域名huoIP地址)

图片描述

  1. 如果不访问任何资源,只是请求服务器,使用*代替
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具体的首部信息,之后会详细学习一下啦。

未完待续!!加油~~~


Meils
1.6k 声望157 粉丝

前端开发实践者