总结一补充-关于HTTP状态等问题的探索

问题说明

在昨天的总结中,对于6月10日的Workshop进行了一定程度的归纳和总结,在后续与老师的讨论中,发现部分未接触过的内容只是理解了字面上的意思,并未进行深入的思考,先对其中部分问题的解答做记录,以备日后查阅。

一、 HTTP请求的状态问题

原文如下:

互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,
如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。
而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。
(引用自:阮一峰博客“理解restful构架”)

原文中提到,互联网通信协议HTTP协议,是一个无状态的协议,在昨天的总结中,只是对这个概念做了单纯的记忆,没有去理解何为状态。

协议的状态:

百度百科给出的解释是:

协议的状态是指下一次传输可以“记住”这次传输信息的能力.
——百度百科

  • 无状态协议:[ HTTP协议 ]:
    前文中提到了,互联网通信协议HTTP协议,是一个无状态的协议。说明了HTTP协议中,为了保证服务器的内存,HTTP不会为了下次连接而维护这次连接所传输的信息。

  • 有状态协议:[网络游戏通信协议(这里我没有查到具体使用的协议,后续了解到会补充进来)]
    众所周知,网络游戏在进行过程中,需要一次登录,登录过后服务器不会再去要求登录才能访问URI,这就说明了,在用户第一次登陆之后,用户自身的请求会携带一个“已登陆”的状态。后续用户跟服务器的交互过程中,服务器会自动识别这个“已登录”的状态,而不会再要求用户去登陆才能访问资源。

无状态协议在一些特定情况下的补充:

  • Q:已知HTTP协议是一个无状态的协议,那用户在访问类似Baidu这样的网站时,已登录的状态该如何处理?

  • A:利用cookie。
    1、当你发送第一个请求的时候,服务器会生成一个随机的字符串,然后在服务器空间内分配一段内存空间,这个内存段的索引就是这个字符串(为方便叙述,这个字符串暂定为123);
    2、“123”会随着HTTP的Response返回给浏览器,浏览器会将它存入Cookie中;
    3、此时我们输入用户名和密码,会像服务器发送登录请求,request中会包含“123”;
    4、服务器接受到请求后,验证用户名密码的正确性,验证后会根据索引“123”,找到之前分配的内存空间(session),在空间内加入“已登陆”的标志。
    5、再次之后,我们的每个请求都会带有“123”这个索引,服务器会根据这个索引找到内存段,如果有“已登陆”的标志,有则正常访问,无则跳转登陆界面。

二、RestAPI的架构问题

根据上述,我们可以获得一个信息,在所有http都会带有cookie的先决条件下,任何http请求都会由request带来状态,也就是说service理论是能够知道请求的状态的。
但根据前文讲述,服务器不应该知道请求的状态,否则会造成过度的负载,有悖于我们之前讲述的RestAPI的架构。所以在可用性上,RestAPI的架构风格做了两个方面的约束:

  • 状态由客户端提供;
  • Service不保存状态。
    在这两个方面的约束下,我们可以得知,状态需要一个空间来存放,那么这时候有两种选择:
    1、 存放在数据库中
    这种方法简明有效,但同时也面临一定的风险,数据库本身的存储就具有一定的风险,所以这里我们不提倡
    2、存放在类似redis集群式的内存存储里
    这种方法具有速度快、多个备份节点等优点

综上,现在的RestAPI构架所提倡的组合:

客户端——Service——State Storage ——数据库。

ps:新名词解释:redis:

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
——来自百度百科

(于6月25日补充,未完待续)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,218评论 11 349
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,858评论 25 707
  • 文/粥小唯 一则53岁阿姨考上研究生的腾讯新闻炸瞎了我的眼。心里五味杂陈,个中滋味无法言语。 《一》 早年,因为家...
    妖精的小尾巴阅读 372评论 8 5
  • 今天上午先生说再休息一上午,我们一家四囗去看冰雕展,排队时我怕没有棉衣着急给工作人员去要,她依然很好的为我服务,给...
    王玉文ts阅读 114评论 0 0