作者回复: 我的理解是REST是一种架构风格:将网络上的信息实体看作是资源,可以是图片、文件、一个服务...资源用URI统一标识,URI中没有动词哦,这是因为它是资源的标识,那怎么操作这些资源呢,于是定义一些动作:GET、POST、PUT和DELETE。通过URI+动作来操作一个资源。所谓的无状态说的是,为了完成一个操作,请求里包含了所有信息,你可以理解为服务端不需要保存请求的状态,也就是不需要保存session,没有session的好处是带来了服务端良好的可伸缩性,方便failover,请求被LB转到不同的server实例上没有差别。从这个角度看,正是有了REST架构风格的指导,才有了HTTP的无状态特性,顺便提一下,REST和HTTP1.1出自同一人之手。但是理想是丰满的,现实是骨感的,为了方便开发,大多数复杂的Web应用不得不在服务端保存Session。为了尽量减少Session带来的弊端,往往将Session集中存储到Redis上,而不是直接存储在server实例上..
作者回复: 说的很清楚 👍
作者回复: 优秀👍
作者回复: 谢谢指出~
作者回复: 说的很好很详细👍
作者回复: 👍Tomcat和Jetty都支持HTTP2.0了
作者回复: 用Web容器的Session方案需要侵入特定的Web容器,用Spring Session可能比较简单,不需要跟特定的Servlet容器打交道。
这正是Spring喜欢做的事情,它使得程序员甚至感觉不到Servlet容器的存在,可以专心开发Web应用。但是Spring到底做了什么,Spring Session是如何实现的,我们还是有必要了解了解~
其实它是通过Servlet规范中的Filter机制拦截了所有Servlet请求,偷梁换柱,将标准的Servlet请求对象包装了一下,换成它自己的Request包装类对象,这样当程序员通过包装后的Request对象的getSession方法拿Session时,是通过Spring拿Session,没Web容器什么事了。
作者回复: cookie有两个重要属性:
domain字段 :表示浏览器访问这个域名时才带上这个cookie
path字段:表示访问的URL是这个path或者子路径时才带上这个cookie
跨域说的是,我们访问两个不同的域名或路径时,希望带上同一个cookie,跨域的具体实现方式有很多..
作者回复: 服务端会设置连接超时时间,如果TCP连接上超过一段时间没有请求数据,服务端会关闭这个连接。
在HTTP1.1中,请求是按顺序排队处理的,前面的HTTP请求处理会阻塞后面的HTTP请求,虽然HTTP pipelining对连接请求做了改善,但是复杂度太大,并没有普及,这个问题在HTTP2.0中得到了解决。
作者回复: 是的,虽然敏感的用户信息没有在网络上传输了,但是攻击者拿到sessionid也可以冒充受害者发送请求,这就是为什么我们需要https,加密后攻击者就拿不到sessionid了,另外CSRF也是一种防止session劫持的方式。
作者回复: 1. 会不会产生session取决于Web应用如何实现,如果在用户没有登录的情况下调用Request.getSession(true),会产生Session,也就有你说的那个问题。
2.对的
作者回复: 多个请求之间共用一个TCP连接,是不是会让人觉得它们有关系呢。
作者回复: token比如jwt token本质是个加密的cookie
作者回复: Joker你好,把TCP连接当做送信员的比喻很形象也很贴切!无状态表示每次寄信都是新的信封,这也是对的,我再多说几句,在服务端看来这些信没有关系的,并且服务端通过阅读这封信就得到了它要的全部信息,不需要从其他地方(比如Session里)来获取这封信的更多上下文信息,服务端就知道怎么处理和回信。