博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试杂碎01
阅读量:7247 次
发布时间:2019-06-29

本文共 10637 字,大约阅读时间需要 35 分钟。

1、http状态码

2开头 (请求成功)表示成功处理了请求的状态代码
3开头 (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

从输入URL按下回车到页面展现,总的来说发生了一下几个过程:

DNS 解析:将域名解析成 IP 地址

TCP 连接:TCP 三次握手
发送 HTTP 请求
服务器处理请求并返回报文
浏览器解析渲染页面
断开连接:TCP 四次挥手

1.说一下http和https

http:http是最为广泛应用的互联网传输协议,即超文本传输协议。HTTP是一个属于应用层的面向
对象的协议。由于其简捷、快速的方式,适用于分布式超媒体信息系统。

简介:超文本传输协议,

1)http是最为广泛引用的互联网传输协议,https是http的安全版,它的安全基础是SSL加密传输协议
2)http是明文传输的,传送报文容易被黑客截取
3)https需要到CA申请证书,可以认证客户端和服务端,确保正确发送到客户端和服务器
4)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。(
Http:超文本传输协议(Http,HyperText Transfer Protocol)是互联网上应用最
为广泛的一种网络协议。设计Http最初的目的是为了提供一种发布和接收HTML
页面的方法。它可以使浏览器更加高效。Http协议是以明文方式发送信息的,如果黑客截取了
Web浏览器和服务器之间的传输报文,就可以直接获得其中的信息。
5)Https协议的加密范围也比较有限。最关键的,SSL证书的信用链体系并不安全
6)http效率更高,https需要绑定ip,https并非绝对安全

2、tcp三次握手,一句话概括
第一次握手:客户端向移动端发送连接请求
第二次握手:服务端收到请求,向客户端进行反馈
第三次握手:第二次握手后,客户端确认当前请求是否继续有效

3、TCP和UDP的区别

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议;UDP是
一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务
TCP面向连接(如打电话要先拨号建立连接);
UDP是无连接的,即发送数据之前不需要建立连接
TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,
无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,
即不保证可靠交付
Tcp通过校验和,重传控制,序号标识,滑动窗口、
确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
UDP具有较好的实时性,工作效率比TCP高,
适用于对高速传输和实时性有较高的通信或广播通信。
每一条TCP连接只能是点到点的;UDP支持一对一,
一对多,多对一和多对多的交互通信
TCP对系统资源要求较多,UDP对系统资源要求较少。

4、WebSocket的实现和应用
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。
HTTP的生命周期通过 Request 来界定,
也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次HTTP请求就结束了。
应用:ajax轮询(异步) long poll(阻塞)
服务端就可以主动推送信息给客户端,只需要经过一次HTTP请求,就可以做到源源不断的信息传送了

8. 几个很实用的BOM属性对象方法?

window.navigator/location/history

9、兼容前缀
-webkit-      chrome、safari

-moz-        firefox

-ms- IE

-o- opera

10. 说一下http2.0/http1.1/http1.0
http1.0:无状态无连接。无连接指每次连接只处理一个请求,无状态是指协议对于事务处理没有记忆能力
http1.1:持久连接
请求管道化
通常,http请求总是顺序发送的,下一个请求只有在当前请求的响应被完全接受的时候才会被发送。由于网络延迟和带宽的限制,这样会导致在服务器发送下一个响应的时候中间有很大的延迟。
HTTP/1.1 允许多个http请求通过一个套接字同时被输出 ,而不用等待相应的响应。然后请求者就会等待各自的响应,这些响应是按照之前请求的顺序依次到达。
增加缓存处理(新的字段如cache-control)
增加Host字段、支持断点传输等(把文件分成几部分)
在HTTP/1.1中请求头已经默认使用Connection: keep-alive,避免了连接建立
和释放的开销,但服务器必须按照客户端请求的先后顺序依次回送相应的
结果,以保证客户端能够区分出每次请求的响应内容。
http2.0:二进制分帧
多路复用(或连接共享)
所有的HTTP2.0通信都在一个TCP连接上完成,这个连接可以承载任意数量的双向数据流。
头部压缩
服务器推送

