HTTP协议用于客户端与服务端之间的通信
通过请求和响应的交换达成通信
- 请求必定由客户端发出,而服务器端回复响应。服务端在没有接受到请求之前不会发送响应
- 请求报文:
GET /index.htm HTTP/1.1
HOST: hackr.jp
- 由请求方法、请求URI、协议版本、可选的请求部首字段和内容实体构成
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4b98d098e7924d5943b125108517dcc7.png)
- 接收到请求的服务器,会将请求内容的处理结果以响应的形式返回
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html
<html>
...
- 由协议版本、状态码、用以解释状态码的原因短语、可选的响应部首字段以及实体主体构成
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/92a4154642bfba2c7a00ba53938fd14c.png)
HTTP是不保存状态的协议
- stateless 协议,在HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理
- 为了实现保持状态功能,引入了Cookie 技术。
请求 URI定位资源
GET http://hackr.jp/index.htm HTTP/1.1
GET /index.htm HTTP/1.1
Host: hackr.jp
OPTIONS * HTTP/1.1
告知服务器意图的HTTP 方法
GET : 获取资源
- 用来请求访问已被URI识别的资源。指定资源经服务器端解析后返回响应内容。
- 如果请求的资源是文本,则保持原样返回;如果是像CGI(Common Gateway Interface 通用网关接口)那样的程序,则返回执行后的输出结果
GET /index.html HTTP/1.1
HOST: www.hackr.jp
If-Modified-Since: Tus, 12 Jul 2012 07:30:00 GMT
POST : 传输实体主体
POST /submit.cgi HTTP/1.1
Host: www.hackr.jp
Content-Length:1560(1560字节的数据)
PUT 传输文件
- 传输文件,在主体中包含文件的内容,然后保存到请求URI指定 的位置
- HTTP/1.1不带验证机制,一般Web网站不采用该方法。若配合Web应用程序的验证机制,或架构设计采用REST(REpresentational State Transfer ,表征状态转移)标准的同类Web网站,就可能会开房使用PUT方法。
PUT /example.html HTTP/1.1
Host:www.hackr.jp
Content-Type:text/html
Content-Length:1560
HEAD 获得报文首部
- 和GET 方法一样,只是不返回报文主体部分
- 用于确认URI的有效性及资源更新的日期时间等
HEAD /index.html HTTP/1.1
Host:www.hackr.jp
DELETE 删除文件
- 与PUT相反的方法,按请求URI删除指定资源文件
- 一般也不使用
DELETE /exmaple.html HTTP/1.1
Host: www.hackr.jp
OPTIONS 询问支持的方法
OPTION * HTTP/1.1
Host: www.hackr.jp
TRACE 追踪路径
- 让服务器端将之前的请求通信环回给客户端的方法
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/afb0f9898482bd12d4000c7b9d828b8b.png)
TRACE / HTTP/1.1
Host:hackr.jp
Max-Forwards:2
HTTP/1.1 200 OK
Content-Type:message/http
Content-Length:1024
TRACE / HTTP/1.1
Host:hackr.jp
Max-Forwards:2
CONNET 要求用隧道协议连接代理
- 要求在与代理服务器通信的时建立隧道,实现用隧道协议进行TCP通信。
- 主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输
CONNECT 代理服务器名:端口号 HTTP版本
CONNECT proxy.hackr.jp:8080 HTTP/1.1
Host: proxy.hackr.jp
使用方法下达命令
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6f7581c36679624a42132feee3a70ee3.png)
持久连接节省通信量
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/be38b4ed73b5d8e39c936372cab8295b.png)
持久连接
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2673756a77e3da8f673ab9866cadece6.png)
- 好处在于:减少TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载。减小开销时间,提高Web页面显示速度。
- HTTP/1.1 默认为持久连接
- 客户端和服务端都需要支持持久连接
管线化
- 管线化(pipelining)。以前发送请求后需要等待并受到相应才能发送下一个请求,管线化技术可以不用等待相应直接发送下一个请求。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/99fa0a3b184b5806902f3d6cee53e67a.png)
使用Cookie的状态管理
- 通过在请求和响应报文中写入Cookie 信息来控制客户端的状态
- Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的 首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出 去。
- 服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一 个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前 的状态信息。
- 请求报文
GET /reader/ HTTP/1.1
Host: hackr.jp
- 响应报文
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>
Content-Type: text/plain;
charset=UTF-8
- 再次请求报文
GET /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=1342077140226724