谈谈对HTTP协议的理解?
http 和 https区别?
http协议的主要特点?
http报文的组成部分?
http方法?
post 和 get区别?
http 状态码?
什么是持久连接?
什么是管线化?
从“在浏览器输入域名”到“页面静态资源完全加载”的整个流程
HTTPS协议
加密方式
http 缓存
http 和 https 区别?
- SSL: 安全-套接字-协议,靠证书验证服务器身份,在本地和服务器之间建立通道
- 定义:
// http:
1. http(超文本传输协议) : 传输过程不加密, 明文传输(账号密码不安全)
// https:
1. https :增加SSL协议,负责网络连接加密
2. https连接:
step1,和服务器建立安全的连接通道;
step2,服务器发证书到浏览器(说明访问的服务器没有问题);
step3,服务器把没有上锁的箱子和钥匙发给浏览器;
step4,浏览器把信息放到盒子里用钥匙锁上发给服务器;
step5, 随后服务器用自己的钥匙打开,密码随机,每次会话生成不同的密码
3. https缺点:
a: SSL证书收费(功能越强越贵)
b: 延迟页面加载时间,约50%
c: 缓存不如http
d:占用更多服务器连接资源
e:面对黑客攻击,和dos拒绝服务攻击也没区别
http协议的主要特点:
1.简单快速:
2.灵活:完成不同数据类型的传输
3.无连接:连接一次就会断掉
4.无状态:客户端和服务端连接是不会记住身份的
http报文的组成部分:
1.请求报文
请求行:http方法,页面地址,http协议及其版本
请求头: key value值,告诉服务端需要的内容
空行:
请求体:
2.响应报文
状态行: http协议及其版本,状态码
响应头:
空行
响应体
http方法:
1. get : 获取资源
2. post: 传输资源
3. put: 更新资源
4. delete: 删除资源
5. head: 获取报文首部
6. options: 询问支持的方法(返回服务器对指定资源支持的 HTTP 请求方法,一般用于测试服务器功能的可用性。)
post 和 get区别:
1. 安全性: post更安全,因为get参数直接暴露在url上
2. 长度限制:get传送的参数有长度限制
3. 传参方式:get通过url传递, post放在请求体中
4. 缓存: get请求会被浏览器主动缓存,post需要手动设置
5. 数据类型: get只接受ASCII字符, post没有限制
http 状态码:
1. 1xx: 指示信息,已接收,待下一步处理
2. 2xx: 成功
200:客户端请求成功
201: created, 请求被处理,创建类新的资源
202: accept, 服务器接收到消息,未进行处理
204: no content,请求成功,客户端不需要更新现有视图
206:客户端发送了带有rang头的get请求,服务器完成了
3. 3xx: 重定向
301: 永久重定向
302: 临时重定向
304: 协商缓存,告诉浏览器有缓存,可以从缓存取
4. 4xx: 客户端错误
400: 客户端请求语法有错,不能被服务器理解
401: 请求未经授权
403: 页面禁止被访问
404: 资源不存在
5. 5xx: 服务器错误
500: 服务器错误
502: 服务器中接收到的响应是无效的, 服务器挂了
503: 服务不可用,停机维护或超载。
504: 网关超时
什么是持久连接:
1. http协议采用【请求-应答】模式
2.【普通模式】:每个请求/应答,客户和服务器都要建立一个连接,完成后立即断开
3.【keep-alive模式】:(持久连接)keep-alive功能使客户端到服务端的连接持续有效,当出现对服务器后继请求时,keep-alive避免了重新建立连接
什么是管线化:
1.【过去】在持久连接前提下,请求1->响应1->请求2->响应2
2.【管线化】:现有请求一次打包发过去,响应一次性发回来
请求1->请求2->响应1->响应2->
2. 限制:
仅http1.1支持
只有get 和 head请求支持, post 有所限制
从“在浏览器输入域名”到“页面静态资源完全加载”的整个流程?
- 第一步: 用户输入url
- 第二步: 浏览器检查本地DNS 缓存, 没有就向DNS服务器发起DNS解析请求,返回对应域名的ip地址
- 第三步:浏览器建立TCP/IP连接(传输层)三次握手
建立连接时:
第一次握手: 浏览器发送序列包syn到服务器,等待服务器确认
第二次握手: 服务器接收到序列包syn, 向浏览器发送确认的序列包ack, 以及发送自己的序列包syn,即ack + syn包
第三次握手: 浏览器接收服务器的ack和syn包, 向服务器发送确认包ack,此包发送完毕,客户端和服务端建立连接,完成三次握手
- 浏览器发送http请求报文
- 服务器处理http请求
- 服务器发送http响应报文
- 浏览器解析html内容
- 浏览器发送页面资源请求(http)
- 服务器返回页面资源(图片,样式,脚本)
- html dom树和css规则树,生成渲染树
- 最终呈现在页面上
- 浏览器建立TCP/IP连接(传输层)四次握手
关闭连接时:
第一次握手: 浏览器发送-个FIN
第二次握手: 服务器接收到FIN, 向浏览器发送一个确认的ack
第三次握手: 服务器数据传输完成后, 向浏览器发送一个FIN
第四次握手: 浏览器发送确认的ack给服务器,完成关闭连接
XSS?
存储型XSS?
CSP?
- 这个信息可以用HTTP头的形式出现; 网站通过这个信息告诉浏览器哪些外部资源可以加载和执行。
- 也可以通过 标签出现
<meta http-equiv="Content-Security-Policy"
content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">
- script-src:外部脚本
- style-src:样式表
- img-src:图像
- media-src:媒体文件(音频和视频)
- font-src:字体文件
- object-src:插件(比如 Flash)
- child-src:框架
- frame-ancestors:嵌入的外部资源
- connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)
- worker-src:worker脚本
- manifest-src:manifest 文件
HTTPS协议
- HTTPS = HTTP + SSL/TLS
- 为了网络数据的安全性,通过加密传输的方式来对传统上网的HTTP流量进行保护
加密方式
- 对称加密算法(常用)
- 加密解密采用 “ 同一个 ” 密钥
- 非对称加密算法
- 加密解密采用 “ 不同的 ” 密钥
http 缓存
- 分类: 强缓存 和 协商缓存
- 定义:
// 协商缓存:
1. 资源时间过期:
响应头: expires-绝对时间;
请求头和响应头: cache-control 相对时间
// 强缓存:
1. 资源修改时间:
响应头:last-modify;
请求头:if-modify-since, 只能精确到秒
2.内容修改:
响应头:etag; 请求头:if-none-match(存储上一次服务器的etag)