HTTP系列

127 阅读19分钟

image.png

一、HTTP与HTTPS的区别

1.HTTP

HTTP是超文本运输协议,是实现网络通信的一种规范 在计算机和网络世界有,存在不同的协议,如广播协议、寻址协议、路由协议等等.... 而http是一个传输协议,即将数据由A传到B或将数据B传到A,并且A与B之间能够存放很多第三放,如:A<=>X<=>Y<=>Z<=>B

传输的数据并不是计算机底层中的二进制包,二是完整的,有意义的数据,如HTML文件,图片文件,查询结果等超文本,能够被上层应用识别 在实际应用中,HTTP常被用于在Web浏览器和网站服务器之间传递信息,以明文方式发送内容,不提供任何方式的数据加密; http的特点如下:

  • 支持客户/服务器模式
  • 简单快速:客户端请求服务时,只需要传送请求方法和路径,哟与http协议简单,使得http服务器的程序规模小,因而通信速度很快
  • 灵活:http允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记
  • 无连接:无连接的含义就是限制每次连接只处理一个请求,服务器处理完客户端的请求,比收到客户端的应答后,即断开连接,采用这种方式可以节省传输时间
  • 无状态:Http协议无法根据之前的状态进行本次的请求处理

2.HTTPS

在上述介绍HTTP中,了解到HTTP传递信息是以明文的形式发送内容,这并不安全,而HTTPS出现正是为了解决HTTP不安全的特性; 为了保证这些隐私数据能加密传输,让HTTP运行在安全的SSL/TLS协议上,即HTTPS=HTTP+SSL/TLS,通过SSL证书来验证服务器的身份,并未浏览器和无服务i之间的通信进行加密 SSL位于TCP/IP协议与各种应用层协议之间,浏览器和服务器在使用SSL建立连接时需要选择义组洽淡的加密算法来实现安全通信,为数据通讯提供安全支持

流程图如下:

image.png

  • 首先客户端通过URL访问服务器建立SSL连接
  • 服务端收到客户端请求后,会将网站支持的证书信息
  • 客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级

3.HTTP与HTTPS的区别

  • HTTPS是HTTP协议的安全版本,HTTP协议的数据传输的明文的,是不安全的,HTTPS使用了SSL/TLS协议进行了加密处理,相对更加安全
  • HTTP和HTTPS的使用连接方式不同,端口也不一样,HTTP是80,HTTPS是443
  • HTTPS由于需要设计加密以及多次握手,性能方面不如HTTP
  • HTTPS需要SSL,SSL证书需要钱,功能越强大的证书费用越高

二、为什么说HTTPS比HTTP安全,HTTPS是如何保证安全的?

1.安全特性

我们知道,HTTP在通信过程中,存在以下问题:

  • 通信使用明文(不加密),内容可能被窃听 不验证通信方的身份,因此有可能遭遇伪装 而HTTPS的出现就是为了解决这个问题的,HTTPS建立在SSL之上,其安全性由SSL来保证,在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能

HTTPS=HTTP+SSL/TLS

2.如何做

SSL的实现这些功能主要依赖三种手段

  • 对称加密:采用协商的密钥对数据加密
  • 非对称加密:实现身份证的密钥协商
  • 摘要算法:验证信息的完整性
  • 数字签名:身份签名

3.总结

HTTPS与HTTP虽然只差一个SSL,但是通信安全得到了大大的保障,通信的四大特征都以解决,解决方式如下:

  • 机密性:混合算法
  • 完整性:摘要算法
  • 身份认证:数字签名
  • 不可否定:数字签名

三、如何理解UDP和TCP的区别,以及其应用场景

1.UDP

UDP,用户数据包协议,是一个简单的面向数据包的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层 也就是说无论应用层交给UDP多长的报文,它统统发送,一次发送一个报文 而对接收方,接到后直接去除首部,交给上面的应用层就完事 特点如下:

  • UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务
  • 传输过程中出现丢包,UDP也不负责重发
  • 当包的到大顺序出现乱序时,UDP也没有纠正的功能

2.TCP

TCP,传输控制协议,是一种可靠的,面向字节流的通信协议,把上面的应用层交下来的数据看成无结构的字节流发送 可以想象成流水形式的,发送方TCP会将数据放入“蓄水池(缓存区)”,等到可以发送的时候就发送,不能发送就等着,TCP会根据当前网络的拥塞状态来气䦺每个报文段的大小

