前端网络面试题

说一下 GET 和 POST 的区别?

get和post都是http协议中的方法
get是向服务器请求资源的获取数据,get请求时不会对服务器数据产生改变,get在浏览器回退是无害的,get请求会主动被浏览器cache
post是将数据提交到指定资源,一般用于服务器资源产生改变,post而会再次提交,post是不会,除非手动
get请求在url中传送的参数是有限制的,而post没有
    这句话在 HTTP协议中是没有规定的,只是浏览器或服务器会对url进行长度的限制,ie浏览器是有长度限制的 ,Firefox浏览器理论上是没有的,服务器处理的url较长的请求会消耗很资源和性能,所以还会url进行长度现在
get比post更不安全,因为参数是直接暴露在url上的,所以不能来传递敏感信息
    post比get更安全,是因为只是不再地址栏是传输,其实不然,HTTP再网络是明文传输,只有在网络节点上捉包,就会完整获取数据报文,只有使用https才能加密安全
GET参数通过URL传递,POST放在Request body中

什么是HTTP? HTTP 和 HTTPS 的区别?

http超文本传输协议,是一种网络传输协议,即将数据由A传到B,或B传到A,并且A B之间能存在很多第三方,HTTP常用于web浏览器和网站服务器之间传到信息,以明文的方式传输,不提供任何的加密
HTTP是非常灵活的能传递任意数据对象,,并且简单快速,客户向服务器请求服务时,只需传送请求方法和路径,HTTP协议非常简单,使得HTTP服务器程序规模小,因而通信速度很快
并且服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间

HTTPS出现正是解决hHTTP的不安全性,为了保证这些隐私数据能加密传输,让HTTP运行安全的SSL/TLS协议上,即HTTP + SSL/TLS,通过SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密
TLS/SSL的功能实现主要依赖三类基本算法:散列函数hash、对称加密、非对称加密
HTTP 和 HTTPS 使用连接方式不同,默认端口也不一样,HTTP是80,HTTPS是443
HTTPS需要SSL,SSL 证书需要钱,功能越强大的证书费用越高

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

HTTP通信是明文传输,是不加密的,不会验证通信方的方式,因此有可能遇到伪装,所以才有了HTTPS,HTTP采用是建立在SSL之上的,安全有SSL来保证
SSL实现主要依赖与三种手段 : 对称加密,非对称加密,摘要算法,数字签名
摘要算法:只要在原文后附上它的摘要,就能保证数据的完整性
对称加密:客户端和服务器使用同一个密钥对数据进行加密和解密,相同的密钥可以用于信息的加密和解密,掌握密钥才能获取,对称加密的优势就是信息传输一对一,服务器和N个客户端通信,需要维持N个密码且
不能修改密码,但是密钥还是会通过网络传输的,一旦被别人获取到,就没有作用了,这是就会用到非对称加密
非对称加密:一个公钥 一个密钥,用私钥加密,只有对应的公钥才能解密,用公钥数据加密,只有对应的的私钥才能解密,公钥是公开给任何人的,任何想和我们服务器的客户,都可以使用公钥对数据进行鸡加密
但非对称加密有一个缺点就是说加密过程很慢,还有就是说服务器会一对多
数字签名:现在的方法也是不一定安全的,如果当有一个人在中间把我们的公钥截取到的,然后把她自己的公钥发给客户了,当客户使用她的公钥加密后在发送信息,这个人就会得到客户的信息,然后他也可以把客户的信息在发送给我们,然而我们自己还不知道,这时候就出现了数字证书(CA)主要是要有公信力的认证机构,服务器把自己的公钥登陆到 CA ,CA用自己的私有密钥对公开密钥进行数字签名颁发公钥证书,
当客服端拿到公钥证书会先让浏览器先认证一下数字证书机构的数字签名是否为真,一般浏览器会内置一些顶层的认证机构认证中心证书,相当于我们主动信任了他们,只有这样才能保证数据的安全

说说HTTP 常见的状态码有哪些,适用场景?

