每一个技术人都必须掌握的HTTP过程详解

爬虫又称网络爬虫,因此在讲解爬虫以前,咱们有必要了解一下什么是网络?网络是由若干节点和链接这些节点的链路构成,而后网络与网络之间所串连成的庞大网络叫作互联网,而咱们今天要讲的HTTP(HyperText Transfer Protocol 超文本传输协议)是互联网上应用最为普遍的一种网络协议,它是由万维网协会(World Wide Web Consortium)制定发布。css

文章主要以一次HTTP请求的整个过程来说解(DNS解析不讲):HTTP起源、TCP/IP协议、创建TCP链接、客户端请求、服务端响应、断开TCP链接,文章最后还捎带讲了与HTTP相关知识。文章较长,建议收藏或转发后阅读! html

在这里插入图片描述

1、简介

1.起源

今天咱们可以在网络中畅游,都得益于一位计算机科学家蒂姆·伯纳斯·李的构想。1991年8月6日,蒂姆·伯纳斯·李在位于欧洲粒子物理研究所(CERN)的NeXT计算机上,正式公开运行世界上第一个Web网站(info.cern.ch ),创建起基本的互联网基础概念和技术体系,由此开启了网络信息时代的序幕。 面试

在这里插入图片描述
伯纳斯·李的提案包含了网络的基本概念并逐步创建了全部必要的工具:

  1. 提出HTTP (Hypertext Transfer Protocol) 超文本传输协议,容许用户经过单击超连接访问资源;
  2. 提出使用HTML超文本标记语言(Hypertext Markup Language)做为建立网页的标准;
  3. 建立了统一资源定位器URL (Uniform Resource Locator)做为网站地址系统,就是沿用至今的http://www URL格式;
  4. 建立第一个Web浏览器,称为万维网浏览器,这也是一个Web编辑器;
  5. 建立第一个Web服务器info.cern.ch)以及描述项目自己的第一个Web页面。

2.特色

HTTP 协议一共有五大特色:浏览器

  1. 支持客户/服务器模式。
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
  3. 灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
  4. 无链接:无链接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。
  5. 无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即咱们给服务器发送 HTTP 请求以后,服务器根据请求,会给咱们发送数据过来,可是,发送完,不会记录任何信息(Cookie和Session孕育而生,后期再讲)。

2、TCP/IP协议

咱们常常听到一句话就是:HTTP是一个基于TCP/IP协议簇来传递数据安全

如何理解上面那句话?咱们来看看TCP/IP四层模型就明白了。 服务器

在这里插入图片描述
从上图咱们能够清晰的看到HTTP使用的传输层协议为 TCP协议,而网络层使用的是 IP协议(固然还使用了不少其余协议),因此说 HTTP是一个基于TCP/IP协议簇来传递数据

一样咱们能够看到ping走的ICMP协议,这也就是为何有时候咱们开vps能够上网,可是ping google却ping不通的缘由,由于走的是不一样的协议。网络

那TCP/IP协议簇大体是如何工做的,咱们再来看看下图: tcp

在这里插入图片描述
咱们能够看到在数据发送端是一层一层封装数据,数据接收端一层一层拆封,最后应用层得到数据。

3、创建TCP链接

咱们知道了TCP/IP协议簇大体的工做原理以后,咱们来看看HTTP是如何创建链接的。编辑器

1.TCP包头信息

前面我们讲过HTTP是一个基于TCP/IP协议簇来传递数据,因此这HTTP创建链接也就是创建TCP链接,TCP如何创建链接,一块儿来看看TCP包信息结构吧。 ide

在这里插入图片描述
TCP报文包=TCP头信息+TCP数据体,而在TCP头信息中包含了6种控制位(上图红色框中),这六种标志位就表明着TCP链接的状态:

  1. URG:紧急数据(urgent data)---这是一条紧急信息
  2. ACK:确认已收到
  3. PSH:提示接收端应用程序应该当即从tcp接受缓冲区中读走数据
  4. RST:表示要求对方从新创建链接
  5. SYN:表示请求创建一个链接
  6. FIN:表示通知对方本端要关闭链接了

2.创建链接过程

了解了TCP包头信息以后,咱们就能够正式看看TCP创建链接的三次握手了。

在这里插入图片描述
三次握手讲解:

  1. 客户端发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求创建联机(客户端:我要链接你)
  2. 服务器收到请求后要确认联机信息,向A发送ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包(服务器:好的,你来连吧)
  3. 客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则链接创建成功。(客户端:好的,我来了)

