一篇比较全的HTTP协议详解(1)

1.概念

 1.1 Web Service

  Web Service(Web服务)是我们日常使用最多的服务,所有网站都是以Web服务形式为我们呈现。

  • Web服务分为服务端客户端
  • 常见的客户端就是我们使用的各种浏览器(IE、Chorm、Safari、Firefox、Opera或命令行浏览器)都是Web客户端。
  • 而Web服务端就是我们所访问网站的Web服务。常见的Web服务器有:IIS、Apache、Nginx、Lighttpd等。不同Web服务器对不同的系统平台,有各自的优缺点。

 1.2 HTTP协议

  超文本传输协议(HTTP)是一种通信协议。它允许将超文本标记语言(HTML)文档从web服务器传送到客户端
  我们平时浏览网页,只要在浏览器端输入网址,电脑就能显现出我们想要的东西。可是你有没有想过,输入网址之后到底发生了什么呢?
  简单来说,就是我们向服务器说:“嘿,哥们,我想要xxx”,服务器再把我们想要的东西发到我们电脑上显现出来。我们向服务器申请资源的时候、服务器发给我们东西这个过程,是要遵从一定的协定的(没有规矩,不成方圆),这个协定就是HTTP协议。
  也就是说,Wbe服务器和客户端通过HTTP协议进行交互。

  • HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务端模型(CS模型)。HTTP是一个无状态的协议(下一章会讲到)。
  • 在Internet中所有的传输都是通过TCP/IP进行的。HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS(HTTPS后面我会讲到)。
  • 浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地。比如咱们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。

2. 传输的过程

  HTTP协议(应用层)是承载于TCP协议(传输层)之上的。而TCP是一个端到端的面向连接的协议。所谓的端到端可以理解为进程到进程之间的通信。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。下图所示TCP连接的三次握手。

 2.1 TCP三次握手(建立连接)

 PS:下面是一张非常棒的图,对于TCP协议的理解很有帮助。虽然我们主要讲的是三次握手,但是理解了三次握手,四次挥手也就很简单了。
在这里插入图片描述

  • 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Seq为x;然后客户端进入SYN_SEND状态,等待服务器的确认;
  • 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Ack为x+1(Seq+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Seq为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Ack设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

  在TCP三次握手之后,建立了TCP连接,此时HTTP就可以进行传输了
  四次挥手也和三次握手原理一样,由于篇幅有限,在这里就不再详解。在计算机网络专栏中我会详细讲解TCP/IP协议。

 2.2 HTTP报文

  HTTP报文由请求报文响应报文组成。HTTP的这两种报文都由三部分组成:起始行首部实体主体
在这里插入图片描述

  2.2.1 起始行

请求报文起始行格式

方法 【空格】 URL 【空格】 HTTP版本

  • 方法: 向请求资源指定的资源发送请求报文的方法,其作用是可以指定请求的资源按期望产生某种行为

  HTTP定义了许多方法,客户端通过不同的方式于Web服务器进行通信,常见的方法如下:

GET 从服务器上获取一个资源(一般是一个网页)
POST 向服务器提交数据(可能会创建一个新的资源)
PUT 向服务器提交数据
DELETE 删除指定资源
HEAD 只请求网页头部信息
  • URL : URL链接,定位资源位置
  • HTTP版本:目前有 HTTP/1.0、HTTP/1.1、HTTP/2.0 版本,其中 HTTP1.0 版本使用较广泛。

响应报文起始行格式

HTTP版本 [空格] 状态码

  • 状态码:就是显示给客户端,服务端的状态。例如:我们访问网页的时候经常会遇到404错误。常见的状态码及含义如下:
200 正常,请求成功
301 永久移动,一般用于域名重定向
304 未修改,一般用于缓存
401 禁止访问,未授权
403 进制访问,通常代表已通过认证,但没有访问权限
404 未找到资源
301 服务器内部错误
  2.2.2 首部(header)
  • 是用来说明浏览器、服务器或报文主体的一些信息。
  • 可以有好几行,也可以不使用
  • 每个首部行都是由首部字段名、、 和值组成
  • 每个首部在结束地方都有一个空行,标志首部结束
      HTTP 首部字段分为 4 种: 通用首部字段请求首部字段响应首部字段实体首部字段
    一张图展示所有字段:这里不再逐个讲解每个字段的意思,有兴趣的可以自行上网搜索~~
    在这里插入图片描述
  2.2.3 实体(body)
  • 请求报文实体,就是客户端具体想要的是什么。
  • 响应报文的实体,就是客户端想要的资源。

 2.3 浏览器演示

  我们使用Chorm浏览器,随便打开一个网页(例如:www.meizu.com),鼠标右击,点击【检查】,就会出来以下界面,然后按顺序点击:Network—>www.meizu.com—>Headers,(如果没看到,就对页面重新加载
在这里插入图片描述
点击进去,看看这些Headers。有没有很熟悉?这就是我们刚刚说的HTTP报文。但是和上边所说的还有点不一样,别急,点击 view source,显示视图源。(PS:因为浏览器原本显示的是 view parsed——视图解析。意思是一样的,区别在于一个是源,一个是解析过的。提示:有的网页没有view source这个选项)
在这里插入图片描述
点击过后就是下面的图片,就和我们刚刚说的报文一样了。
在这里插入图片描述
响应报文实体就在后面的Response里面。这里只是给大家看一下HTTP报文的大概样子,就不再具体详解了。

3.HTTP协议发展历史

HTTP/0.9:协议很简单,只有一个命令GET,没有HEADER等描述信息。服务器发送完毕就关闭TCP连接。
HTTP/1.0:

  • 增加了很多命令,例如:POST,HEAD,PUT等。
  • 增加了status code和header。
  • 多字符集支持、多部分发送、权限、缓存等。

HTTP/1.1:

  • 持久连接HTTP是无连接的,下一篇文章会讲到)。
  • pipeline(管道化),pipeline机制是在一条connection上多个http request不需要等待response就可以连续发送的技术。但这可能会带来队头阻塞的问题,也正因此,许多浏览器默认关闭了这个功能。(HTTP2解决了这个问题)。
  • 增加host和其他一些命令。Host是比较重要的东西,他的存在,是为了实现一台服务器上可以跑多个Web服务。例如:www.a1.com,www.a2.com,www.a3.com,这三个域名通过DNS翻译出来的IP都一样,但可以通过Host,来区分同一台服务器上的不同的Web服务。

HTTP/2:

  • 所有数据以二进制传输。
  • 同一个连接里面发送多个请求不再需要按照顺序来。
  • 头信息压缩以及推送等提高效率的功能。

4. HTTP协议一个基本的工作流程

  一次HTTP操作称为一个事务,其工作过程大致可分为四步:

  • 首先客户端与服务端需要建立TCP连接。只要单击某个超级链接,HTTP的工作开始
  • 建立连接后,客户端发送一个请求给服务端,请求报文格式上边已经提过。
  • 服务端接到请求后,会发送一个响应给客户端,响应报文格式上边已经提过。
  • 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

  如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

5.总结

  以上就是对HTTP协议的初步讲解,讲的东西很少,就是希望大家先有个清晰的概念。后续我会接着写,关于HTTP协议的一些重要特性,以及HTTPS等。
  文章如有不当之处,还请多多指教~如有疑问,可以留言区讨论鸭!

发布了14 篇原创文章 · 获赞 25 · 访问量 5367

猜你喜欢

转载自blog.csdn.net/weixin_43275558/article/details/104192187
今日推荐