我的HTTP学习之路 (二) 简单的讲述HTTP协议

简单的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

《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

请求由 请求方法、资源路径URI、HTTP版本、可选的请求首部、内容实体。

响应报文

HTTP/1.1 200 OK
Data: Tue 10 Jul 2012 
Content-Length: 162
Content-Type: text/html

<html>
...
</html>

《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

3、HTTP是不保存状态的协议

《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

HTTP是不保存状态的,是无状态的协议,HTTP不会对请求和响应之间的通信进行保存的。不做持久化处理。

这样设计是为了保证能够处理大量的事务,但是随着WEB不断的发展,许多的有状态的需求不断出现,因此最后引入了Cookie技术。

4、通过URI定位资源

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

《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

  1. 如果不访问任何资源,只是请求服务器,使用*代替
GET * HTTP/1.1

二、HTTP的请求方法

GET 获取资源

《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

POST 传输实体主体

《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

PUT 传输文件

允许在请求报文的主体中添加文件内容,然后保存到URI指定的位置。
由于PUT不带有验证机制,存在安全性问题,所以一般不用。

HEAD 获取报文首部

HEAD与GET类似,只是不返回报文主体,用于确认URI的有效性及资源更新的日期等。
《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

DELETE 删除文件

与PUT相反,跟它存在由一样的问题,所以一般也不会用

OPTIONS 询问支持的方法

该方法用来查询针对的URI指定的资源的支持方法。
《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

三、HTPP通信的持久链接

1、最初的版本每次通信都会断开一次连接

每一次通信只进行一次HTTP请求和响应。
《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

2. 随着WEB技术的发展,HTTP通信实现了持久连接

《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

随着WEB技术的发展,一张页面中会包含许多的资源。如果还是采用之前的那种方案,无疑会加重服务器的负担,降低效率。
为了解决上述难题,HTTP/1.1提出了持久连接(HTTPkeep-alive)。

《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

持久连接的特点就是,只要任意一端没有提出断开连接,则一致保持连接状态。

但是持久连接仍然存在一定的问题,那就是每个请求和响应都是单独的,且必须是一个请求收到响应后再发送另一个请求。为了解决这个问题,就出现了
管线化

四、管线化

《我的HTTP学习之路 (二) 简单的讲述HTTP协议》

四、使用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
    原文地址: https://segmentfault.com/a/1190000015232115
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