栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > web前端

如何在Keep Alive情况下做到防止非法HTTP数据以及及时处理正确HTTP数据?

web前端 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Keep Alive情况下做到防止非法HTTP数据以及及时处理正确HTTP数据?

第二个针对性问题,很明显考的是对传输层TCP协议的理解程度。如何做呢?可能是对自己的计网知识过于自信了,当时想都没想就说res.end(),紧接着发现自己脑残了,如果能end掉底层socket的话,"Connection: keep-alive" 还起个毛作用啊?不对。明知道不对,可是我仍然朝错误的方向去考虑了问题:我在想如何在server的"request"事件回调里处理这个逻辑,并给出了好几种方案,然而这绝壁是做无用功啊。。,面试官都笑了。

为啥?现在就来谈谈因简单而常被忽视的HTTP。

可能Web开发做久了的工程师都会产生这样一种错觉:把无连接的HTTP当成一种连接。毕竟Web接触的大都是应用层协议并且主要为HTTP协议,其他少的可怜。但是现在头脑冷静一下,HTTP怎么会和connection establish联系在一起?不是,当然不是,别忘了HTTP是一种无连接无状态协议,它只负责HTTP报文,真正维护那个连接的是传输层的TCP协议啊。

“request”事件对应的是HTTP的request,而“connect/connection”事件才对应着TCP connection。这些概念本应该是了然于胸的,可能是所学知识碎片化导致的后果吧。

下面写了一个例子,和我一样健忘的同学打开浏览器,注意控制台。加深一下印象吧~

{createServer} = require 'http'createServer (req, res) ->  res.end ''  # req.socket.end()  console.log "new HTTP Request".on "connection", () ->  console.log "new TCP connection established".listen 80

HTTP 1.1是默认设置keep-alive的,所以控制台会得到一个”new TCP connection established”和一堆”new HTTP Request”。这说明keep-alive确实是几个对同一主机的HTTP请求共享一个TCP socket。

那么仍是最初的问题,如何做到第七层防止非法数据以及及时处理正确数据?或许这么问有一种误导作用,让你偏偏往在应用层如何做这条路想。其实这是一个很简单的问题,发现有问题当然是end掉,不过要做到胸有成竹的回答,前提是必须了解TCP的特点,特别是可靠传输,TCP提供了一种保证传输数据可靠性的机制,也就是说,就算浏览器的几个页面同时对同一个Socket写入,到另一端的这些HTTP报文也不会出现差错的。所以end掉当前HTTP Request不会影响其他请求的正确性。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号