《图解http协议》总结
文章目录
了解Web及网络基础
当你在浏览器地址栏输入URL之后,信息会被送往服务器,服务器接受请求相应给客户端浏览器上。
浏览器:“请给我 ××× 网页的数据。”
Web 服务器:“好的,这就是你要的数据。”
浏览器:“请处理这些订单数据。”
Web 服务器:“好的,订单数据已收到。”
web是建立在HTTP协议上通信的,他是一种规范,完成从客户端到服务器端等一系列操作。
tcp/ip协议
计算机与网络设备互相通信必须基于相同的方法。比如使用那种语言通信,操作系统之间的通信,如何探测到通信目标,把这种规则成为协议。
tcp/ip是互联网相关的各类协议族的总称(TPC FTP HTTP DNS UDP IP ICMP FDDI )。
TCP/IP是分层管理的,层次分别分为4层,应用层,传输层,网络层,和数据链路层。TCP/IP层次化的好处,莫个地方需要改变设计时,只需要改变那个需要变动的层,而不是整体替换掉。
-
应用层: FTP DNS HTTP都属于该层,应用层决定了向用户提供应用服务时通信的活动。 传输层:
-
传输层对上层应用层,提供两台计算机网络连接数据传输。TCP UDP 是该层的两个不同性质协议。
-
网络层:
用来处理网络上的数据包,与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。 -
链路层: 用来处理连接网络的硬件部分,网路适配器,网卡,等物理可见部分。
tcp/ip通信传输流
与HTTP关系密切的协议:IP、TCP、和DNS
-
IP协议的作用是把各种数据包传送给对方。来保证确实传送到目标,满足两个条件,IP地址和MAC地址
-
IP和IP地址不要搞混,IP实际上是一种协议名称。
-
IP地址指明了节点被分配到地址,MAC地址是指网卡所属的固定地址。
没有人能够全面掌握互联网中的传输状况
在到达目标前的中专过程中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线。这种机制被称为路由选择,有点像快递公司的送货过程。你要寄快递,只要将快递放在货物集散中心,集散中心检查快递地址,下一站XXX中转,下一站XXX中转,到目的地。无法掌握互联网中的细节。无法掌握是个什么样的具体传输路线。
为确保数据到达目标,tcp采用三次握手策略
发送端首先发送标有SYN的数据包给对方,接收端收到后,回传一个SYN/ACK的数据包。最后发送端再回传一个ACK数据包。
负责域名解析的DNS服务
位于应用层。提供域名到IP地址之间的解析服务。每个主机都有自己的ip地址,我服务器的Ip地址为39.106.21.153,域名为zlkun.cn。搜索ip地址和域名都可访问我的网站。搜索zlkun.cn这个域名,其实还是会被解析成ip地址,服务器接受的还是ip地址。域名就是单纯让人类好记,总比一串数字来的方便吧。
发送端:我想访问zlkun.cn把它ip地址给我吧
DNS: zlkun.cn的IP地址为39.106.21.153
服务器:我收到了这个ip地址
简单的HTTP协议
- http协议用于客户端和服务器端之间的通信
- 通过请求和响应的交换达成通信。
http是不保存状态的协议既无状态协议。设计简单,可快速处理大量事务。可是有个弊端,就是你上淘宝页面登录后,如果是不保存状态,你切换页面回到淘宝,还需要继续输入用户名和密码。很不方便。所以引入了cookie技术。客户端带着用户和密码请求发给服务端,服务端响应回客户端的同时带着cookie,等你切换页面后再回来,页面再次请求带着cookie到服务器端,服务器一看cookie,噢噢原来是刚才那个家伙,不用再从新输入了。直接响应,显示页面。
持久连接节省流量
http协议,可以建立tcp连接后,发送请求包含多张图片和文档。结束后断开连接(一次性发送请求资源)。之前的旧版HTTP协议,建立连接请求响应一张图片断开连接,再建立连接这样重复周而复始,会增加通信量的开销。
管线化
从前发送请求后得响应后,才能发送下一个请求。管线化技术出现后,不用等待响应结束,可直接发送下一个请求。
http报文内的Http信息
编码提升传输速率
http可以原数据传输,也可以进行编码提升速率。具体流程是。客户端吧实体压缩变小成包,再分割包,发送给了服务器,服务器解压,解码复原。服务器把响应数据压缩,分割。响应给客户端,客户端解压解码,复原数据。
常见内容编码gizp,compress,deflate。那服务器怎么知道客户端支持内容编码呢,这就是HTTP报文的作用了,http头信息里面有,传给了服务器告诉服务器我支持,gizp这个编码,请用这个机制压缩给我吧。
获取部分内容的范围请求
如果你加载图片到一半断网了,连接后无须从新加载,从一半开始加载。
内容协商返回最合适的内容
同一个web网站可能存在着多份相同内容的页面。比如英文版,中文版。当浏览器默认是中文时,访问相同的URL的web页面,则会显示对应的语言页面。这样机制成为内容协商。
返回结果的HTTP状态码
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
详情参考菜鸟程序,很详细的菜鸟驿站HTTP状态码
与HTTP协作的Web服务器
HTTP首部
很详细的http首部
确保Web安全的HTTPS
HTTP缺点
通信使用明文(不加密),内容可能会被窃听
- TCP/IP是可能被窃听的网络,按TCP/IP机制,通信内容在所以通信线路上都有可能遭到窥视。
- 通信的加密 HTTP协议中没有加密机制,但可以通过和SSL或TLS的组合使用,加密HTTP的通信内容。与SSL组合使用的HTTP被称为HTTPS
- 内容的密码 对HTTP协议传输的内容本身加密,但仍有篡改的可能
不验证通信方的身份,因此有可能遭遇伪装
- 不验证通信方的身份就可能遭遇伪装 意思就是服务器是否是发送请求中URL真正指定主机,返回的响应是否是实际提出请求的客户端。
无法证明报文的完整性,所以有可能已遭篡改 - 有可能是伪装服务器,有可能是伪装客户端,即使是无意义的请求服务器也照单全收。无法阻止海量请求下DOS攻击。
无法证明报文完整性,可能已遭篡改
接收到的内容可能有误,客户端和服务器进行通信,中间突然冒出个攻击者,可以随意篡改请求和响应,而让客户端与服务器之间的通信看上去仍旧是正常。称中间人攻击(MITM)
HTTP+加密+认证+完整性保护=HTTPS
HTTPS是身披SSL外壳的HTTP,HTTPS并不是新协议,只是HTTP通信接口部分用SSL和TLS协议代替。
通常来讲HTTP先和tcp通信,当时用SSL时,就先和SSL通信,再和tcp通信。
互相交换密钥的公开密钥加密技术
共享密钥有困境,就是如何安全把密钥发给服务器,如果密钥可以安全发送,那数据就能安全发送啊,所以有了公开密钥机制,公开密钥是使用了两把密钥,一把私人密钥,一把公开密钥,私人密钥在本地不能让任何人知道,公开密钥发送出去。收到公开密钥使用自己的私人密钥解密。
HTTPS采用混合加密机制
共享密钥和公开密钥并用的混合加密机制
公开密钥证书,
- 服务器把自己的公开密钥登录至数字证书认证机构,
- 数字证书认证机构用自己的私有密钥向服务器的公开密码部署数字签名并发公钥证书,
- 客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥,向数字证书认证机构验证签名,以确认服务器的公开密钥的真实性,
- 使用服务器的公开密钥对报文加密后发送,
- 服务器用私有密钥对报文解密。