11. 补充400和401、403状态码

400:服务器不理解请求的语法。
401:没有通过身份验证
403:服务器拒绝访问
404:服务器上找不到所请求的资源

13. Cookie、sessionStorage、localStorage的区别

Cookie有数量和大小(4kb)的限制,且需要我们自行封装api
需要指定作用域。容易被篡改,不安全
webStorage
分为sessionStorage 和 localStorage
WebStorage并不作为HTTP header发送到浏览器,所以相对安全
sessionStorage在会话结束后删除,localStorage是持久化存储,若不主动删除
,则永久有效。
有自己的api。5mb建议大小

14. 说一下web worker

Web Worker 的作用,就是为 JavaScript 创造多线程环境,
允许主线程创建 Worker 线程,将一些任务分配给后者运行。

16. iframe是什么?有什么缺点?
iframe也称作嵌入式框架,嵌入式框架和框架网页类似,它可以把一个网页的框架和内容嵌入在现有的网页中。
iframe标签的一些基本属性:
src iframe页面地址,有同域跨域之分
height iframe高度
width iframe宽度
name iframe命名,可通过window.frames[xxx]被调用
scrolling iframe滚动模式
sandbox html5新特性,用于限制iframe的功能

我们可以通过contentWindow和contentDocument两个API获取iframe的window对象和document对象。

iframe缺点:产生很多页面,不容易管理

iframe框架页面会增加服务器的http请求
代码复杂,不利于SEO
浏览器的后退按钮无效

17. Doctype作用?严格模式与混杂模式如何区分?它们有何意义?

告诉浏览器以何种规范解析文档
严格模式:又称标准模式,是指浏览器按照 W3C 标准解析代码。
混杂模式:又称怪异模式或兼容模式,是指浏览器用自己的方式解析代码
没有正确声明DTD或者加入xml声明将触发混杂模式

18. Cookie如何防范XSS攻击

XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是
发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预
期内执行的JS代码时,就发生了XSS攻击。

设置了HttpOnly属性的cookie变量无法被js获取,可以避免此种攻击

20、

RESTful是一种架构风格、设计风格,基
于RESTful的web系统更有层次、简便、轻量级以及通过HTTP直接传输,
RESTful web服务成为替代SOAP服务的一个更有前途的替代方案。

26、iframe通信,同源和不同源两种情况
同域:即父子页面相互调用
一、父页面调用子页面
1、先得到子页面的document
document.getElementById('FrameId').contentWindow.document
2、得到子页面的window
document.getElementById('FrameId').contentWindow.window
重载子页面:document.getElementById('FrameId').contentWindow.window.location.reload(true);
或者 $('#FrameId').attr('src','../list');
3、得到子页面的的变量
doucment. iframe的name属性值 . 子页面变量名称 (document.frameName.temp)
二、子页面调用父页面
1、父页面document : window.parent.document
2、获得父页面变量 : parent.变量名称
3、调用事件 : window.parent.XXX();

跨域:

主域:由两个或两个以上的字母构成,中间由点号隔开,整个域名只有1个点号
csdn.net
子域:是在主域名之下的域名,域名内容会有多个点号

未跨主域,跨子域

两个域的js文件中设置document.domain=主域名 即可

跨主域

location.hash
(B操作A)
1、动态改变location.hash,iframe不会重载
2、无论跨域与否,iframe内可以获取自己的location.hash
3、只要域名相同就能通信,即使ABC三层嵌套

 

27、介绍知道的http返回的状态码

2开头的http状态码
表示请求成功
200 成功处理了请求,一般情况下都是返回此状态码;

3xx (重定向)

重定向代码,也是常见的代码
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

4开头的http状态码表示请求出错

