热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

详解HTTPHTTPS协议(附面试题文档)

前言&初衷希望能对后面面试前端工程师实习生这一岗位的小伙伴们有所帮助,也希望自己能在这次总结中能力有所提升。了解一下TCPIP协议TCP(Tran


前言 & 初衷


  • 希望能对后面面试前端工程师实习生这一岗位的小伙伴们有所帮助,也希望自己能在这次总结中能力有所提升。

了解一下TCP/IP协议


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

HTTP协议是构建在TCP/IP协议之上的,是TCP/IP协议的一个子集,所以要理解HTTP协议,有必要先了解下TCP/IP协议相关的知识。 由于TCP/IP协议族包含众多的协议,在这里我们无法一一讨论。接下来,我们仅介绍理解HTTP协议需要掌握的TCP/IP协议族的一些相关知识点。如果想深入理解TCP/IP协议,可以参考经典书籍《TCP/IP详解》。


TCP的三次握手


  1. 客户端和服务端都需要直到各自可收发,因此需要TCP的三次握手。
  2. 从图片可以得到三次握手可以简化为:A发起请求连接B确认,也发起连接A确认我们再看看每次握手的作用:
    第一次握手:B只可以确认自己可以接受A发送的报文段、:SYN=1的报文段不能携带数据,但消耗一个序号
    第二次握手:A可以确认 B收到了自己发送的报文段,并且可以确认 自己可以接受B发送的报文段、:二次握手时分配服务器端的资源
    第三次握手:B可以确认A收到了自己发送的报文段:ACK报文段可以携带数据,不携带数据则不消耗序号。三次握手时分配客户端的资源
    SYN洪泛攻击: SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。
    防范SYN攻击措施:降低主机的等待时间使主机尽快的释放半连接的占用,短时间受到某IP的重复SYN则丢弃后续请求。

TCP的四次挥手


  1. 客户端主动要求断开连接,服务端把要发送的数据发送完,被动关闭连接,所以需要四次挥手
  2. 第一次挥手:A的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq=u)
    第二次挥手:B收到连接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v)
    第三次挥手:B没有要向A发出的数据,B发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1)
    第四次挥手A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1)

TCP和UDP的区别


  1. TCP是面向连接的,UDP是无连接的即发送数据前不需要先建立链接。
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;并且因为tcp可靠,面向连接,不会丢失数据因此适合大数据量的交换。UDP尽最大努力交付,即不保证可靠交付。
  3. TCP是面向字节流,UDP面向报文,并且网络出现拥塞不会使得发送速率降低(因此会出现丢包,对实时的应用比如IP电话和视频会议等)。
  4. TCP只能是1对1的,UDP支持1对1,1对多。
  5. TCP的首部较大为20字节,而UDP只有8字节。
  6. TCP是面向连接的可靠性传输,而UDP是不可靠的。

TCP协议为什么可靠?

TCP是面向连接的,TCP通过三次握手的方式建立连接,并且有ACK机制保证传输的可靠性。添加笔者微信,回复:HTTP,可以获取更多笔者整理的HTTP面试干货。


  • ACK机制

由于通信过程的不可靠性,传输的数据不可避免的会出现丢失、延迟、错误、重复等各种状况,TCP协议为解决这些问题设计了一系列机制。 这个机制的核心,就是发送方向接收方发送数据后,接收方要向发送方发送ACK(回执)。如果发送方没接收到正确的ACK,就会重新发送数据直到接收到ACK为止。



  • 比如:发送方发送的数据序号是seq,那么接收方会发送seq + 1作为ACK,这样发送方就知道接下来要发送序号为seq + 1的数据给接收方了。

 

 

添加笔者微信,回复:HTTP,可以获取更多笔者整理的HTTP面试干货。

我们来看看在不同的异常情况下,ACK机制是怎么工作的:

 


  • 数据丢失或延迟。发送方发送数据seq时会同时起一个定时器,如果在指定时间内没有接收到ACK seq + 1,就把数据seq再发一次。(重传策略)
  • 数据乱序。接收方上一个收到的正确数据是seq + 4,它返回seq + 5作为ACK。这时候它收到了seq + 7,因为顺序错了,所以接收方会再次返回seq + 5给发送方。
  • 数据错误。每一个TCP数据都会带着数据的校验和。接收方收到数据seq + 3以后会先对校验和进行验证。如果结果不对,则发送ACK seq + 3,让发送方重新发送数据。(校验策略)
  • 数据重复。接收方直接丢弃重复的数据即可。

ACK机制的优化


  • 流量控制(滑动窗口机制)

数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失。
利用滑动窗口机制可以很方便地在TCP连接上对发送方的流量进行控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。


 

 

 


  • 堵塞控制(慢启动机制)

拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。
流量控制是点对点通信量的控制,是一个端到端的问题,主要就是抑制发送端发送数据的速率,以便接收端来得及接收



  • 拥塞控制的算法

我们假定: 数据单方向传送,而另外一个方向只传送确认。
接收方总是有足够大的缓存空间,因为发送窗口的大小由网络的拥塞程度来决定。


发送方的发送窗口的上限值应当取为接收方窗口rwnd和拥塞窗口cwnd这两个变量中较小的一个,即发送窗口的上限值为Min[rwnd, cwnd]


当rwnd 当cwnd

拥塞控制的过程一共涉及了4种算法: 慢启动 拥塞避免 快重传 快恢复 本文只介绍其中一种算法慢启动算法,其他算法各位看官可自行百度。


  • 慢启动

