一、简介
HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP是面向事务的应用层协议,他是万维网上能够可靠的交换文件的重要基础。请注意,HTTP不仅能够传送超文本跳转所必须的信息,而且也传送任何可从互联网上得到的信息,如文本、超文本、声音、图像等。
HTTP的特点如下:
- 面向事务
- 协议是无状态的,也就是说同一个客户第二次在向同一个服务器请求的时候,服务器的响应与第一次请求时候相同。
二、要点
1.用户浏览页面的方式
1)在浏览器的地址栏输入访问地址;
2)在页面中点击一个超链接,进行页面跳转
2.一次HTTP请求所需的时间
时间有两个RTT,1)TCP链接 2)用于请求和接收万维网文档(当客户端回发确认消息,会带上请求数据,就是说,确认消息和请求数据会同时发送)
3.HTTP版本
http/2.0的主要特点:
- 速度上与http/1.1相比有很大的提升,https://http2.akamai.com/demo,这个网站是测试http/1.1和http/2在请求379张图片的时候耗时对比
- 多路复用:多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。,在http/1.1时进行请求的时候,针对同一域名下的请求有一定的数量限制。
- 二进制分帧:应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层,HTTP/2将所有传输的消息分割为更小的分帧,并对它们采用二进制的编码,并提交到传输层进行传输。
- 在1.1版本下,性能上面最大的瓶颈在于没有充分利用tcp连接带宽,tcp在刚刚开始建立间连接的时后,由于拥塞控制的影响,在数据传输刚开始的时候,拥塞窗口较小,数据传输少,而http又是每个资源建立一个连接,这样tcp带宽不能充分利用,就像一个跑车,人家还没跑就停了,显示不出他的性能。
- 首部压缩:HTTP/2使用了专门的首部压缩算法HPACK算法
- 服务端推送:是在客户端没有请求之前服务端向客户端发送数据,HTTP/2.0中服务端可以对客户端的一个请求发送多个响应,这样为客户端的缓存的实现提供的可能
单链接多资源请求的方式,减小了服务端的压力,增大了吞吐量,充分利用了tcp的带宽
4.代理服务器
小结:
- 这里的代理服务主要用于在一个局域网的总出口带宽很小而局域网内用户数量很多或者请求相同数据量巨大的时候,在局域网内部建立一个代理服务器,这样可以减少总出口带宽的占用,极大的提高了用户的体验
5.HTTP报文结构
6.session和cookie
总的来说,两者都是一种状态保持技术,具体两者的区别有以下几点:
1)session是服务器和客户端的一种会话,这个的重点在会话,Session会话对象存储特定用户会话所需的属性和配置,在用户跳转界面的时候,用户访问的配置和属性不丢失,当用户端关闭会话或session到期时,会话结束;cookie是服务器端向用户端发送并保存在用户端的一个数据块,它会在用户向同一个服务器发送请求的时候携带一起发送到服务端,通常用于告知服务端两个请求是否来自一个浏览器。
作用范围不同:cookie保存在用户端,session保存在服务端
有效期不同:cookie可以设置为长时间保持,session一般保持的时间比较短,客户端关闭或者session超时都会失效。
存取方式不同:cookie只能存储ASCII,session可以存储任意信息
存储容量不同:单个cookie存储的数据量不能超过4K,session的存储数据量远大于cookie
安全程度不同:cookie存储在用户端,比较容易遭到窃取,session存储在服务端,相对cookie安全一些
这里我们需要注意一点:在使用session的时候我们在客户端也是需要存储一个值的(一般我们叫做sessionid),这个值主要用于在向服务端发送请求的时候,便于服务端识别这个请求时哪个session的,这个sessionid的存储位置一般存储在cookie中,但是有的客户端已经禁用了cookie我们怎么办?
下面我们讨论一下,在客户端禁用cookie的时候,我们常见的处理方式是怎么样的。
我们解决cookie禁用的时候主要有两种方案:
第一种就是在每次请求的时候默认带上sessionid参数,在使用get的时候和post的时候都可以使用
第二种使用的就是token,关于token大家可以看一下这篇博客https://blog.csdn.net/xubenxismile/article/details/92838749
2)分布式session的解决方案:
- Nginx ip_hash 策略,这个策略可以保证在同一个ip访问服务的时候,连接被分配到同一个服务器
- session复制:在服务端,将所有服务器节点的session进行复制
- 共享session:使用缓存中间件统一管理session
感兴趣的朋友可以关注下面的公众号,每天分享一点知识,成长看得见,感谢支持!!
参考资料:
- 《计算机网络》第七版