400 服务器不理解请求的语法。
401 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 服务器拒绝请求。
404 服务器找不到请求的网页。

5开头状态码并不常见,但是我们应该知道
500 (服务器内部错误) 服务器遇到错误,无法完成请求。

28、http常用请求头

Cache-Control 设置请求响应链上所有的缓存机制必须遵守的指令
Connection 设置当前连接和hop-by-hop协议请求字段列表的控制选项
Content-Type 设置请求体的MIME类型(适用POST和PUT请求)
If-Modified-Since 设置更新时间,从更新时间到服务端接受请
求这段时间内如果资源没有改变,允许服务端返回304 Not Modified
cookie
user-agent:用户浏览器信息
29、常用响应头
Cache-Control 告诉服务端到客户端所有的缓存机制是否可以缓存这个对象,单位是秒
Content-Type 设置响应体的MIME类型
Expires 设置响应体的过期时间
Status 设置HTTP响应状态

注意:头文件分为

general-header ;
general header是request、response都可用的, 但是不能用于entity.
其包含的字段有:
Request URL :请求的url
Request Method : 请求的方法,可以是GET、POST
Status Code:HTTP 状态码,表示请求成功
Remote Address:远程IP地址
request-header ;请求头
cookie
user-agent:用户浏览器信息
connection:是否建立持久连接,http1.1中默认keep-alive建立持久连接
Cache-Control:缓存相关,建立请求和响应所遵循的缓存的机制、
Content-Type:请求体的MIME类型 (用于POST和PUT请求中)
If-Modified-Since:缓存相关:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码
Accept:客户端需要接收的mime类型

 

response-header ;响应头
Last-Modified:缓存相关,返回资源最近一次修改的日期
Expires:缓存相关,响应过期的日期和时间
ETag:请求变量的实体标签的当前值
Content-Type:响应的mime类型
Cache-Control:告诉所有的缓存机制是否可以缓存及哪种类型

 

29、强,协商缓存
浏览器缓存主要分为强缓存(也称本地缓存)和协商缓存(也称弱缓存)
强缓存是利用请求头中的Expires和Cache-Control两个字段来控制的,用来表示资源的
缓存时间。强缓存中,普通刷新会忽略它,但不会清除它,需要强制刷新。浏览器强制刷新,
请求会带上Cache-Control:no-cache和Pragma:no-cache
Cache-Control:no-cache:不使用本地缓存。需要使用缓存协商
,先与服务器确认返回的响应是否被更改,如果
之前的响应中存在ETag,那么请求的时候会与服务
端验证,如果资源未被更改,则可以避免重新下载

协商缓存就是由服务器来确定缓存资源是否可用,所以客户端与服务器端要

通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问。
普通刷新会启用弱缓存,忽略强缓存。只有在地址栏或收藏夹输入网址、通过链接引用资源等情
况下,浏览器才会启用强缓存,这也是为什么有时候我们更新一张图片、一个js文件,页面
内容依然是旧的,但是直接浏览器访问那个图片或文件,看到的内容却是新的。

31、讲讲304

304状态码或许不应该认为是一种错误,
而是对客户端有缓存情况下服务端的一种响应
在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,
内容是客户端请求的资源,同时有一个Last-Modified的属性
标记此文件在服务器端最后被修改的时间。
客户端第二次请求此URL时,根据HTTP协议的规定,
浏览器会向服务器传送If-Modified-Since报头,询问
该时间之后文件是否有被修改过
如果服务器端的资源没有变化,则自动返回 HTTP 304(Not Ch
anged.)状态码,内容为空,这样就节省了传输数据量。当服务器端
代码发生改变或者重启服务器时,则重新发出资源,返回和第
一次请求时类似。
32、强缓存、协商缓存什么时候用哪个