发送方维护一个拥塞窗口cwnd的状态变量,拥塞窗口的大小取决于网络的拥塞程度,动态变化。通过逐渐增加cwnd的大小来探测可用的网络容量,防止连接开始时采用不合适的发送量导致网络拥塞。
当主机开始发送数据时,如果通过较大的发送窗口立即将全部数据字节都注入到网络中,由于不清楚网络状况,有可能引起网络拥塞。较好的方法是试探,从小到大逐渐增大发送端拥塞窗口的cwnd数值。


例如:开始发送方先设置cwnd=1,发送第一个报文段M1,接收方接收到M1后,ACK返回给发送端,发送端将cwnd增加到2,接着发送方发送M2,再次接受到ACK后将cwnd增加到4...慢启动算法每经过一个传输轮次,拥塞窗口cwnd就加倍。添加笔者微信,回复:HTTP,可以获取更多笔者整理的HTTP面试干货。


HTTP && HTTPS协议


  • http: 超文本传输协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
  • https: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,HTTP下加入SSL层(SSL协议),HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 https协议的主要作用是:建立一个信息安全通道,来确保数据的传输,确保网站的真实性。

http 和 https 区别


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

https协议的工作原理(SSL层原理)


  1. 客户使用https url访问服务器,则要求web 服务器建立ssl链接。
  2. web服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),返回或者说传输给客户端。
  3. 客户端和web服务器端开始协商SSL链接的安全等级,也就是加密等级。
  4. 客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
  5. web服务器通过自己的私钥解密出会话密钥。
  6. web服务器通过会话密钥加密与客户端之间的通信。

http1.0、http1.1、http2 的区别


1.在http1.0h协议中,一个Request一个Response,这次http请求就结束了
2.在http1.1中进行了改进,WebSocket有一个connection:Keep-alive,也就是说,在一个http连接中,可以发送多个Request,接收多个Response。
3.http2.0中:

3.1.允许多路复用:多路复用允许同时通过单一的HTTP/2连接发送多重请求-响应信息。改善了:在http1.1中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制(连接数量),超过限制会被阻塞。
3.2.二进制分帧:HTTP2.0会将所有的传输信息分割为更小的信息或者帧,并对他们进行二进制编码
3.3.首部压缩
3.4.服务器端推送


讲一下对称加密算法、非对称加密算法


  • 对称加密算法

发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥。
相对于非对称加密,对称加密具有更高的加解密速度,但双方都需要事先知道密钥,密钥在传输过程中可能会被窃取,因此安全性没有非对称加密高。

 



  • 非对称加密算法

接收方在发送消息前需要事先生成公钥和私钥,然后将公钥发送给发送方。发送方收到公钥后,将待发送数据用公钥加密,发送给接收方。接收方收到数据后,用私钥解密。
在这个过程中,公钥负责加密,私钥负责解密,数据在传输过程中即使被截获,攻击者由于没有私钥,因此也无法破解。
非对称加密算法的加解密速度低于对称加密算法,但是安全性更高。

 


但是必须记住,在http1.0和http1.1中一个Request只能对应有一个Response,而且这个Response是被动的,不能主动发起。


HTTP与TCP/IP、DNS的关系

如果要说清楚HTTP与TCP/IP、DNS的关系,那就要清楚一次完整的HTTP事务(在浏览器输入地址(url),按下回车后,到看到完整页面之前,发生了什么?)


  • 我们通过一张图来解释,一共分为六步。

 

 

 


第一步:DNS域名解析(找到域名对应的IP地址)。
第二步:建立TCP连接(包含三次握手和四次挥手)。
第三步:浏览器发起HTTP请求。
第四步:服务器端解析HTTP请求,处理并响应HTTP请求。浏览器得到html代码。
第五步:浏览器解析html代码,请求资源(如js、css、图片等)。
第六步:浏览器对页面进行渲染,呈现给用户。


 

常用的状态码


  • 2XX 成功
    200 OK,表示从客户端发来的请求在服务器端被正确处理
    204 No content,表示请求成功,但响应报文不含实体的主体部分
    206 Partial Content,进行范围请求
  • 3XX 重定向
    301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
    302 found,临时性重定向,表示资源临时被分配了新的 URL
    303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
    304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
    307 temporary redirect,临时重定向,和302含义相同
  • 4XX 客户端错误
    400 bad request,请求报文存在语法错误
    401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
    403 forbidden,表示对请求资源的访问被服务器拒绝
    404 not found,表示在服务器上没有找到请求的资源
  • 5XX 服务器错误
    500 internal sever error,表示服务器端在执行请求时发生了错误
    503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

总结

至此有关与http和https的一些基本面试问题算是都列出来了!(各位看官如果喜欢本文的欢迎点赞收藏!你们的鼓励会使我更有动力,当然,如果发现我的总结还有不足之处,欢迎评论指正!)


推荐阅读
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • HSRP热备份路由器协议的应用及配置
    本文介绍了HSRP热备份路由器协议的应用及配置方法,包括设计目标、工作原理、配置命令等。通过HSRP协议,可以实现在主动路由器故障时自动切换到备份路由器,保证网络连通性。此外,还介绍了R1和R2路由器的配置方法以及Sw1和Sw2交换机的配置方法,最后还介绍了测试连通性和路由追踪的方法。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
author-avatar
手机用户2602926865
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有