特点如下:

  • TCP充分的实现了数据传输时的各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制,而这些UDP中没有
  • 此外,TCP作为一种面向有连接的协议,只有在确认通信对方存在时才发送数据,从而控制通信流量的浪费
  • 根据TCP的这些控制,在IP这种总无连接的网络也能实现高可靠的通信(主要通过检验、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)

3.区别

TCPUDP
可靠性可靠不可靠
报文面向字节流面向报文
连接面向连接无连接
效率传输效率低传输效率高
双共性全双工一对一、一对多、多对多
  • TCP是面向连接的协议,建立连接3次握手,断开连接四次挥手;UDP是面向无连接的协议,发送只负责将数据发送到网络,接收端从消息队列都
  • TCP提供可靠的服务,传输过程采用流量控制、编号与确认、计时器等手段确保数据无差错,不丢失;UDP则是尽可能的传递数据,但不保证传递交付个对方
  • TCP面向字节流;UDP则是面向报文
  • TCP只能点对全双工通信,UDP支持一对一、一对多、多对多

两者的适用场景

image.png 可以看出,TCP适用于效率要求较低,对准确性要求高或者要求有连接的的场景;而UDP应用场景则是对效率要求比较高,对准确性要求低的场景

四、如何理解OID七层模型

从下到上依次排列为: 物理层=>数据链路层=>网络层=>传输层=>会话层=>表示层=>应用层

五、如何理解TCP/IP协议

1.TCP/IP协议是什么

TCP/IP,传输控制一些/网际协议,是指能够在多个不同网络间实现信息传输的协议簇

  • TCP(传输控制协议) 一种面向连接、可靠的、基于字节流的传输层通信协议

  • IP(网际协议) 用于封包交换数据网络的协议 TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTPSMTPTCPUDPIP等协议构成的协议簇; 只是应为TCP/IP协议中TCP和IP协议最具有代表性,所以统称为TCP/IP协议族

六 什么是DNS协议?说说DNS完整的查询过程?

##1.是什么 DNS,域名系统,是互联网的一项服务,时进行域名与之相对应的IP进行转换的服务器 简单来说,DNS相当于一个翻译官,赋值将域名翻译成ip地址

  • ip地址:一长串能够唯一的表示网络上的计算机的数字
  • 域名:是一串由点分隔的名字组成的Internet上某一台计算机或者计算机组的名称,用于在数据传输时对计算机的定位标识

image.png

2.域名

域名是一个具有层次的结构,从上到下下为根域名、顶级域名、二级域名、三级域名

image.png 例如:www.xxx.comwww为三级域名,xxx为二级域名,com为顶级域名且在域名的每一层都有一个域名服务器,如下图:

image.png 除此之外,还有电脑默认的本地域名服务器

3.查询方式

DNS的查询方式有两种:

  • 递归查询
  • 迭代查询

4. 总结

  • cdn的目的是为了改善互联网的服务质量,通俗一点讲其实就是提高用户访问速度

七 HTTP1.0/1.1/2.0的区别

1. HTTP1.0

  • 浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP

HTTP1.1

  • 引入了持久连接,即TCP连接默认是不关闭的,可以被多个请求复用
  • 在同一个TCP连接里面,客户端可以同时发送多个请求
  • 虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信都是按次序进行的,服务器值处理完一个请求,才会接着处理下一个请求,如果前面的处理特别慢,后面就会有许多请求排队等着
  • 新增了一些请求方法,请求头和响应头

HTTP2.0

  • 采用了二进制格式而非文本格式
  • 完全多路复用,而且有序非堵塞的,只需一个连接即可实现并行
  • 使用抱头压缩,降低开销
  • 服务器推送

八、HTTP常见的状态码有哪些?作用场景是什么?

1.是什么?

http状态码的作用是服务端告诉客户端当前请求响应的状态,通过状态码就能判断和分析服务器的运行转态

2.分类

转态码第一位数字决定了不同的响应转态,有如下:

  • 1表示信息
  • 2表示成功
  • 3表示重定向
  • 4表示请求错误
  • 5表示服务器错误

1xx

代表请求已经接受,需要继续处理。这类响应式临时响应,只包含状态行和某些可选的空行结束 常见的有:

  • 100:(客户端继续发送请求,这是临时响应):这个临时响应是用来通知客户端的它的部分请求已经被服务器接收,且扔未拒绝,客户端应当继续发送请求剩余的部分,或者如果请求已经完成,忽略这个响应,服务器必须在请求完成后向服务端发送一个最终响应。

2xx

代表请求已经被服务器接收、理解、并接受

