图解http
一、了解web及网络基础
1.网络基础TCP/IP
通常使用的网络包括互联网是在TCP/IP协议族的基础上运作的,HTTP是属于它内部的一个子集,
不同的硬件,操作系统之间的通信需要一种规则,这种规则称为协议(protocal);
2.TCP/IP的分层管理
TCP/IP分为四层:应用层、传输层、网络层、数据链路层
应用层:决定了向用户提供应用服务时通信的活动;http协议处于该层
传输层:提供处于网络连接中的两台计算机之间的数据传输(TCP位于该层)
网络层: 处理在网络上流动的数据包,数据包时网络传输的最小数据单位(IP)
链路层:用来处理连接网络的硬件部分
利用TCP/IP协议族进行通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接收端从链路层往上走
3.一次完整的http请求过程
二、简单的HTTP协议
请求报文组成:请求方法、请求URI、协议版本、可选的请求首部字段、内容实体
响应报文组成:协议版本、状态码、原因短语、响应首部字段、实体主体
三、HTTP状态码
1XX: 接收的请求正在处理
2XX: 请求正常处理完毕
3XX: 重定向状态码
4XX: 客户端错误
5XX: 服务器错误
常见状态码:
200: 请求成功返回内容
204: 请求成功无内容返回
206: 范围请求
301: 永久性重定向
302: 临时性重定向(会存在网址劫持的问题)
303: 临时性重定向,但明确表示客户端应采用GET方法获取资源
304: 缓存
307: 临时性重定向,会遵照浏览器标准,不会从POST变成GET
400: 客户端语法错误
401:请求需要通过HTTP认证
403: 未获得访问权限
404: 服务器上无法找到请求的资源
500: 服务器端执行请求时发生错误
503: 服务器暂时处于超负载或正在停机维护
四、HTTP首部
HTTP报文包括报文首部、空行、主体部分
请求报文首部:请求行,请求首部字段,通用首部字段,实体首部字段,其他
响应报文首部: 状态行,响应首部字段,通用首部字段,实体首部字段,其他
五、确保安全的HTTPS
HTTP的缺点
1.通信使用明文(不加密),内容可能会被窃听; 通过加密技术来解决
通信的加密:HTTP协议中没有加密机制,通过和SSL或TLS组合使用,建立安全通信线路,加密HTTP的通信内容;
内容的加密:客户端对HTTP报文进行加密处理后再发送请求
2.不验证通信方的身份,有可能遭遇伪装;
使用SSL不仅提供加密处理,还使用了证书的手段确定通信方
3.无法证明报文的完整性,有可能被篡改
通过MD5,PGP签名验证
HTTP+加密+认证+完整性保护=HTTPS
HTTPS:是添加了加密及认证机制的HTTP;HTTP+SSL
SSL(安全套接层):是为网络通信提供安全及完整性的一种安全协议
常见的加密方法:
共享秘钥加密: 加密和解密同用一个密钥的方式;
优缺点:密钥有可能被窃听的风险,处理速度较快
使用两把密钥的公开秘钥加密: 发送密文的一方使用对方的公开秘钥加密,对方收到被加密的信息后,使用自己的私有秘钥进行解密
优缺点: 秘钥不会被窃听,但处理速度要慢
HTTPS采用混合加密机制
HTTPS存在一些问题:当使用SSL时,处理速度变慢;
SSL必须进行加密处理,在服务器和客户端都需要进行加密和解密的运算处理,会更多地消耗服务器和客户端的硬件资源,导致负载增强
需要购买证书耗费财力
六、webSocket
是什么:webSocket是一个html5的一个新特性,目的是为了在浏览器和服务器之间建立一个双向通信的通道,服务器可以在任意时刻给浏览器发送消息。
与传统http的不同:http是一个请求-响应协议,必须由客户端发起请求,服务器才能发送数据给浏览器
请求格式如下:
GET ws://localhost:3000/ws/chat HTTP/1.1
Host: localhost
Upgrade: websocket //协议升级
Connection: Upgrade
Origin: http://localhost:3000
Sec-WebSocket-Key: client-random-string //是用于标识这个连接,并非用于加密数据;
Sec-WebSocket-Version: 13
创建 WebSocket 对象:
var Socket = new WebSocket(url, [protocol] );
webSocket事件:
Socket.onopen 连接建立时触发
Socket.onmessage 客户端接收服务端数据时触发
Socket.onerror 通信发生错误时触发
Socket.onclose 连接关闭时触发
webSocket方法:
Socket.send() 使用连接发送数据
Socket.close() 关闭连接
七、常见的攻击及加密方式
xss(跨站脚本攻击):在网站内嵌入恶意脚本,窃取用户的cookie或者用户信息
攻击方式:在提交表单时攻击或者uri参数传递时攻击
CSRF(跨站请求伪造):攻击者伪装成已完成认证的用户向第三方平台发送恶意请求
解决方案:设置cookie为httpOnly,验证token
SQL注入攻击:通过非法的sql指令来操作数据库
解决方案:重要信息加密,md5
DDOS攻击:黑客通过程序控制大量的计算机,然后通过这个计算机群在同一个时间,发送大量的请求到目标服务器,从而达到服务器处理不过来,请求超时的情况