1. 浏览器输入地址后发生什么
- 解析URL
- DNS解析、监测缓存
- 客户端与服务端建立TCP连接(三次握手)
- 请求与传输数据
- 进行数据渲染
- 解析HTML、生成DOM树、解析CSS代码、将数据渲染到网页上
2. 轮询、长轮询、长连接、websocket区别
- 轮询:定时向服务器发送ajax请求,无需等待响应
- 长轮询:客户端向服务器发送请求,服务器保持连接,当有更新消息立即返回客户端,连接关闭。
- 长连接:客户端向服务器发送请求,服务器保持连接,当有更新消息立即返回客户端,连接保持。
- websocket:H5提供的基于TCP的双向通讯协议,服务器主动推送消息到客户端,只需一次握手连接,即可建立持久连接
3. websocket
特点:
- 基于TCP协议,通过HTTP进行首次握手连接,默认端口80 \ 443
- 可传输文本或二进制数据
- 没有同源限制
- wss(通过TLS加密)
如何升级:
1. 客户端发起协议升级请求(http/get)
Connection: Upgrade // 表示要升级协议
Upgrade: websocket // 表示要升级到websocket协议
Sec-WebSocket-Version: 13 // websocket的版本号
Sec-WebSocket-Key: V8JrNqt+p99r+9wknOeGVw== // 匹配服务端返回的Sec-WebSocket-Accept,提供防护防止恶意连接
2. 服务端响应并返回101,标识协议切换成功

4. 三次握手、四次分手
! 需了解传输协议,数据包
- 三次握手
客户端 ->(建立连接)-> 服务器
客户端 <-(确认接受,建立连接)<- 服务器
客户端 ->(确认接受)-> 服务器
- 四次分手
客户端 ->(关闭连接)-> 服务器
客户端 <-(确认关闭)<- 服务器
客户端 <-(关闭连接)<- 服务器
客户端 ->(确认关闭)-> 服务器
5. 请求状态码
2XX 请求成功
- 200 请求成功
- 204 请求成功,但未有任何资源返回
- 206 服务器成功处理部分get请求)
3XX 重定向
- 301 (Moved Permanently) 永久重定向
说明请求的资源已经被移动到了由 Location 头部指定的 url 上,是固定的不会再改变。搜索引擎会根据该响应修正。
- 302 (Found) 临时重定向
重定向状态码表明请求的资源被暂时的移动到了由 Location 头部指定的 URL 上。浏览器会重定向到这个URL,但是搜索引擎不会对该资源的链接进行更新
- 303 (See Other) 重定向链接指向的不是新上传的资源,而是另外一个页面
- 304 (Not Modified) 访问缓存资源,服务器无数据返回
4XX 客户端错误
- 401 需要验证
- 403 不允许访问
- 404 未在服务器上找到任何资源
5XX 服务器错误
6. 安全问题
XSS(跨站脚本攻击)是在网页中注入非法的js脚本,获取cookie达到控制浏览器的目的
- DOM xss : 使用DOM可以允许程序和脚本动态的访问和更新文档的内容、结构和样式
- 反射性 xss:发出请求时,XSS代码出现在URL中,最后输入提交到服务器,服务器解析后在响应内容中出现这段XSS代码,最后浏览器解析执行。
- 存储型 xss:当攻击者提交一段XSS代码后,被服务器端接收并存储,当所有浏览者访问某个页面时都会被XSS,其中最典型的例子就是留言板。
危害:
- 利用虚拟输入表单获取用户信息
- 获取cookie,可代替用户进行危险操作
防范方法:
- httpOnly: 在 cookie 中设置 HttpOnly 属性,使js脚本无法读取到 cookie 信息
- 前后端校验输入表单格式,过滤不合理字符
CSRF 跨站点请求伪造,冒充用户发起请求,完成一些违背用户意愿的事情(如修改用户信息等)
危害:
- 利用已认证过的用户对商品信息、个人信息进行违法操作等
防范方法:
- 验证码: 强制用户与应用进行交互
- 减少get请求
- token验证CSRF防御机制是公认最合适的方案
token使用原理
- 后端随机生成一个token,并将此token携带在cookie中,然后将此token传递给前端页面
- 前端获取此token后,每次请求都携带token
- 后端验证token是否一致,若一致则请求合法
7. ajax请求过程
- 创建XMLHttpRequest对象,
- 创建http请求,并指明请求的url,方式和参数
- 设置http请求状态变化的函数
- 发送http请求
- 通过回调获取返回的数据
- 渲染
8. 跨域的方式
同源策略: 具有相同的协议(http/https)、域名、端口即为同源,不存在跨域,反之亦然
-
跨域资源共享(CORS)
需后端设置
-
服务器转发代理
请求同源地址的代理接口,服务器访问跨域接口并返回数据
-
jsonp
利用script标签不受同源策略限制的特征,在src内写入请求地址,末尾回调处理数据
<script type="text/javascript" src="http://localhost/Service.ashx?callback=jsonpCallback" />手动实现
function jsonp(url,callback) { // 定义回调函数 window[callback] = function(){//...todo} // 生成script标签 let script = document.createElement('script') // 设置src地址 script.src = url + '?fn=' + callback // 添加到document中 document.appendChild(script) }
9. cookie、sessionStorage、localStorage
cookie
- 存储大小最大为4k
- 总是携带于http请求中
- 需设置max-age,超过时间则被销毁
sessionStorage
- 存储大小最大为5M
- 存储于本地中
- 当前会话有效,页面或浏览器关闭则销毁
- 从A跳转到B,B可与A共享sessionStorage;若单独打开B,则获取为null
localStorage
- 存储大小最大为5M
- 存储于本地中
- 若未设置过期时间,则永久保存
- 页面之间共享
若浏览器开启了隐私模式,则以上存储方式都会失效