简略的看了一下《 HTTP 权威指南》好像在这里面根本就没有总结出这样的说法。
如果有的话请帮忙指明一下章节
1
bearice 2016-06-16 15:26:50 +08:00
"It (HTTP) is a generic, *stateless*, protocol which can be used for many tasks beyond its use for hypertext"
-- RFC2616, Page 0, Abstract |
2
xcc7624 OP @bearice https://tools.ietf.org/html/rfc6265
HTTP State Management Mechanism 并且《 HTTP 权威指南》中文版第 11 章第 1 节开头就说 HTTP 协议最初是被设计为一种无状态的协议,但是现在被扩展了,还算不算是一种无状态的协议? |
4
clino 2016-06-16 15:52:20 +08:00
"无状态"是对的,但是"无连接"是谁说的?
|
5
bearice 2016-06-16 15:59:20 +08:00
@xcc7624 HTTP 协议本身是无状态的,主要意思是指后一个报文(请求)和前一个报文没有必然的联系,但是在无状态的协议上模拟状态是上层应用的事儿,比如 IP 协议就是无状态的, TCP 是有状态的一样。
至于『无连接』 这个是哪里说得? |
7
ss098 2016-06-16 16:13:27 +08:00
> 无状态服务器是指一种把每个请求作为与之前任何请求都无关的独立的事务的服务器。
摘自 https://zh.wikipedia.org/wiki/%E6%97%A0%E7%8A%B6%E6%80%81%E5%8D%8F%E8%AE%AE > 并且《 HTTP 权威指南》中文版第 11 章第 1 节开头就说 HTTP 协议最初是被设计为一种无状态的协议,但是现在被扩展了,还算不算是一种无状态的协议? 我认为:即使现在的应用使用 Session 等方法来辨别用户,这个也不是在 HTTP 协议层面来实现的,而是由后端服务器来实现的,所以现在依然是无状态协议。 拿 Google 搜了一下关键字“ http 无连接”,搜出来这个: http://blog.csdn.net/tennysonsky/article/details/44562435 但是没有其他相关的资料,我认为“无连接”这个概念是错的。 |
8
shyling 2016-06-16 16:22:56 +08:00 via Android
无状态就是不像 ssh,ftp 之类的先登录然后.....
|
9
xcc7624 OP |
10
mornlight 2016-06-16 16:39:57 +08:00
@xcc7624 session 是上层抽象出的概念, HTTP 协议里本身没有所谓的 session ,只有 Cookie
具体的讨论你搜一下本站的帖子 |
12
xcc7624 OP |
13
clino 2016-06-16 16:56:32 +08:00
想起 uliweb 文档里对 session 有简单的介绍: http://limodou.github.io/uliweb-doc/zh_CN/session.html#title_1-2
|
14
xcc7624 OP @clino 我说一下我对这介绍的理解看对不, session 在这个 web 框架里是作为一个组件实现,实现了这个 RFC 的部分功能 https://tools.ietf.org/html/rfc6265 ,识别 HTTP 请求头里的 cookie 带的 session_id 的 HTTP 请求是否已经在有效时间访问过了。
一句话总结就是” session"就是 RFCC6265 HTTP State Management Mechanism 的服务器端实现? |
15
clino 2016-06-16 17:50:56 +08:00
@xcc7624 我觉得这样不准确, rfc6265 是 "defines the HTTP Cookie and Set-Cookie header fields." ,而 Set-Cookie 的主要实现是在客户端如浏览器上做的
session 在 web 里会利用这个机制来实现用户会话, rfc6265 没细看,但应该没有写服务端如何利用 Set-Cookie 来达到实现用户会话的功能,这部分在服务端除了要按照 rfc 在 http header 里加上相关的字段以外,其实应该是比较自由的 |
16
xcc7624 OP |
17
clino 2016-06-16 19:58:43 +08:00
@xcc7624 我不知道哪里有,因为比较自由所以估计都是自己实现的,但大体上差不多,就是存一个 session id,从 session id 能查到会话相关的信息,最常见的就是用户的 id
"在 HTTP 请求间共享数据"可以有这个作用,但是你要弄清楚一般是怎么达到这个目的的 |
18
SoloCompany 2016-06-16 23:23:08 +08:00
无状态基本上就等价于无连接
有连接就代表需要建立握手之后才能传输 payload ,可以理解为相当于 tcp 无连接就是随时都可以传输 payload 不需要握手,相当于 udp TCP 是有连接有状态的 这不影响建立在 TCP 之上的 HTTP 无连接无状态 因为同一个 TCP 连接上所传输的每个 HTTP 请求都是完全独立无关的 HTTP 的无连接无状态也不影响其衍生出来的 websocket 协议是有状态有连接的 |