概念
HTTP是超文本传输协议,是基于请求-响应的应用层协议,基于TCP/IP传输,用于在客户端和服务端之间传输超文本(HTML,CSS,JS,图片、视频等其他资源)。
工作流程
- 客户端发起请求:包含请求方法(GET,POST...),请求URL,请求头,请求体等信息
- 服务端处理请求:服务器接收到请求后,根据请求信息进行处理(增删改查、获取资源)
- 服务端返回响应:服务器处理请求后,构建一个响应信息(状态码,响应头,响应体等)
- 客户端接收响应:客户端根据响应进行处理,解析HTML,处理数据等
状态码
1xx: 信息性状态码,表示请求已被接收,需要继续处理。
2xx: 成功状态码,表示请求已成功处理。
- 200 OK
- 204 No Content
3xx: 重定向状态码,表示需要进一步操作才能完成请求。
- 302 Found
- 304 Not Modified,协商缓存
4xx: 客户端错误状态码,表示请求有误,服务器无法处理。
- 400 Bad Request,语法错误
- 401 Unauthorized,没登录
- 403 Forbidden,没权限
- 404 Not Found
5xx: 服务器错误状态码,表示服务器发生错误,无法处理请求。
- 500 Internal Server Error,网络异常/服务器异常
- 502 Bad Gateway
- 503 Service Unavailable,服务器异常
特点
- 简单灵活:支持处理多种数据类型(文本、HTML、图片、视频等)
- 无状态:能快速处理更多的请求(通过Cookie、请求头携带状态信息)
- 明文传输(通过HTTPS保证数据的安全性,完整性)
- 可靠:基于TCP/IP协议进行数据传输
HTTP1.1和HTTP2
HTTP/1.1:
- 持久连接:建立一次TCP连接,可发送多个HTTP请求
- 管线化:不用等待响应,就可以直接发送下一个请求
HTTP/2:
- 采用二进制格式传输数据,提高解析效率
- 支持多路复用
- 头部压缩,减少传输体积
HTTPS
概念
- 和SSL或TLS组合使用的HTTP被称为HTTPS
功能
-
加密
-
HTTP是明文传输没有加密机制
-
可以通过和SSL或TLS组合使用,加密HTTP的通信内容
- 客户端发起请求(HTTPS)
- 服务器返回证书(包含公钥)
- 客户端验证证书(是否过期?可信机构颁发?)
- 客户端生成随机密钥:客户端生成一个随机的对称密钥,并用服务器的公钥加密后发送给服务器
- 建立加密连接:服务器使用私钥解密对称密钥,双方用对称密钥加密通信内容
-
-
认证
- SSL使用证书,可以确定通信方
- 客户端在开始通信之前先确认服务器的证书
-
完整性保护:HTTP无法证明通信的报文完整性
- 下载的文件遭篡改,接收方也无法察觉
- 提供下载的网站会提供数字签名及MD5算法生成的散列值
- 仅靠HTTP确保完整性是非常困难的,因此需要通过SSL组合使用
HTTPS提供加密+认证+完整性保护,也有利于SEO
Web攻击
-
SQL注入
- 攻击者在输入字段中注入恶意的SQL,使其得能够查询到无权限查看的数据,导致数据泄露
- 措施:对用户输入进行校验
-
XSS(跨站脚本攻击)
- 攻击者将恶意脚本注入正常网页中,其他用户访问时,恶意脚本会在用户浏览器执行,窃取Cookie,伪造用户身份
- 措施:对输入进行过滤,转译
-
CSRF(跨站请求伪造)
-
DDos(分布式拒绝服务攻击)
- 攻击者通过控制大量电脑,向目标网站发送大量请求,导致目标网站的服务器过载,无法响应正常用户请求。
- 措施:限制IP请求频率;启用WAF防火墙,过滤恶意请求