1.http2.0的优缺点:
采用二进制格式传输数据
对消息头采用hpack进行压缩传输,能节省消息头占用的网络流量
异步连接采用多路复用
server push,服务端能够更快的把资源传给客户端
2.http报文的请求和返回会有几部分
请求报文 :请求头、请求行、空行、请求数据
HTTP响应: 状态行、消息报行、响应正文
1xx:指示信息--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。
常见状态码:
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。
Get和POST的区别
Get明文传输,会保存在浏览器历史记录,可以被缓存,2048
Post是通过请求header请求
1. IE浏览器对URL的长度现限制为2048字节(自己测试最多为2047字节)。
2. 360极速浏览器对URL的长度限制为2118字节。
3. Firefox(Browser)对URL的长度限制为65536字节。
4. Safari(Browser)对URL的长度限制为80000字节。
5. Opera(Browser)对URL的长度限制为190000字节。
6. Google(chrome)对URL的长度限制为8182字节
3.输入url到页面加载全过程
1。url: 协议名、域名、端口号
2. 缓存:
强制缓存:优先使用cache-control: max-age=缓存的秒数
Expires: 是服务器时间,浏览器检查当前时间,如果没有失效就直接使用缓存文件
比较缓存:
last-modified是上一次请求资源时,服务器返回的字段,表示最后一次更新时间。下一次浏览器请求资源时会发if-modified-since字段,服务器用本地的last-modified和if-modified-since时间比较,如果一致,发送304状态码
Etag: 资源的实体标识(哈希字符串)服务器判断是否发生变化,如果发生变化 304
3.DNS域名解析
1.浏览器检查本地hosts文件是否有这个网站的映射关系
2.查找本地DNS解析器缓存
3. 查找本地DNS服务器
4. TCP连接
第一握手: 建立连接。发送syn包到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次握手: 服务器收到syn包
5.浏览器向服务器发送HTTP请求
6.浏览器接收响应
7.页面渲染
解析HTML,构建DOM树
解析CSS,生成CSS树
合并DOM树和CSS规则树,生成render树
布局render树(reflow)
绘制render树
8.关闭TCP连接或者保持连接
四次挥手:
Http和https的主要区别
https需要证书,需要费用
http是超文本传输协议,信息是明文的,https的具有安全性的ssl加密传输协议
使用不同的连接方式 http:80 https:443
http的连接很简单,是无状态的,https协议是ssl+http协议构建可进行加密传输、身份认证的网络协议,比http安全
跨域:
浏览器同源策略: 协议、域名、端口
1.document.domain解决无法读取非同源网页的Cookie问题
(此方案仅限主域相同,子域不同的跨域应用场景。)
2.window.postMessage
页面和其打开的新窗口的数据传递
多窗口之间消息传递
页面与嵌套的iframe消息传递
上面三个场景的跨域数据传递
3.JSONP
只支持GET
核心思想: 网页通过添加一个
// 向服务器test.com发出请求,该请求的查询字符串有一个callback参数,用来指定回调函数的名字
// 处理服务器返回回调函数的数据
function dosomething(res){
// 处理获得的数据
console.log(res.data)
}
4.cors
普通跨域请求:只需服务器端设置Access-Control-Allow-Origin
带cookie跨域请求:前后端都需要进行设置
【前端设置】根据xhr.withCredentials字段判断是否带有cookie
5.cors返回头
6.性能优化:
1.减小请求资源大小或次数
2.尽量合并并压缩css和js文件
3.尽量试用字体图标或svg
4.图片懒加载
5.雪碧图、精灵图
6.减少对cookie的使用
7.避免使用iframe
8.减少使用闭包 闭包所在的上下文不释放
9.减少对DOM的操作,减少重绘和回流(重排)
10.减少css表达式使用