33、前端优化
1)减少http请求,使用精灵图
2)使用CDN:
如果应用程序web服务器离用户更近,那么一个HTTP请求的响应时间将缩短。另一方面,如果组件web服务器离用户更近,则多个HTTP请求的响应时间将缩短。
CDN(内容发布网络)是一组分布在多个不同地理位置的Web服务器,
用于更加有效地向用户发布内容。在优化性能时,向特定用户发布内容的服务
器的选择基于对网络慕课拥堵的测量。例如,CDN可能选择网络阶跃数最小的服务器
,或者具有最短响应时间的服务器。
3)使用浏览器缓存
4)压缩组件
在一般的网站中,静态资源使用频率高,流量占用大。对于访问量稍大的网站,都会把静态资源放置到 CDN 服务器,不占用业务服务器的网络带宽,而达到更好的用户体验

34、GET和POST的区别
1)get的请求数据拼接在url内,post的请求数据在请求体内
2)get请求只能进行url编码,而post支持多种编码方式
3)
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

35、301和302的区别

301是永久重定向。302时暂时重定向

36、HTTP支持的方法:get/post

43、常见的HTTP的头部
52、描述一下XSS和CRSF攻击?防御方法?

54、具体有哪些请求头是跟缓存相关的

Cache-control if-Modified-Since
响应头:

56、cookie有哪些字段可以设置

57、cookie有哪些编码方式?

url编码

68、浏览器缓存机制

浏览器请求某一资源时,会先获取该资源缓存的header信息,然后根据header中的
Cache-Control和Expires来判断是否过期。若没过期则直接从缓存中获取资源信息,包
括缓存的header的信息,所以此次请求不会与服务器进行通信。这里判断是否过期,则是
强缓存相关。后面会讲Cache-Control和Expires相关。

如果显示已过期,浏览器会向服务器端发送请求,这个请求会携带第一次请求返回的有

关缓存的header字段信息,比如客户端会通过If-None-Match头将先前服务器端发送过
来的Etag发送给服务器,服务会对比这个客户端发过来的Etag是否与服务器的相同,若相
同,就将If-None-Match的值设为false,返回状态304,客户端继续使用本地缓存,不解析服
务器端发回来的数据,若不相同就将If-None-Match的值设为true,返回状态为200,客户
重新机械服务器端返回的数据;客户端还会通过If-Modified-Since头将先前服务器端发过来的
最后修改时间戳发送给服务器,服务器端通过这个时间戳判断客户端的页面是否是最新的,如果
不是最新的,则返回最新的内容,如果是最新的,则返回304,客户端继续使用本地缓存。

69、TCP四次挥手

1)客户端发送关闭请求,不再向服务端发送请求
2)第二次挥手,服务端已经接收到了客户端的关闭请求,此时还可以继续向客户端发送信息
3)所有数据发送完毕后,服务端通知客户端可以关闭
4)客户端收到可以关闭的通知,通知服务端可以关闭,服务端收到关闭允许后立刻关闭。
客户端设置定时器,到时间自动关闭

70、为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送S
YN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭
连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只
能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我
Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
71、描述一下XSS和CRSF攻击?防御方法?
XSS跨站脚本攻击,发生在客户端,浏览器在解析渲染DOM时执行了意外的JS脚本。XSS漏洞主要是没有处理好
用户的输入而产生的。为了防范XSS的攻击,必须为输入添加验有效的验证,为cookie设置httpOnly

CSRF跨站请求伪造:

最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。
72、fetch
1)fetch内部使用promise封装的
2)fetch()返回的promise将不会拒绝http的错误状态,即使响应是一个HTTP 404或者500
3)在默认情况下 fetch不会接受或者发送cookies
如果想要在同域中自动发送cookie,加上 credentials 的 same-origin 选项

73、cookie:其实cookie是一个很小的文本文件,

是浏览器储存在用户的机器上的。Cookie是纯
文本,没有可执行代码。储存一些服务器需要的信息
,每次请求站点,会发送相应的cookie,这些cookie可以
用来辨别用户身份信息等作用。
通过docuemnt.cookie可以设置和获取Cookie的值

