文章目录
HTTP(/1.1)(s)
HTTP
HTTP简介
Hyper Text Transfer Protocol(超文本传输协议)。是用于从万维网服务器(www:Wrold Wide Web)传输超文本到本地客户端的应用层传送协议。
HTTP特点
- 适用范围广 :最初是用于浏览器和服务器的通信协议,基于TCP/IP协议族,现在几乎所有客户端都可以使用http
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
报文
请求报文
响应报文
状态码
- 1xx:信息提示,表示请求已被成功接收,继续处理。
- 2xx:请求被成功提交。
- 3xx:客户端被重定向到其他资源。
- 4xx:客户端错误状态码,格式错误或者不存在资源。
- 5xx:描述服务器内部错误。
常见状态码
- 200:客户端请求成功
- 302:重定向
- 404:请求资源不存在
- 400:客户端请求有语法错误,不能被服务器所理解
- 401:请求未经授权
- 403:服务器收到请求,但是拒绝提供服务
- 500:服务器内部错误
- 503:服务器当前不能处理客户端的请求
请求方法
- GET 请求指定的页面信息,并返回实体主体。
- HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 - PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。 - CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
- OPTIONS 允许客户端查看服务器的性能。
- TRACE 回显服务器收到的请求,主要用于测试或诊断。
get和post区别
-
提交数据放置位置不同:get请求是将数据拼接在url后面,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII,且只能是ASCII。
而post请求是将数据放在请求体中,数据可以是二进制流。
-
数据大小不同 :HTTP协议本身对传输数据大小没有限制,但浏览器和服务器以及操作系统会进行限制。
-
安全性:POST请求相对来说比GET请求安全些。
-
缓存:get请求能够被缓存,post请求不能被缓存,所以get请求相对来说较快。
-
行为不同:get请求是获取资源,post请求是改动服务器资源。
与HTTP密切相关的协议
IP协议
IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。
ARP协议
IP地址位于第三层(广域网),MAC地址位于第二层(局域网),局域网中唯一标志某一台设备,ARP协议就是将广域网第三层的IP地址解析成第二层的MAC地址,精准点对点将数据传输到某一台设备。
主机arp表:arp -a
路由arp表:show arp
- 协议:IP协议
- 地址:IP地址
- 生存时间:min
- 硬件地址:mac地址
- 类型
- 下一跳、出接口
主机路由表:
netstat -r
- 目标网络
- 网络掩码
- 网关
- 下一跳、接口
- 度量值
路由器路由表
show ip route
- 协议类型
- 网络地址
- 下一跳地址
- 管理距离、度量值 等等
无论是主机还是路由器的路由表都有网络地址、下一跳等基本属性。
由此可见 ,在广域网中,数据点对点传输是靠IP地址,用路由等设备不断接力寻址,找到目标设备,进入局域网后,mac地址唯一,利用arp协议确定目标设备,实现点对点通信。
TCP协议
位于传输层,提供可靠字节流传输服务,为了方便传输。将大 块数据分割成以报文段(segment)为单位的数据包进行管理。而可 靠的传输服务是指,能够把数据准确可靠地传给对方。
一言以蔽之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。
除了上述三次握手,TCP 协议还有其他各种手段来保证通信的可靠性。
DNS服务
与纯数字IP地址相比,域名更符合人的记忆习惯,所以将域名和IP地址进行映射就依靠DNS域名解析服务。
一图胜千言
HTTP/1.1
无状态
在HTTP1.0中,每一个请求都是无状态的,下一个请求与上一个请求没有任何关联,那么登录一个网站后,每一次请求都需要重新登录来保证登录状态。所以在HTTP/1.1引入了cookie和session技术,保持会话。
cookie和session的区别
- cookie保存在浏览器,session保存在服务器
- cookie不是很安全,别人可以分析cookie进行cookie欺骗
- session会在服务器保存一段时间,会给服务器造成压力
- 单个cookie长度一般不能超过40K,session没有限制大小。
长连接
在纯文本传输中,请求一个资源就断开没什么问题,但是随着互联网发展,html页面越来越精美,其中不仅有文本还有图片资源,每请求一个资源就关闭连接,下一次请求再创建连接,很明显无法复用连接。
在http/1.1引入了长连接,实现连接复用,短时间内请求的资源都走这个连接,极大的减少了连接创建和释放的开销,只要任意一端没有明确表示释放连接,则保持TCP连接。
HTTPS
HTTP的不足
-
通信使用明文(不加密),内容可能被窃听
通过抓包软件查看 HTTP 响 应报文的全部内容等一系列的事情都可以做到。
-
不验证通信方的身份,因此可能遭遇伪装
-
无法证明报文的完整新,所以可能已遭篡改
HTTPS加密方式
加密可以防止请求被窃听,加密的方式有两种:通信加密和内容加密
-
通信加密
在HTTP的基础上使用SSL(Secure Socket Layer,安全套接层)和TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。
用 SSL建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了。与 SSL组合使用的 HTTP 被称为HTTPS(HTTP Secure,超文本传输安全协议)或 HTTP over SSL。
-
内容加密
为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。主要应用在 Web 服务中。有一点必须 引起注意,由于该方式不同于 SSL或 TLS 将整个通信线路加密 处理,所以内容仍有被篡改的风险。
验证通信方身份
证书认证:证书由值得信任的第三方机构颁发,用以证明服务器和客户端是 实际存在的。另外,伪造证书从技术角度来说是异常困难的一件 事。所以只要能够确认通信方(服务器或客户端)持有的证书, 即可判断通信方的真实意图。
防止接受到的内容被篡改
HTTP本身有保证报文完整性的方案,使用MD5、SHA1生成签名的方法。
提供文件下载服务的 Web 网站也会提供相应的以 PGP(Pretty Good Privacy,完美隐私)创建的数字签名及 MD5 算法生成的散列值。PGP 是用来证明创建文件的数字签名,MD5 是由单向函数生成的散列值。
不论使用哪一种方法,都需要操纵客户端的用 户本人亲自检查验证下载的文件是否就是原来服务器上的文件。浏览器无法自动帮用户检查。可惜的是,用这些方法也依然无法百分百保证确认结果正确。
因为 PGP 和 MD5 本身被改写的话,用户是没有办法意识到的。
使用SSL后可以保证通信内容的完整性。
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。
通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通 信,再由 SSL和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披SSL协议这层外壳的 HTTP。
加密机制
近代的加密方法中加密算法是公开的,而密钥却是保密的。通过这种方式得以保持加密方法的安全性。加密和解密都会用到密钥。
没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。如果密钥被攻击者获得,那加密也就失去了意义。
-
共享秘钥加密
-
公开秘钥加密
公开密钥加密方式很好地解决了共享密钥加密的困难。
HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。
若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。 所以应充分利用两者各自的优势,将多种方法组合起来用于通信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
遗憾的是,公开密钥加密方式还是存在一些问题的。那就是无法证明公开密钥本身就是货真价实的公开密钥。为了解决上述问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。
通信机制
步骤 1: 客户端通过发送 Client Hello 报文开始 SSL通信。报文中包含客户端支持的 SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
步骤 2: 服务器可进行 SSL通信时,会以 Server Hello 报文作为应 154答。和客户端一样,在报文中包含 SSL版本以及加密组件。服务器的 加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤 3: 之后服务器发送 Certificate 报文。报文中包含公开密钥证书。
步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL握手协商部分结束。
步骤 5: SSL第一次握手结束之后,客户端以 Client Key Exchange 报 文作为回应。报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。
步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
步骤 7: 客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
步骤 8: 服务器同样发送 Change Cipher Spec 报文。
步骤 9: 服务器同样发送 Finished 报文。
步骤 10: 服务器和客户端的 Finished 报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到 SSL的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求。
步骤 11: 应用层协议通信,即发送 HTTP 响应。
步骤 12: 最后由客户端断开连接。断开连接时,发送 close_notify 报文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP的通信。
HTTPS慢
HTTPS 比 HTTP 要慢 2 到 100 倍 。通信慢、解密慢。
Web攻击
-
DoS攻击:Denial of Service,同时间大量请求
-
XSS攻击:表单提交js脚本代码
-
SQL注入攻击:利用注释更改查询条件:select * from book where author = ‘aa’ --’ and flag =1;这样–后面的内容被注释掉,少一个查询条件,私密内容可能也被查询出来。
-
OS命令注入攻击:
-
等等