HTTP协议简单概述

学习目标

HTTP 协议概述

HTTP 请求响应

HTTP 请求方法

HTTP 响应方法

HTTP 消息报文之请求报文

HTTP 消息报文之响应报文

HTTP 消息报文之通用报文

URL

​ 我们更熟悉 URL(Uniform Resource Locator,统一资源定位符)。URL 正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址。比如,下图的 http://hackr.jp/ 就是 URL。

image-20220305233009217

使用 http: 或 https: 等协议方案名获取访问资源时要指定协议类型。 不区分字母大小写,最后附一个冒号(:)

1.HTTP协议的概述

1.1 http协议用于客户端和服务器之间的通信

​ 在两台计算机使用HTTP协议通信时,在一条通信线路上必定有一端是客户端,另一端是服务端

​ 服务端和客户端的身份可能会转换,但是从一条信路上说是确定的。

1.2 通过请求和响应的交换达成通信

1.2.1 请求方法

HTTP协议规定,请求从客户端发出,最后服务器端响应请求并返回。

实例:

请求

image-20220307183740949

分析
  1. GET表示请求访问服务器的类型,称为方法(method)
  2. /index.htm指明了请求的资源对象,也叫做请求的URL(request-URL)。
  3. HTTP/1.1,是HTTP的版本号,用来提示客户端使用HTTP协议功能。

综合:请求了HTTP服务器上的/index.htm页面

请求报文的构成
请求方法
请求URL
协议版本
可选的请求首部字段
内容实体构成

image-20220317132824459

1.2.2 响应

image-20220317133033482

分析:

  1. HTTP/1.1表示服务器对应的HTTP版本
  2. 200 ok表示处理结果的状态码(status code)和原因短语(reason-phrase)
  3. Date: Tue, 10 Jul 2012 06:50:15 GMT显示创建响应的日期时间,是首部字段(header field)内的一个属性。
  4. 接着一个空行,之后是资源实体主体(entity body)

综合:响应成功返回页面:text/html

响应报文的构成
协议版本
状态码(请求或失败的数字代码)
解释状态码的原因短语
可选的响应首部字段
实体主题

image-20220317135203737

1.3HTTP是不保存状态的协议

​ HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是不做持久化处理。

​ HTTP协议每当有新的请求发送时,就会对应新响应产生。

​ 协议本身不保留之前一切的请求或响应报文的信息。这是为了尽快的处理特大事务,确保协议可伸缩性。

1.4 请求URI定位资源

​ HTTP协议使用URI定位资源,所以在互联网上任意位置的资源都能访问到。

1.4.1 指定URI的方式

完整请求URI

GET http://hackr.jp/index.htm HTTP/1.1

在首部字段Host中写明网络的域名或IP地址

GET /index.htm HTTP/1.1
Host: hackr.jp

如果不是访问特定资源而是对服务器本身发起请求,可以用一个*代替URI

下面这个例子是查询HTTP服务器支持的HTTP方法种类

OPTIONS * HTTP/1.1

1.5 HTTP方法

下面是HTTP/1.1中可以使用的方法。

GET:获取资源

​ 说明:GET方法用来请求访问已被URI识别的资源。指定资源经过服务器解析后返回响应内容。若为文本远洋返回,如果是程序执行输出。

例子:

请求:

GET /index.html HTTP/1.1                                                                        Host: www.hackr.jp

响应:返回 index.html 的页面资源

请求:

GET /index.html HTTP/1.1                   
Host: www.hackr.jp                                                                          
If-Modified-Since: Thu, 12 Jul 2012 07:30:00 GMT

响应:仅返回2012年7月12日7点30分以后更新过的index.html页面资源。 如果未有内容更新,则以状态码304 Not Modified作为响应返回

POST:传输实体主体

说明:

​ POST方法用来传输实体主体。

例子:

请求:

POST /submit.cgi HTTP/1.1                                                                       Host: www.hackr.jp                                                                             Content-Length: 1560(1560字节的数据)

响应:返回submit.cgi接收数据的处理结果

PUT:传输文件

说明:

​ PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。

​ 因为HTTP/1.1没有验证机制,所以要配合其他验证机制进行验证

例子:

请求:

PUT /example.html                                                                             HTTP/1.1 Host: www.hackr.jp                                                                     Content-Type: text/html                                                                         Content-Length: 1560(1560字节的数据)

响应:响应返回状态码204 No Content(比如 :该html已存在于服务器上)

HEAD:获得报文首部

说明:

​ HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的时间日期

例子:

请求

HEAD /index.html                                                                               HTTP/1.1 Host: www.hackr.jp