状态码就是服务器告诉客户端请求响应状态,通过状态码能判断分析服务器的运行状态
1XX表示信息,接收的请求正在处理
2XX表示成功,请求处理完毕
3XX表示重定向状态码 需要进行一些附加操作完成请求
4XX表示客服端错误代码,服务器无法完成请求
5XX表示服务器错误状态码,服务器处理请求出错

1XX
    100:客户端继续发送请求,这是临时响应,客服端在发送post请求征询服务器的可以出来POST的数据
    101:服务器根据客户端的请求切换协议
2XX
    200:请求成功
    201:请求成功且服务器创建了新的资源
    206:一般用来做断点续传,或者是视频文件等大文件的加载
3XX
    300: 针对请求,服务器可执行多种操作
    301: 永久重定向 该状态码表示请求资源已经被分配了新的 URL
    302:临时重定向 该状态码表示请求的资源被分配到了新的 URI,希望用户(本次)能使用新的 URI 访问资源
    304:浏览器缓存相关 状态码304并不是一种错误,而是告诉客户端有缓存,直接使用缓存中的数据
4XX
    400: 服务器不理解请求的语法 参数有误,请求无法被服务器识别
    403: 服务器拒绝请求
    404:未找到 服务器找不到请求的网页
5XX 
    500:服务器内部错误 该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障。
    501:尚未实施 服务器不具备完成请求的功能
    503:服务不可用 服务器目前无法使用(由于超载或停机维护)
    504:网关超时  服务器作为网关或代理,但是没有及时从上游服务器收到请求

如何理解OSI七层模型?

OSI全称是开放式通信系统互连参考模型 OSI把计算机网络体系结构划分成 七层,每一层 实现各自的功能和协议,并完成相邻层的接口和通信
    应用层:是最靠近用户的一层,为用户提供应用接口,也为用户提供网络服务,网络协议也在这一层,如HTTP,HTTPS FTP,作用就是为用户提供网络应用
    表示层:提供应用层数据的编码转换功能,确保一个系统的应用层的数据能被另外一个系统的应用层识别,还有一个重要的功能就是数据压缩,保证这个数据在所有的计算中的内存都一样
    会话层:负责建立,管理和终止实体层之间的通信会话,该层主要提供了数据交换的定界和同步功能
    传输层:主要任务就是两台主机之间的通信提供服务,处理数据包错误 其中,主要的传输层协议是TCP和UDP 传输层则规定了数据包的传输方式
    网络层:两台计算机的传送数据肯定不止一条,该层的主要功能还是,寻找合适的IP进行连接和合适的路由进行交换节点,主要还是为数据包传输路线 确保数据按时成功传送
    数据链路层:网络层交下来的 IP数据报组装成帧,在两个相邻节点间的链路上传送帧 也就是形成一条路
    物理层:实现计算机节点之间比特流的透明传送 通过物理介质传输比特流,常用的有 双绞线 电缆
答:我们使用 微信 qq这种我们就处于应用层,我们发布信息,发布信息就会经过表示层,会把我们的信息转换计算机认识的,并压缩确保数据能被其他系统识别,还有内存都一样,之后就进入会话层,说明要开始
    发送了,终止实体层之间的通信会话,开始数据交换,进入传输层,传输层开始检测数据包有没有错误,为两台主机提供传输方式,之后到达网络层,网络层还是寻找对应IP,寻找合适的路线,到达合适的路由,
    确保数据准时到达,数据链路层,将IP数据组装层帧,主要形成一条路,最后物理层就是实现戒指传输比特流,就是使用双绞线 电缆这些事实发送了

如何理解TCP/IP协议?

tcp/ip :传输控制协议/网际协议 是指能够在多个不同网络间实现信息传输的协议簇
TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,
只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以通称为TCP/IP协议族
TCP/IP按照层次划分 五层 和四层体系
五层协议:应用层 传输层 网络层 网络层 数据链路层 物理层    OSI参考模型中的会话层、表示层和应用层的功能合并到一个应用层实现
实际用于还是 TCP/IP四层体系结构 包括应用层  传输层 网络层 网络接口层
    应用层:负责实现一切与应用程序相关功能,包括 HTTP HTTPS协议 FTP协议
    传输层:负责提供传输服务,规定数据包的传输方式 UDP TCP 
    网络层:负责寻找网络,规划合适的路线
    网络接口层:负责数据的实际传输
