什么是http协议?
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。它是一种无状态的,无连接的协议。
什么是无状态的协议
无状态的协议指的是每次的请求都是独立的,与和是无直接关系的。
(所以,TCP是一种有状态,有连接的协议 ,因为他需要对方应答,需要之前的状态。)
Schema: http
host: www.mywebsite.com
path: /sj/test/test.aspx
Query String: name=sviergn&x=true
Anchor: stuff
HTTP请求报文
请求报文格式
一次完整的url请求过程
1、DNS解析
浏览器缓存-->操作系统缓存-->路由器缓存-->IPS服务器缓存-->根域名服务器缓存-->递归查询。
2、建立TCP连接(三次握手)
3、浏览器发起HTTP请求
4、服务器响应HTTP请求
5、浏览器渲染收到的信息
6、释放连接(四次挥手)
HTTP状态码
GET和POST的区别
1、报文:
get的参数拼接直接放在url中,但是url是有长度的,如果参数太长了就很无力,
post的参数没有限制,会在报文体中;
2、数据库:
get符合幂等性和安全性(因为它是单纯的查询操作),
post不符合;
3、其他:
get请求可以被缓存,
post不能,必须交给服务器处理;
cookie与session的区别
目的:让http具备状态
cookie是客户端的解决方案,cookie分为两种:
1,以文件方式(以域名为文件名)存在硬盘空间上的长期性的cookie
2,停留在浏览器所占内存中的临时性的cookie
浏览网站时,你会经常发现网站登录的地方,会有提示,问你是不是要记住自己的登录状态,像这种情况,登录时填写的一些信息会被以文件的方式存放在客户端的硬盘上。
当用户登录后,session会在cookie端产生一个session_id,这个session_id是存于浏览器所占用的内存当中。当你关闭浏览器后,session_id也要消失了。可以借助于cookie机制来保存session_id,这样就可以解决HTTP协议无状态的缺陷。
session缓存在内存中,如果服务器重启会失效。
当在负载均衡情况下,
因为session是服务器生成的。
所以访问服务器1的时候拿到的sessionid1存在了cookie中,
第二次访问,因为负载均衡,轮询到了服务器2,服务器2没有之前用户的登录信息的session,所以要求重新登陆,重新登陆之后返回了新的sessionid2,我存入了cookie中替代了之前的sessionid[因为cookie用域名命名,所以它的名字是ng暴露的端口,服务器1和服务器2都对应浏览器的同一个cookie],第三次请求,我带着新的sessionid2请求到了服务器1,然而它里面的session对应的是sessionid1,不匹配,要求重新登陆。
结果就是,你无论如何都登录不进去系统了。
解决方法:
(1)Iphash算法
(2)session复制
(3)session共享
cookie机制
session机制,借助cookie机制
负载均衡下session失效
为什么使用token
首先,cookie是浏览器机制,如果是一个应用,那么cookie就会失效了。
于是token应运而生。
token认证的方法本质上逻辑与cookie+session的方法很像。
但是它更加灵活。
首先它可以放在非cookie的位置的其他请求头上。一般放在auth中。
其次,token的生成方式很多样,可以使用jsessionId做token,可以使用jwt做token,还有各种自定义的方式,都可以。
再者,可以结合redis数据库做集群的token共享。降低服务器负载,并且可以处理负载均衡下的session失效问题。(同上(3)方法)
HTTP与HTTPS的区别
HTTPS就是安全版的HTTP
SSL采用身份验证与数据加密保障了网络通信的安全性与数据的完整性
1、HTTPS需要申请CA证书;
2、HTTPS使用密文传输;
3、HTTPS默认使用443端口;
4、(不输入前缀时,浏览器默认填充默认http,所以可能会被劫持。)
HTTP与HTTPS对比图