响应:返回index.html有关的响应首部

DELETE:删除文件

说明:

​ DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法按请求URI删除指定资源。

​ HTTP/1.1的DELETE同样没有验证机制

例子:

请求

DELETE /example.html                                                                           HTTP/1.1 Host: www.hackr.jp

响应:响应返回状态码204 No Content(比如 :该html已从该服务器上删除)

OPTIONS:询问支持的方法

说明:

​ OPTION方法用来查询针对URI指定资源支持的方法。

例子:

请求

OPTIONS * HTTP/1.1                                                                             Host: www.hackr.jp

响应

HTTP/1.1 200 OK                                                                                 Allow: GET, POST, HEAD, OPTIONS                                                              (返回服务器支持的方法)

TRACE:追踪路径

说明:

​ TRACE方法是让web服务器端将之前的请求通信环会给客户端的方法。

​ 发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个 服务器端就将该数字减 1,当数值刚好减到 0 时,就停止继续传输,最 后接收到请求的服务器端则返回状态码 200 OK 的响应。 客户端通过 TRACE 方法可以查询发送出去的请求是怎样被加工修 改 / 篡改的。这是因为,请求想要连接到源目标服务器可能会通过代理 中转,TRACE 方法就是用来确认连接过程中发生的一系列操作。(容易引发跨站追踪攻击)

例子:

请求

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(返回响应包含请求内容)

CONNECT: 要求用隧道协议链接代理

说明:

​ CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。

​ CONNECT方法的格式如下图所示。

CONNECT 代理服务器名:端口号 HTTP版本

例子:

请求:

CONNECT proxy.hackr.jp:8080                                                                     HTTP/1.1 Host: proxy.hackr.jp

响应:

HTTP/1.1 200 OK(之后进入网络隧道)

1.6 使用方法下达命令

​ 向请求URI指定的资源发送请求报文时,采用称为方法的命令。

方法 说明 支持的HTTP版本协议
GET 获取资源 1.0、1.1
POST 传输实体主体 1.0、1.1
PUT 传输文件 1.0、1.1
HEAD 获得报文首部 1.0、1.1
DELETE 删除文件 1.0、1.1
OPTIONS 询问支持的方法 1.1
TRACE 最总路径 1.1
CONNECT 要求用隧道协议连接代理 1.1
LINK 建立和资源之间的联系 1.1
UNLINE 断开连接关系 1.1

LINK和UNLINK已被HTTP/1.1废弃

1.7持久连接节省通信量

​ HTTP协议的初始版本中,没进行一次HTTP通信就要断开一次TCP连接.

​ 当年的传输内容都是很小的文本传输,所以不会有问题,随着HTTP的发展web页面中可能包含大量的图片,乃至视频。因此,每次请求都会应为多次断开TCP连接增加通信开销。

1.7.1 持久连接

​ 为了解决TCP连接问题,HTTP/1.1和一部分HTTP/1.0想出了持久连接。HTTP Persistent Connections,也称为 HTTP keep-aliveHTTP connection reuse

​ 在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内 并未标准化。客户端和服务器端都要支持才可以。

特点:

​ 只要任意一端没有明确断开连接,则保持TCP连接状态。需要请求断开。

优点:

  1. 减少重复建立连接的额外开销,减轻服务器端的负载
  2. 减少开销那部分时间,web页面响应速度提高。

1.7.2 管线化

​ 持久连接使得管线化(pipeliing)成为可能。

​ 管线化技术的特点是不用等待响应就可以直接发送下一个请求,这样就可以同时发送多个请求而不需要一个接一个的等待响应了。

​ 管线化技术比持久连接还要快,请求数量越多时间差越明显。

1.8 使用Cookie的状态管理

​ HTTP是无状态协议,由于不保存之前的状态和响应所以减少了资源消耗。可如果碰到需要身份验证的web页面岂不是要每一次都要重新验证,所以人们应用了Cokie技术。

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端状态。

​ Cookie会根据响应报文内一个叫Set-Cookie的首部字段通知客户端保存Cookie。下次发送请求会携带Cookie值发送出去。

​ 服务器发现cookie值后,会检查那个客户端发来的请求然会对比服务器的记录找到之前的状态。

例子:

  1. 请求报文(没有Cookie信息的状态)

image-20220318142329066

  1. 响应报文(服务器端生成Cookie信息)

image-20220318142525231

  1. 请求报文(自动发送保存着的Cookie信息)

image-20220318142631849

以上就是一次Cookie请求的过程。

猜你喜欢

转载自blog.csdn.net/xrgzky/article/details/123574590