OSI 参考模型与 TCP/IP 参考模型区别如下:
相同点
    OSI 参考模型与 TCP/IP 参考模型都采用了层次结构
    都能够提供面向连接和无连接两种通信服务机制
不同点
    OSI是七层,TCP/IP 五层
    TCP/IP 参考模型没有对网络接口层进行细分,只是一些概念性的描述; OSI 参考模型对服务和协议做了明确的区分
    OSI 参考模型虽然网络划分为七层,但实现起来较困难。TCP/IP 参考模型作为一种简化的分层结构是可以的
    TCP/IP协议去掉表示层和会话层的原因在于会话层、表示层、应用层都是在应用程序内部实现的,最终产出的是一个应用数据包,而应用程序之间是几乎无法实现代码的抽象共享的,这也就造成 OSI 设想中的应用程序维度的分层是无法实现的

如何理解UDP 和 TCP? 区别? 应用场景?

UDP(User Datagram Protocol),用户数据包协议,应用层传输的报文,UDP只会在数据头部加一个自己的标识,然后就传递给网络层了,UDP是面向无连接的,UDP是不支持一对一的,支持一对多,多对多
UDP 不合并,不拆分,不能对数据包进行排序的缺点,也就是当报文发送之后是无法得知是否安全完整到达,而且UDP无连接,通信都不需要建立连接,想发就发这种是不可靠的,并且收到什么数据就发送什么数据
也不会备份数据,发送数据是也不会关心对方是否正确接收到数据了
TCP:传输控制协议,是一种可靠的面向字节流的通信协议 TCP是面向链接的,是指发送数据之前必须在两端建立链接,建立链接的方法就是 三次握手,只能一对一传播 TCP    充分的实现了数据传输时各种功能
可以进行丢包时的重发控制,还可以对次序乱掉进行顺序控制
应用场景
    UDP:效率要求相对高,如QQ聊天,在线视频,对通信速度要求高,偶尔出现断续不是太大的问题
    TCP:效率很低,但是可靠,是面向链接的,传输中需要对数据确认,重发,排序的方式,如文件传输,邮件,远程登录

说说TCP为什么需要三次握手和四次挥手?

第一次握手:客户端发送网络包,服务端收到了 这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了 这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常
第三次握手:客户端发包,服务端收到了。 这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常


第一次挥手: 若客户端认为数据发送完成,则它需要向服务端发送连接释放请求。
第二次挥手:服务端收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明客户端到服务端的连接已经释放,不再接收客户端发的数据了。但是因为 TCP 连接是双向的,所以服务端仍旧可以发送数据给客户端。
第三次挥手:服务端如果此时还有没发完的数据会继续发送,完毕后会向客户端发送连接释放请求,然后服务端便进入 LAST-ACK 状态。
第四次挥手: 客户端收到释放请求后,向服务端发送确认应答,此时客户端进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有服务端的重发请求的话,就进入 CLOSED 状态。当服务端收到确认应答后,也便进入 CLOSED 状态。

如果是两次握手,发送端可以确定自己发送的信息能对方能收到,也能确定对方发的包自己能收到,但接收端只能确定对方发的包自己能收到 无法确定自己发的包对方能收到

三次握手:第一次 客户端发送网络包给服务端,服务端收到,证明 服务端接收能力没有问题,客户端发送能力没有问题,第二次:服务端发包 客户端接收 证明客服端接收没有问题 服务端的发送和接收都没有问题
         第三次:因为第二次的时候 服务器不知道客户端的接收是不是没有问题,所以第三次就是客服端打包确定我的接收发送都没有问题

四次挥手:第一次:客服端向服务器发送 连接释放请求  第二次:服务端接收到连接释放请求后,会告知应用层释放 TCP连接,此时客户端到服务端连接已经释放了,不会在接收服务端的信息,但是服务器还可以向客户端发送,此时的TCP处于半关闭状态,并且客户端也会进入等待,等待服务端发出的连接释放报文段。第三次:服务端会把自己没有发完的数据继续发送,并且告诉客服端我也要请求链接释放了
         第四次:客户端收到释放请求后,向服务器发送确认应答,服务端收到请求之后就变成结束状态,客户端这时候还在等待 服务器重新发送请求,当到达一定的时间则进入 结束状态