请求行:

①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。

②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL。
③是协议名称及版本号。

75、token

防止表单重复提交,进行身份验证

76、fetch发送两次请求?

原因很简单 因为你用的fetch post修改了请求头,导致fetch第一发送一个o
ptions请求,询问服务器是否支持修改的请求头,如过服务器支持,那么将会再次发送真正的请求。

77、session/sessionStorage

是不一样的两个东西

78、session/cookie的区别

Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之

间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户
请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对
象。当会话过期或被放弃后,服务器将终止该会话。
1)cookie保存在浏览器端,session保存在服务器端
2)有1)知session比cookie更安全
3)cookie有大小限制,session没有
4)存储内容:cookie只能保存字符串类型,以文本的方式;session通过类似与Hashtable的数据结构来保存,
能支持任何类型的对象(session中可含有多个对象)

79、计算机网络分为哪几层?

TCP/IP :链路、网络、传输、应用
链路:以二进制的形式在物理层面上传输数据,传输有地址的帧以及错误检测功能
网络:为数据包选择路由
传输:提供端对端的接口
应用:数据格式化,代码转换,数据加密,实现文件传输,文件服务等功能

 

80、什么场景使用TCP/UDP?那些应用层使用了UDP?

应用场景
#TCP应用场景
当对网络通信质量有要求时,比如:整个数据要准确无误的传递给对方,这往往对于一些要求可靠的应用,比如HTTP,HTTPS,FTP等传输文件的协议,POP,SMTP等邮件的传输协议。常见使用TCP协议的应用:
1.浏览器使用的:HTTP
2.FlashFXP:FTP
3.Outlook:POP,SMTP
4.QQ文件传输

UDP 文件传输协议

对当前网络通讯质量要求不高的时候,要求网络通讯速度尽量的快,这时就使用UDP
日常生活中常见使用UDP协议:
1.QQ语音
2.QQ视频
3.TFTP

 

81、DNS

即域名系统。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,

而不用去记住能够被机器直接读取的IP数串。

通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)

1、浏览器中输入www.qq.com域名,操作系统会先检查本地的hosts文件是否有这个网址映射关系,
如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,
是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果两者都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,
在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,
包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,
但该服务器已缓存了此网址映射关系,
则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,
则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,
本地DNS就把请求发至13台根DNS,
根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,
并会返回一个负责该顶级域名服务器的一个IP。
本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。
这台负责.com域的服务器收到请求后,如果自己无法解析,
它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。
当本地DNS服务器收到这个地址后,就会找qq.com域服务器,
重复上面的动作,进行查询,直至找到www.qq.com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,
由上一级服务器进行解析,上一级服务器如果不能解析,
或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,
还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

转载于:https://www.cnblogs.com/Tanqurey/p/10604161.html

你可能感兴趣的文章
落力在岁月青葱
查看>>
2015年春节往事小记
查看>>
oracle 删除表空间后服务器磁盘空间未释放
查看>>
windows程序员C/C++转向linux程序员时,如何编写、调试linux程序
查看>>
我的友情链接
查看>>
非等宽图片列表的布局
查看>>
【JAVA技术】webservice接口
查看>>
app打包总结 以及 提交app审核过程
查看>>
关于root(其他)用户拒绝登陆mysql的处理方法
查看>>
Linux基本常用命令总结-初级
查看>>
域计算机修改修改本地帐号密码
查看>>
负载均衡集群的实现方式之一LVS
查看>>
公有云产品试用介绍
查看>>
我的友情链接
查看>>
Servlet+JSP+MySQL实现用户管理模块之六、实现用户信息显示
查看>>
软件项目管理
查看>>
3012.脚本作业—l201.10.0编写一个脚本用于检测IP地址(递进版10)
查看>>
rpmbuild SPEC文件
查看>>
心在山水间
查看>>
ionic开发android app步骤
查看>>