【计算机网络】——深入理解HTTP

2020/7/9 14:49:41 人评论 次浏览 分类:学习教程

文章目录

  • 1、初识HTTP
    • 1.1URI和URL的区别
    • 1.2域名系统DNS
    • 1.3在浏览器地址栏输入URL,按下回车后究竟发生了什么?
    • 1.4长连接和短连接
  • 2、HTTP详解
    • 2.1HTTP协议特点
    • 2.2HTTP协议格式
    • 2.4HTTP协议方法
    • 2.5HTTP响应状态码
  • 3、HTTP和HTTPS的区别
    • 3.1HTTP和HTTPS的基本概念
    • 3.2引入HTTPS的原因和两者的区别
    • 3.3HTTPS的工作原理
    • 3.4HTTPS的特点

1、初识HTTP

1.1URI和URL的区别

URl称为统一资源标识符,URL称为统一资源定位符
URl用字符串来标识某一个互联网的资源,而URL表示资源所处的地址,因此URL是URI的子集平时我们俗称的==“网址”就是我们现在要认识的URL==下图表示了我们平常所使用网址的详细信息。
在这里插入图片描述
下面来具体解释一下各字段的含义

  1. 协议方案名:一般是http或者https
  2. 登录信息:指定用户名和密码作为服务器端获取资源时必要的登录信息
  3. 服务器地址:地址可以是xxx.jp这种能够被DNS解析的名称,或是192.168.1.1这类ipv4地址名,或是ipv6地址名
  4. 服务器端口号:当用户忽略的时候为默认端口号
  5. 带层次的文件路径:指定服务器上的文件路径来定位要访问的特定资源。
  6. 查询字符:这是个可选项。针对一指定文件路径中的资源,可使用查询字符串传入任意参数
  7. 片段标识符:使用片段标识符通常可以标记出获取资源中的子资源。

1.2域名系统DNS

1、域名系统概述
域名系统DNS是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。相比于长达32位二进制主机地址大家愿意使用比较容易记忆的主机名字。DNS使大多数名字都在本地进行解析,仅少量解析需要在因特网上通信,因此DNS系统的效率很高。

2、因特网的域名结构
主要采用树状结构的命名方式。这样使得任何一个连接在因特网上的主机或路由器都有一个唯一的域名
举个栗子
在这里插入图片描述
1、现在的顶级域名分为三类

  1. 国家顶级域名:如cn表示中国,us表示美国,uk表示英国。
  2. 通用顶级域名:其数目总数达到18个,如com(公司企业)、net(网络服务机构)、org(非营利性组织)
  3. 基础结构域名:只有一个,即arpa,用于反向域名解析,因此又称为反向域名

2、二级域名分为两大类

  1. 类别域名:共七个,包括ac(科研机构)、com(工、商、金融等企业)、edu(中国的教育机构),gov(中国的政府机构)
  2. 行政区域名:共34个,适用于我国的各省、自治区、直辖市,例如:bj(北京市)

下图展现了用域名树来表示因特网的域名系统
在这里插入图片描述