为什么不使用两次握手 
        只能客户端确定 服务端的接收和发送都没有问题,服务器不知道客户端的接收有没有问题,,所以要再发一次,让服务器知道我的接收有没有问题

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

DNS 域名系统,是进行域名与相对于的IP进行转换的服务器
IP 地址:一长串能够唯一地标记网络上的计算机的数字
域名:是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识
为什么会有DNS 因为机器是读取IP数串来找到对应的网站,是为了使人们方便的访问互联网,更好的使用,而不用去记IP这种数字,所以DNS就相当于把域名翻译成对应IP
域名有顶级,二级,三级等
当我们使用 www.baidu.com 的时候,会先去浏览器的DNS缓存,看看域名与ip地址的对应表,如果没有就会去操作系统的host文件去查找,如果还是没有就去本地的域名服务器查找,本地服务器会以递归
的方式查询自己DNS缓存,如果还是没有找到,就会想根域名服务器发起请求,根域名又会返回顶级域名服务器地址,然后顶级服务器向获取权限域名服务器的地址,本地域名发送顶级返回的地址,在发送请求
最终得到该域名对应的IP地址,本地域名服务器把得到的IP地址返回给操作系统存储起来,同时自己也会存储,操作系统将IP地址返回给浏览器,同时自己也会存储,最后浏览器也得到相对于的IP地址并缓存

如何理解CDN?说说实现原理?

CDN 内容分发网络 CDN其实就是个代理,可以根据用户自身所在的位置分配最近的资源 降低网络拥塞,提高用户访问响应速度和命中率。
在我们使用DNS的时候会经过域名解析,此时应用了CDN之后 会一个负载均衡系统,这个系统会帮用户查看自身的IP,寻找地理位置,查看运营商网络,找出合适的边缘网点,然后返回给用户,用户就能访问CDN的缓存代理

说说 HTTP 常见的请求头有哪些?

请求头是指http请求和响应消息的头部分
它们定义了一个超文本传输协议事务中的操作参数
也可以自己定义请求头 ajax设置请求头的方式  xhr.setRequestHeader('name','zw'),但是也需要到后台设置允许自定义请求头   response.setHeader('Access-Control-Allow-Headers','*') 
常见的请求头有: Accept :能够接受的回应内容类型  Accept-Charset 能够接受的字符集 cache-control  用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令 
                Cookie 发送的一个 超文本传输协议Cookie Origin 发起一个针对 跨来源资源共享 的请求 Host 服务器的域名

说说 HTTP1.0/1.1/2.0 的区别?

HTTP1.0:浏览器只能和服务器保持暂时的链接,浏览器每次请求都需要和服务器建立一个TCP链接
HTTP1.1:1.引入持续链接,TCP链接默认不关闭 2.在同一个TCP连接里面,客户端可以同时发送多个请求
HTTP2.0:1.使用报头压缩,降低开 2.采用二进制格式而非文本格式 3.完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行

说说对WebSocket的理解?

websocket 是一种网络传输协议 位于OSI模型的应用层,可以在单个TCP身上链接进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅
客户端和服务器只需要完成一次握手,两者就可以建立永久性的链接,并进行双向数据传输
在没有Websocket之前,开发实时web应用的方式为 轮询,不听的向服务器发送HTTP请求,问有没有数据 轮询的缺点也很明显,反复发送无效查询请求耗费了大量的带宽和 CPU资源 那么就可以近似地实现“实时通信”的效果
Websocket还引入了 ws 和 wss协议代表明文和加密的WebSocket,且默认端口号为 443
优点:较少的控制开销  更强的实时性 保持创连接状态
应用场景:弹幕 股票基金实时更新

说说地址栏输入 URL 敲下回车后发生了什么?