面试官:为何http创建链接须要三次握手,不是两次或四次 答:三次是最少的安全次数,两次不安全,四次浪费资源

4、客户端请求

客户端与服务器链接上了以后,客户端就能够开始向服务器请求资源,就能够开始发送HTTP请求了。

1.HTTP请求报文结构

咱们以前说过TCP报文包=TCP头信息+TCP数据体,TCP头信息咱们已经讲了,如今来说TCP数据体,也就是咱们的HTTP请求报文

在这里插入图片描述

2.HTTP请求实例

来看看实际的HTTP请求例子:

在这里插入图片描述

  1. ①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的两种GET和POST,若是是RESTful接口的话通常会用到GET、POST、DELETE、PUT
  2. ②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL
  3. ③是协议名称及版本号
  4. ④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息
  5. ⑤是报文体,它将一个页面表单中的组件值经过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体能够传递请求参数,请求URL也能够经过相似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

请求头参数很是多,猪哥就不一一说明,只说明两个低级的反扒参数:

  1. User-Agent:客户端使用的操做系统和浏览器的名称和版本,有些网站会限制请求浏览器
  2. Referer:先前网页的地址,表示此请求来自哪里,有些网站会限制请求来源

5、服务端响应

服务器在收到客户端请求处理完须要响应并返回给客户端,而HTTP响应报文结构与请求结构体一致。

1.HTTP响应报文结构

在这里插入图片描述

2.HTTP响应实例

在这里插入图片描述

3.响应状态码

响应报文中咱们重点关注下:服务器的响应状态码,面试也很容易问到,下面猪哥只列出分类,详细状态码自行上网查找了解。

在这里插入图片描述

6、断开链接

在服务器响应完毕后,一次会话就结束了,请问这时候链接会断开吗?

1.长短链接

是否断开咱们须要区分HTTP版本:

  • 在HTTP/1.0版本的时候,客户端与服务器完成一个请求/响应以后,会将以前创建的TCP链接断开,下次请求的时候又要从新创建TCP链接,这也被称为短链接
  • 在HTTP1.0发布仅半年后(1997年1月) ,HTTP/1.1版本发布并带来一个新的功能:在客户端与服务器完成一次请求/响应以后,容许不断开TCP链接,这意味着下次请求就直接使用这个TCP链接而再也不须要从新握手创建新链接,这也被称为长链接

注意:长链接是指一次TCP链接容许屡次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP自己不存在长链接之说。

早在1999年HTTP1.1就推广普及,因此如今浏览器在请求时请求头中都会携带一个参数:Connection:keep-alive,这表示浏览器要求与服务器创建长链接,而服务器也能够设置是否愿意创建长链接。

2.长链接优缺点

对于服务器来讲创建长链接有优势也有缺点:

  • 优势:当网站中有大量静态资源(图片、css、js等)就能够开启长链接,这也几张图片就能够经过一次TCP链接发送。
  • 缺点:当客户端请求一次时候不在请求,而服务器却开着长链接资源被占用着,这是严重浪费资源。

因此是否开启长链接,长链接时间都须要根据网站自身来合理设置。

ps:你们不要小看这一个TCP链接,在一次客户端HTTP完整的请求中(DNS寻址、创建TCP链接、请求、等待、解析网页、断开TCP链接)创建TCP链接占用的时间比仍是很大的。

3.断开链接过程

在创建TCP链接时是三次握手,而断开TCP链接是四次挥手!

在这里插入图片描述
在前面讲TCP/IP协议时咱们说过标志位: FIN表示通知对方本端要关闭链接了,**那断开链接为什么须要四次挥手呢?**这里给你们的课后做业,能够在留言中给出你的理解,看看是否正确。

7、题外话

1.面试必考题:http三次握手、四次挥手

面试官:为什么创建链接须要三次握手而关闭链接却须要四次挥手。给你们的课后做业,在留言中给出你的看法!

2.http2.0

在这里插入图片描述
HTTP/1.1已经为咱们服务了20年,而HTTP/2.0其实在2015就发布了,可是尚未推广开来,关于HTTP/2.0新特性你们也能够去网上查阅相关资料

3.http&rpc

由于http响应慢请求头体积大等缺点,因此在微服务时代,你们都使用rpc来调用服务,rpc相关概念感兴趣同窗自行网上学习。

4.http&https

http还有两个很大的缺点就是明文不能保证完整性,因此目前会渐渐被HTTPS代替,HTTPS知识猪哥下期将会为你们讲解。

在这里插入图片描述
相关文章
相关标签/搜索