常见的有:

  • 200(成功):请求已经成功,请求所希望的响应头或数据将随此响应返回
  • 201(已创建):请求成功并且服务器创建了新的资源
  • 204(无内容):服务器成功处理请求,但是没有返回任何内容

3xx

表示要完成请求,需要进一步操作。通常,这些状态码用来重定向的 常见的有:

  • 300(多种选择):针对请求,服务器可执行多种操作,

4xx

代表客户端看起来可能发生了错误,妨碍了服务器的处理 常见的有:

  • 400(错误请求):服务器不理解请求的语法
  • 401:(未授权):请求要求身份验证,对于需要登录的网页,服务器可能返回此响应
  • 404(未找到):服务器找不到请求的网页

5xx

表示服务器无法完成明显有效的请求,这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生 常见的有:

  • 500(服务器内部错误):服务器遇到错误,无法完成请求
  • 501(错误网关):服务器不具备完成请求的功能,例如,服务器无法识别请求方法的代码
  • 503(服务器不可用):服务器目前无法使用(由于超载会在停机维护)
  • 504(网关超时):服务器作为网关或代理,但是没有及时从上游服务器收到请求
  • 505(HTTP版本不受支持)

九、POST和GET请求有什么区别?

1.是什么

POSTGET,两者都是HTTP协议中发送请求的方法

1.1 GET

GET方法请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数据

1.2 POST

POST方法用于将实体提交到指定的资源,通常导致服务器上的状态变化

2.区别

w3school得到的标准答案的区别如下:

  • GET在浏览器回退是无害的,而POST会再次提交请求
  • GET请求只能进行url编码,而POST支持多种编码方式
  • GET请求的参数会被完整保留在浏览器的历史记录中,而POST的参数不会被保留
  • GET请求在url中传送的参数是有长度限制的,而POST没有
  • 对参数的数据类型,GET只接受ASCLL字符,而POST没有限制
  • GET比POSt更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
  • GET参数通过url传递,POST放在Request body中

3.参数位置

貌似从上面看到GET与POST的请求区别非常大,但两者实质并没有区别,无论GET还是PSOT,用的都是一个传输层协议,所以传输上没有区别,当不携带参数的时候,两个最大的区别为第一行方法名不同 `POST /uri HTTP/1.1 \r\n

 GET /uri HTTP/1.1 \r\n`
 

当携带参数的时候,我们知道get请是放在url中,post则是放在body中 get方法简约版报文是这样的

GET /index.html?name=qiming.c&age=22 HTTP/1.1
Host: localhost

post方法的简约报文是这样的

POST /index.html HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
name=qiming.c&age=22

注意:这里只是约定,并不是http规范,相反的,我们可以在post请求url中写入参数,或者get请求中body携带参数

4.参数长度

http协议没有对body和url的长度限制,对url限制的大多是浏览器和服务器的原因 服务器处理url要消耗比较多的资源,为了性能和安全考虑,有些浏览器或者服务器会给url长度加限制

5. 安全

POStGET安全,因为数据在地址栏上不可见 然而,从传输的角度来说,他们都是不安全的,因为HTTP在网络上是明文传输的,只要在网络节点上抓包,就能完整的额获取到数据报文 只有使用HTTPS加成加密安全

6.数据包

对于get请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据) 对于post请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok

并不是所有浏览器都会在POST中发送两次包,Firefox只发送一次

十、HTTP常见的请求头以及作用

1.是什么

HTTP头字段,指的是在超文本传输协议(HTTP)的请求和响应小心中消息头部分 它们定义了一个超文本传输协议事物中的操作参数 HTTP头部字段可以自己根据需求定义,因此可能在web服务器和浏览器上发现非标准的头字段 下面是一个http请求的请求头:

GET /home.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/testpage.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMT
If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"
Cache-Control: max-age=0

2.分类

常见的请求字段如下表所示:

字段名说明示例
Accept能够接受的回应内容类型(Content-Types)Accpet:txet/;plan
Cache-Control用来指定在这次的请求/响应链中的所有缓存机制都必须遵守的指令Cache-Control:no-cache
Connection该浏览器想要的优先使用的连接类型Connection:keep-alive Connection:Upgrade
Cookie服务器通过Set-Cookie(下文详细解释)发送一个超文本传输协议CookieCookie:$Version=1;Skib=new
Date发送该消息的日期Date:Tue,15 Nov 2022 21:24 GMT
Host服务器的域名(用于虚拟主机),以及服务器所监听的传输控制协议端口号Host:en.wisds.org:80 Host:en.wisds.org
Origin发起一个诊针对 跨来源资源共享 的请求Origin: www.example-social-network.com