3、域名的解析过程
主要有两种方式,一种是递归查询另一种是迭代查询的方式。下图具体展现了他们各自的解析过程
在这里插入图片描述
从上图的解析过程我们可以总结一下:
1、迭代查询:它先向一个根域名服务器查询,当根域名服务器收到本地服务器发出的查询请求报文后,要么告诉本地域名服务器下一步应该查询哪一个域名服务器,然后本地域名服务器自己进行后续的查询(而不是替代本地域名服务器进行后续的查询
2、递归查询:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步查询
在本例子中:
根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址。本地域名服务器向顶级域名服务器dns.com进行查询。顶级域名服务器dns.net告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址。本地域名服务器向权限域名服务器dns.abc.com进行查询。权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机y.abc.com的IP地址。本地域名服务器最后把结果告诉主机。

1.3在浏览器地址栏输入URL,按下回车后究竟发生了什么?

1、浏览器输入域名
2、浏览器查找域名的IP地址
其要经历的阶段如下图所示
在这里插入图片描述
首先查找浏览器缓存,因为一般浏览器会缓存DNS记录一段时间,一般是2-30分钟不等。如果找不到就进行下一步查找系统缓存查找本机的hosts文件。如果找不到就进行下一步查找路由器缓存借助网络,路由器一般都有自己的DNS缓存,将前面的请求发送给路由器查找ISP服务商缓存DNS的服务器。如果找不到就进行下一步递归查询,如果还找不到就进行最后一步迭代查询

3、浏览器与目标服务器建立TCP连接
通过三次握手的方式建立连接

4、浏览器通过http协议发送请求
浏览器向主机发起一个HTTP_GET方法报文请求,请求中包含访问的URL、长连接、用户浏览器操作系统信息等等。

5、某些服务会永久重定向响应
对于大型网站存在多个主机站点,为了负载均衡或者导入流量,提高SEO排名,往往不会直接返回请求页面,而是重定向。

6、浏览器跟踪重定向地址
当浏览器知道了重定向后最终的访问地址之后,重新发送一个http请求,发送内容同上

7、服务器处理请求
服务器收到获取请求,然后处理并返回一个响应

8、服务器发出一个HTML响应
返回状态码200OK,表示服务器可以响应请求,返回报文。

9、释放TCP连接
采用四次挥手的方式断开浏览器和服务器的连接

10、浏览器显示页面
进行相应的页面呈现和脚本的交互

11、浏览器发送获取嵌入在HTML中的其他内容
比如一些样式文件,图片url,js文件url等,浏览器会通过这些url重新发送请求。这些静态文件是可以缓存到浏览器中的,有时访问这些文件不需要通过服务器,直接从缓存中取。

1.4长连接和短连接

1、短连接
连接->传输数据->连接。HTTP是无状态的,浏览器和服务器每进行一次HTTP操作就建立一次连接,但任务结束就中断连接。也可以说,短连接是指SOCKET连接后发送后接收完数据后马上断开连接

2、长连接
连接->传输数据->保持连接->传输数据->…->关闭连接。长连接指建立SOCKET连接后不管是否使用都保持连接

3、什么时候用长连接什么时候用短连接?

  • 长连接一般用于操作频繁,点对点的通讯,而且连接数不能太多的情况,因为TCP连接都需要三次握手,采用长连接的方式效率可以增高。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成sovket错误,而且频繁的socket创建也是对资源的浪费。
  • 短连接一般用于并发量大,但每个用户无需频繁操作的情况下,像WEB网站的http服务一般都是用短连接,因为长连接对于服务器来说会耗费一定的资源。

2、HTTP详解

HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。其大致工作流程如下:
在这里插入图片描述

2.1HTTP协议特点

1、无状态
无状态的含义就是对于事务处理没有记忆能力。意味着如果后续处理需要前面的信息,当客户端一次HTTP请求完成过后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个“老用户”
解决办法——使用Cookie
可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“
在这里插入图片描述
注意!!Cookie和Session要区分开。Session是另外一种记录客户状态的机制。不同的是Cookie保存在客户端浏览器中,Session保存在服务器上。
举个栗子:如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。

2、无连接
因为HTTP使用了面向连接的TCP作为运输层协议,保证了数据的可靠传输。所以HTTP不必考虑数据在传输过程中被丢弃后怎样被重传

3、持续连接
万维网服务器在发送响应后仍然在一段时间内保持这条连接。使同一客户和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文

2.2HTTP协议格式

用于HTTP协议交互的信息称为HTTP报文,请求端的报文称为HTTP请求,响应端的报文称为HTTP响应,HTTP报文由报文首部+空行+报文主体组成,其中报文主体并不一定要有。

1、HTTP请求的结构
在这里插入图片描述
【举个栗子】
在这里插入图片描述
2、HTTP响应的结构
在这里插入图片描述
【举个栗子】
在这里插入图片描述

2.4HTTP协议方法

协议方法如下图所示:

方法 说明 支持的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.0
UNLINK 断开连接关系 1.0

GET方法和POST方法的区别
1、从HTTP报文来看
1、安全性

  • GET请求方法:将请求信息存放在URL后面,请求信息和URL之间以?隔开,请求信息的格式为键值对。这种请求方式将请求信息直接暴露在URL中,安全性比较低
    【举个栗子】https://baike.baidu.com/item/Python/407313?fr=aladdin
  • POST请求方法:将请求信息放置在报文主体中,想获得请求信息必须解析报文,因此安全性较GET方式还是要高一点

【注意!】虽然POST安全性要高一点儿,但是想要获取报文体中的请求信息还是很容易的,因此在安全性上两者没有太多的区别,具体的解决传输过程中的安全性问题还是要靠HTTPS。

2、报文结构上
GET请求方式由于请求信息放置在URL中,所以请求报文中不需要报文主体。但是POST需要

3、长度限制
由于GET的请求信息放置在URL中,因此是有长度限制的,因为URL本身是有长度限制的。但是POST中的请求信息是放置在报文体中,因此数据长度是没有限制的

2、从数据库层面来看
首先,补充两个概念——幂等性和安全性。

  1. 幂等性:对数据库的一次操作和多次操作获得的结果是一致的
  2. 安全性:对数据库的操作没有改变数据库中的数据

GET请求方式符合幂等性和安全性因为GET请求方式是做查询操作,因此不会改变原有的数据。
POST请求方式既不幂等也不安全。首先POST请求方式往数据库中提交数据,因此会改变数据库中的数据,其次,POST请求方式每次获取的结果都有可能不一样,因为POST请求是作用在上一次的URL上的,则每一次请求都会添加一份新资源。

3、从其他层面来看

  • GET请求能够被缓存,会保存在浏览器的浏览记录中,URL能够保存为浏览器书签
  • POST方式不具备上述功能。因为POST是非幂等的,有副作用的操作,所以必须交给Web服务器处理

2.5HTTP响应状态码

HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

类别 原因短语
1XX 接收的请求正在处理
2XX 请求正常处理完毕
3XX 需要进行附加操作以完成请求
4XX 服务器无法处理请求
5XX 服务器处理请求出错

1、2XX 成功

  • 200:OK
  • 202:No Content
  • 206:Partial Content

2、3XX 重定向

  • 301:永久性重定向。表示请求的资源以及被分配了新的URI,以后应使用资源现在所指的URL来访问资源
  • 302:临时性重定向。表示请求的资源被分配了新的URI,希望用户能够用新的URI访问该资源
  • 303:表示请求对应的资源存在另一个URI,应使用GET方法定向获得请求的资源

注:301,302,303响应码返回时,几乎所有浏览器都会将POST请求转换为GET请求,并删除请求报文内的主体,再次发送请求,虽然标准要求不能将POST转换为GET,但是一般都会这么做

  • 304 Not Modified,表示用户发送的是附带条件的请求,服务器允许请求访问资源,但是未满足客户端条件的情况下,返回304状态码
  • 307 Temporary Redirect,临时重定向。与302有相同的含义,但是该状态码会遵照浏览器的标准不会将POST转换为GET

3、4XX 客户端错误

  • 400 Bad Request,表示请求报文中存在语法错误,错误发生后需要修改内容后重新发送
  • 401 Unauthorized,表示请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息,若之前已经返回过一次401状态码了,则表示用户认证失败
  • 403 Forbidden,表示对请求的资源的访问被服务器拒绝了,服务器可选择是否给出拒绝的原因(可能为未获得文件系统的访问授权,访问权限出现了问题等)
  • 404 Not Found,表示服务器无法找到请求的资源,也可用在服务器拒绝请求并且不想给出原因的时候

4、5XX 服务器错误

  • 500 Internal Server Error,表示服务器在执行请求时发生了错误,也有可能是Web应用存在的bug或是某些临时的故障
  • 503 Service Unavailable,表示服务器暂时处在超负载或者正在进行停机维护,现在无法处理请求,如果事先已经知道解除该状态的时间,最好写入Retry-After首部字段中返回给客户端让其知晓什么时候可以再次访问服务器

注:有时候状态码和状况可能会出现不一致的情况,可能服务器出现了处理错误,却仍旧返回一个200 OK的状态码给用户

3、HTTP和HTTPS的区别

3.1HTTP和HTTPS的基本概念

1、HTTP
是互联网上应用最为广泛的一种网络协议,用于www服务器传输超文本到本地浏览器的传输协议,他可以使浏览器更加高效时网络传输减少。
2、HTTPS
简单来说就是HTTP的安全版。即在HTTP下加入SSL层,HTTPS的安全基础就是SSL。
其主要作用包括建立一个信息安全通道来保证数据传输的安全另一个是确认网站的真实性

3.2引入HTTPS的原因和两者的区别

HTTP的缺陷
HTTP以明文方式发送内容,不提供任何方式的数据加密。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

由此设计出的HTTPS协议由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。他们的主要区别如下:

  1. HTTPS协议需要到ca申请证书,一般免费证书比较少,因而需要一定的费用
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
  3. HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80端口,后者是443端口
  4. HTTP的连接很简单,是无状态的,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。

3.3HTTPS的工作原理

1、SSL协议简述
在SSL中会使用密钥交换算法交换密钥,使用密钥对数据加密,使用散列算法对数据的完整性进行验证,使用数字证书证明自己的身份。

SSL协议的三个特点
保密、鉴别(可选的客户端认证和强制的服务端认证)、完整性(消息完整性检查)
SSL的位置
介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对应用层收到的数据进行加密,并增加自己的SSL头。

因为SSL是依靠证书来验证服务器身份的,所有接下来,我们就来讲一讲HTTPS的加密之路,来探究是怎样通过证书来验证服务器身份的吧~
具体的见博客HTTPS的加密之路

2、HTTPS工作流程

  1. 客户使用http的URL访问Web服务器,要求与Web服务器建立SSL连接
  2. Web服务器收到客户端请求后,会将网站的证书信息传送一份为客户端
  3. 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级
  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站
  5. Web服务器利用自己的私钥解密出会话密钥
  6. Web服务器利用会话密钥加密与客户端之间的通信

3.4HTTPS的特点

优点

  1. 使用HTTPS协议可以认证用户和服务器,确保数据发送到正确的客户机和服务器
  2. HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全,可以防止数据在传输过程中不被窃取改变,确保数据的完整性
  3. HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但是他增加了中间人攻击的成本

缺点

1.SSL为了让HTTP更加安全强行添加一层协议,肯定会导致处理的速度变慢
4. SSL在加密解密过程中占用了大量CPU和内存资源,并且在通信中还要占用部分网络资源,处理速度就会变

相关资讯

    暂无相关的资讯...

共有访客发表了评论 网友评论

验证码: 看不清楚?
    -->