Hyper Text Transfer Protocol(超文本传输协议)。是用于从万维网服务器(www:Wrold Wide Web)传输超文本到本地客户端的应用层传送协议。
请求报文
响应报文
常见状态码
提交数据放置位置不同:get请求是将数据拼接在url后面,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII,且只能是ASCII。
而post请求是将数据放在请求体中,数据可以是二进制流。
数据大小不同 :HTTP协议本身对传输数据大小没有限制,但浏览器和服务器以及操作系统会进行限制。
安全性:POST请求相对来说比GET请求安全些。
缓存:get请求能够被缓存,post请求不能被缓存,所以get请求相对来说较快。
行为不同:get请求是获取资源,post请求是改动服务器资源。
IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。
IP地址位于第三层(广域网),MAC地址位于第二层(局域网),局域网中唯一标志某一台设备,ARP协议就是将广域网第三层的IP地址解析成第二层的MAC地址,精准点对点将数据传输到某一台设备。
主机arp表:arp -a
路由arp表:show arp
主机路由表:
netstat -r
路由器路由表
show ip route
无论是主机还是路由器的路由表都有网络地址、下一跳等基本属性。
由此可见 ,在广域网中,数据点对点传输是靠IP地址,用路由等设备不断接力寻址,找到目标设备,进入局域网后,mac地址唯一,利用arp协议确定目标设备,实现点对点通信。
位于传输层,提供可靠字节流传输服务,为了方便传输。将大 块数据分割成以报文段(segment)为单位的数据包进行管理。而可 靠的传输服务是指,能够把数据准确可靠地传给对方。
一言以蔽之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。
除了上述三次握手,TCP 协议还有其他各种手段来保证通信的可靠性。
与纯数字IP地址相比,域名更符合人的记忆习惯,所以将域名和IP地址进行映射就依靠DNS域名解析服务。
在HTTP1.0中,每一个请求都是无状态的,下一个请求与上一个请求没有任何关联,那么登录一个网站后,每一次请求都需要重新登录来保证登录状态。所以在HTTP/1.1引入了cookie和session技术,保持会话。
cookie和session的区别
在纯文本传输中,请求一个资源就断开没什么问题,但是随着互联网发展,html页面越来越精美,其中不仅有文本还有图片资源,每请求一个资源就关闭连接,下一次请求再创建连接,很明显无法复用连接。
在http/1.1引入了长连接,实现连接复用,短时间内请求的资源都走这个连接,极大的减少了连接创建和释放的开销,只要任意一端没有明确表示释放连接,则保持TCP连接。
通信使用明文(不加密),内容可能被窃听
通过抓包软件查看 HTTP 响 应报文的全部内容等一系列的事情都可以做到。
不验证通信方的身份,因此可能遭遇伪装
无法证明报文的完整新,所以可能已遭篡改
加密可以防止请求被窃听,加密的方式有两种:通信加密和内容加密
通信加密
在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后可以保证通信内容的完整性。
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 比 HTTP 要慢 2 到 100 倍 。通信慢、解密慢。