3. 使用场景

通过配合请求头和响应头,可以满足一些场景功能的实现:

协商缓存

协商缓存利用的就是【Last-Modified,id-Modified-Since】和【ETag、Match】这两对请求头响应来管理的

会话服务

cookie,类型为【小型文本文件】,指某网站为了辨别用户身份而储存在用户本地终端上的数据,通过响应头set-cookie决定 作为一段一般不超过4kb的小型文本数据,它由一个名称(Name)、一个值(Value)和其他几个用于控制Cookie有效期、安全期、使用范围的可选属性组成 Cookie主要用于以下三个方面:

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其他需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

十一、地址栏输入URL敲回车后发生了什么?

image.png

1.简单分析

简单的分析,从输入url到回车后发生的行为如下:

  • url解析
  • DNS解析
  • TCP连接
  • HTTP请求
  • 响应请求
  • 渲染页面

2.详细分析

第一步:进行url解析

首先判断你输入的是一个合法的url还是一个待搜索的关键词,并且根据你输入的内容进行相对应的操作, url的解析是过程的第一个,一个url的结构解析如下:

image.png

第二步:DNS查询

即是进行DNS查询,然后根据DNS查询得到域名对应的目标服务器的IP地址

第三步:TCP连接

在确定目标夫妻得到IP地址后,则经历三次握手建立TCP连接,流程如下:

image.png

第四步:发送http请求

当建立了TCP连接后,就可以在这基础上进行通信,浏览器发送http请求到目标服务器,请求的内容包括:

  • 请求行
  • 请求头
  • 请求体

第五步:相应请求

当服务端接收到浏览器定位请求后,就会进行逻辑操作,处理完成之后返回以后个HTTP相应消息,包括:

  • 状态行
  • 响应头
  • 响应体 在服务器相应之后,由于现在http默认开始长连接keep-alive,当页面关闭之后,tcp链接则会经历tcp四次挥手完成断开

第六步:页面渲染

当浏览器接收到服务器响应的资源后,首先会对资源进行解析:

  • 查看响应头的信息,根据不同的指示做对应的处理,比如重定向,存储cookie、解压gzip
  • 查看响应头的Content-Type的值,根据不同的资源类型采用不同的解析方式

关于页面的渲染过程如下:

  • 解析html,构建dom树
  • 解析css,生成css规则树
  • 合并Dom树和css规则树,生成render树
  • 布局render树(Layout/reflow),读者各元素尺寸、位置的计算
  • 绘制render树(paint),绘制页面像素信息
  • 浏览器会将各层的信息发送给GPU,GPU会将各层合成(composite),显示在屏幕上

image.png

十二、为什么需要三次握手和四次挥手?

1.三次握手

三次握手其实就是值建立一个TCP连接时,需要客户端和服务端总共发送3个包,只要作用是为了确认双方的接收能立和发送能立是否正常、指定自己的初始化序列为后面的可靠性传送做准备

过程如下:

  • 1.第一次握手:客户端给服务端发送一个SYN报文,并指明客户端的初始化序列号ISN(c),此时客户端处于SYN_SEND状态
  • 2.第二次握手:服务器收到客户端的SYN报文后,会以自己的SYN报文作为应答,为了确认客户端的SYN,将客户端的ISN+1作为ACK值,此时服务器处理SYN_RCVD状态
  • 3.第三次握手:客户端收到SYN报文之后,会发送一个ACK报文,值为服务器的ISN+1,此时客户端处于ESTABLISHED(确定的)状态,服务器收到ACK报文之后,也会处于ESTABLISHED状态,此时双方已经建立了连接

20220320101553.png

为什么不是两次握手?

  • 如果是两次握手,发送端可以确定自己发送的信息能被对方收到,也能确定对方发的包自己能收到,三十接收端只能确定对方发的包自己能收到,无法确认自己发的包对方能收到
  • 并且两次握手的话,客户端有可能因为网络阻塞等原因会发送多个请求报文,延时到达的强又会与服务器建立连接,浪费掉许多服务器的资源。

2.四次挥手

tcp终止一个连接,需要经过4此挥手

20220320101940.png

四次挥手的原因

服务端在收到客户端断开连接fin报文之后,并不会立即关闭连接,而是先发送一个ack包先告诉客户端收到关闭连接的请求,只有当服务器的所有报文发送完毕之后,才会发送fin报文断开连接,因此需要四次挥手。