1.首先就是URL解析,会判断这是不是一个合法的 URL还是一个待搜索的关键词,URL结构解析过程中会看 协议 域名 端口号 和服务器资源的具体地址,然后就是参数
2.DNS查询 会看浏览器是否有相对应的 IP,如果没有则会去看操作系统 一个host的文件,如果还是没有就去本地域名服务器,向根域名,再向顶级域名获取对应域名的服务器,再返回给本地域名服务器,操作系统
          服务器,最后浏览器给浏览器,同时他们存储把刚刚获取的ip进行存储,其次如果有使用CDN的话,可以加快获取速度
3.TCP连接 确定目标服务器的IP后 会进行三次握手(第一次:得到客户端发送,服务器接收没有问题,第二次:服务器发送,客户端接收没有问题 第三次:服务器知道客户端接收没有问题)
4.发送HTTP请求 当建立tcp链接之后,就可以在这基础上进行通信,浏览器发送HTTP请求到目标服务器 发送请求行 请求头 请求体
5.响应请求 当服务器接收到浏览器的请求之后,会进行一些逻辑操作,处理完成后返回一个HTTP信息 返回状态行,响应头,响应体
5,渲染页面 : 浏览器接收到服务器的响应资源后,首先会对进行资源解析,查看响应头的信息,看看是否有重定向存储cookie,缓存资源 查看响应头的 Content-Type的值根据不同的资源类型采用不同的解析方式
页面的渲染过程如下:
    解析HTML,构建 DOM 树
    解析 CSS ,生成 CSS 规则树
    合并 DOM 树和 CSS 规则,生成 render 树
    布局 render 树( Layout / reflow ),负责各元素尺寸、位置的计算
    绘制 render 树( paint ),绘制页面像素信息
    浏览器会将各层的信息发送给 GPU,GPU 会将各层合成( composite 
    
在服务器响应之后,由于现在http默认开始长连接keep-alive,当页面关闭之后,tcp链接则会经过四次挥手完成断开

web常见的攻击方式有哪些?如何防御?

web攻击是针对用户上网或网站服务器等设备进行攻击的行为,如恶意代码,修改网站权限,获取用户隐私
常见的web攻击 xss攻击(跨站脚本攻击)CSRF跨站请求伪造 SQL注入攻击
XSS 攻击:就是攻击者把恶意代码植入到提供给其他用户使用的页面中 ,XSS攻击目标就是盗取客户端的cookie或者其他网站用于识别客户端的敏感信息,一旦获取到用户的合法用户信息之后,攻击者就会假冒用
合法用户的身份与网站进行交互
XSS攻击分为三种:存储型XSS 反射型XSS DOM型
存储型XSS:攻击者使用评论把恶意代码发送给他被攻击网站 用户打开这个网站时,攻击者的网站把恶意代码凭接在HTML给 浏览器,浏览器响应解析执行,恶意代码被在执行用户信息被获取,就可以冒充用户了
反射型XSS:攻击者构造出特殊的URL,其包含恶意代码,当用户打开恶意的URL时,攻击者的网站把恶意代码凭接在HTML给 浏览器,浏览器响应解析执行,恶意代码被在执行用户信息被获取,就可以冒充用户了
反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。
存储型漏洞常见于通过:如论坛发帖、商品评论、用户私信等 反射型 XSS 漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。
DOM型XSS :DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞
XSS的预防:我们在用户输入的过程中,过滤掉用户输入的恶劣代码 使用 innerhtml outerhtml, document write,不要把可信的数据作为HTML插入页面
          如 location、onclick、onerror、onload、onmouseover 等,<a> 标签的 href 属性,JavaScript 的 eval()、setTimeout()、setInterval() 等,都能把字符串作为代码运行

CSRF(跨站请求伪造)攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击者发送跨站请求,利用受害者在被攻击的网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对攻击的网站执行操作
CSRF的特点:攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击  攻击者利用受害者在被攻击的网站获取登陆凭证,冒充受害者
            跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪
CSRF的防御:防止不明x外域访问 双层cookie验证

SQL注入:是通过将恶意的SQL语句插入到应用的输入参数中,在后台sql服务器解析执行进行攻击
        预防方式如下:
        严格检查输入变量的类型和格式
        过滤和转义特殊字符
        对访问数据库的Web应用程序采用Web应用防火墙
  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值