IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HTTP协议细谈 -> 正文阅读

[网络协议]HTTP协议细谈

????????网络是由若干节点和连接这些节点的链路构成,然后网络与网络之间所串连成的庞大网络叫做互联网,而我们今天要讲的HTTP(HyperText Transfer Protocol 超文本传输协议)是互联网上应用最为广泛的一种网络协议,它是由万维网协会(World Wide Web Consortium)制定发布。


一、简介


HTTP 协议一共有五大特点:

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

? ? ? ?HTTP使用的传输层协议为TCP协议,而网络层使用的是IP协议(当然还使用了很多其他协议),所以说HTTP是一个基于TCP/IP协议簇来传递数据。
????????那TCP/IP协议簇大致是如何工作的,我们再来看看下图:?

二、建立TCP连接


????????我们知道了TCP/IP协议簇大致的工作原理之后,我们来看看HTTP是如何建立连接的。

????????1.TCP包头信息
????????????????前面咱们讲过HTTP是一个基于TCP/IP协议簇来传递数据,所以这HTTP建立连接也就是?建立TCP连接,TCP如何建立连接,一起来看看TCP包信息结构吧。

????????????????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建立连接需要三次握手,不是两次或四次
????????答:三次是最少的安全次数,两次不安全,四次浪费资源

三、客户端请求


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

1.HTTP请求报文结构
????????我们之前说过TCP报文包=TCP头信息+TCP数据体,TCP头信息我们已经讲了,现在来讲TCP数据体,也就是我们的HTTP请求报文。

?
2.HTTP请求实例
????????来看看实际的HTTP请求例子:

1.①是请求方法,HTTP/1.1 定义的请求方法有8种:

? ? ?1.OPTIONS
????????????????返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
????????2.HEAD
????????????????向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
????????3.GET
????????????????向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
????????4.POST
????????????????向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
????????5.PUT
????????????????向指定资源位置上传其最新内容
????????6.DELETE
????????????????请求服务器删除Request-URL所标识的资源
????????7.TRACE
????????????????回显服务器收到的请求,主要用于测试或诊断
????????8.CONNECT
????????????????HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

2.②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL。

??????????????URL (统一资源定位符):

???????????????????????URL的表现形式:

????????????????????????????????例如:https://www.csdn.com/WangTaoTao_.html

????????????????????????????????????????其中https://是协议部分 、www.csdn.com是域名部分 、 ????????????????????????????????????????????????????????????????/WangTaoTao_.html是资源路径部分

????????????????????????????????这里的域名指的就是IP地址的别名,使用域名的原因就是为了方便记住某台主

??????????????????????????????????????????机的IP地址。??????

????????? ? ? ? ? ? ? ? ? ?

?
3.③是协议名称及版本号
4.④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息
5.⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。
不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

四、服务端响应


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

????????1.HTTP响应报文结构:

?????????2.HTTP响应实例:

?


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


五、断开连接


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

1.长短连接
????????是否断开我们需要区分HTTP版本:
????????(1)在HTTP/1.0版本的时候,客户端与服务器完成一个请求/响应之后,会将之前建立的TCP连接断开,下次请求的时候又要重新建立TCP连接,这也被称为短连接。
????????(2)在HTTP1.0发布仅半年后(1997年1月),HTTP/1.1版本发布并带来一个新的功能:
在客户端与服务器完成一次请求/响应之后,允许不断开TCP连接,这意味着下次请求就直接使用这个TCP连接而不再需要重新握手建立新连接,这也被称为长连接。
????????注意:长连接是指一次TCP连接允许多次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP本身不存在长连接之说。
????????早在1999年HTTP1.1就推广普及,所以现在浏览器在请求时请求头中都会携带一个参数:Connection:keep-alive,这表示浏览器要求与服务器建立长连接,而服务器也可以设置是否愿意建立长连接,如果是close,表示已关闭。

2.长连接优缺点
????????????????对于服务器来说建立长连接有优点也有缺点:
????????优点:
????????当网站中有大量静态资源(图片、css、js等)就可以开启长连接,这也几张图片就可以通过一次TCP连接发送。
????????缺点:
????????当客户端请求一次时候不在请求,而服务器却开着长连接资源被占用着,这是严重浪费资源。所以是否开启长连接,长连接时间都需要根据网站自身来合理设置。
????????ps:大家不要小看这一个TCP连接,在一次客户端HTTP完整的请求中(DNS寻址、建立TCP连接、请求、等待、解析网页、断开TCP连接)建立TCP连接占用的时间比还是很大的。

3.断开连接过程
在建立TCP连接时是三次握手,而断开TCP连接是四次挥手。

?????????1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
????????2.? 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
????????3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
????????4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
????????5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2? *?MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
????????6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
?

http还有两个很大的缺点就是明文且不能保证完整性,所以目前会渐渐被HTTPS代替。

如有雷同,全是总结。
?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 17:02:36  更:2021-08-23 17:03:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:45:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码