新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 站长技术 > 服务器

web容器是如何解析http报文的

时间:2019-11-27 16:54:30  来源:  作者:

来源于公众号方丈的寺院 ,

作者cnstonefang

摘要

作为服务端,web容器是如何解析http报文的呢?本文以jetty和undertow容器为例,来解析web容器是如何处理http报文的。

http报文其实就是一定规则的字符串,那么解析它们,就是解析字符串,看看是否满足http协议约定的规则。

start-line: 起始行,描述请求或响应的基本信息
*( header-field CRLF ): 头
CRLF
[message-body]: 消息body,实际传输的数据

jetty

以下代码都是jetty9.4.12版本

如何解析这么长的字符串呢,jetty是通过状态机来实现的。具体可以看下 org.eclipse.jetty.http.HttpParse类

web容器是如何解析http报文的

 

总共分成了21种状态,然后进行状态间的流转。在 parseNext方法中分别对起始行 -> header -> body content分别解析

web容器是如何解析http报文的

 


web容器是如何解析http报文的

 

整体流程

整体有三条路径

  1. 开始 -> start-line -> header -> 结束
  2. 开始 -> start-line -> header -> content -> 结束
  3. 开始 -> start-line -> header -> chunk-content -> 结束

起始行

start-line = request-line(请求起始行)/(响应起始行)status-line

web容器是如何解析http报文的

 


  1. 请求报文解析状态迁移 请求行:START -> METHOD -> SPACE1 -> URI -> SPACE2 -> REQUEST_VERSION

  2. 响应报文解析状态迁移 响应行:START -> RESPONSE_VERSION -> SPACE1 -> STATUS -> SPACE2 -> REASON

header 头

HEADER 的状态只有一种了,在jetty的老版本中还区分了 HEADER_IN_NAM, HEADER_VALUE, HEADER_IN_VALUE等,9.4中都去除了。为了提高匹配效率,jetty使用了Trie树快速匹配header头。

web容器是如何解析http报文的

 

content

请求体:

  1. CONTENT -> END,这种是普通的带Content-Length头的报文,HttpParser一直运行CONTENT状态,直到最后ContentLength达到了指定的数量,则进入END状态
  2. chunked分块传输的数据 CHUNKEDCONTENT -> CHUNKSIZE -> CHUNK -> CHUNK_END -> END

undertow

undertow是另一种web容器,它的处理方式与jetty有什么不同呢 状态机种类不一样了, io.undertow.util.HttpString.ParseState

web容器是如何解析http报文的

 

具体处理流程在 HttpRequestParser抽象类中

web容器是如何解析http报文的

 


web容器是如何解析http报文的

 

与jetty不同的是对content的处理,在header处理完以后,将数据放到 io.undertow.server.HttpServerExchange,然后根据类型,有不同的content读取方式,比如处理固定长度的, FixedLengthStreamSourceConduit。

web容器是如何解析http报文的

 



Tags:http   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
tomcat中的证书配置参数如下:<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true" scheme="https" secure="t...【详细内容】
2020-03-17   http  点击:(6)  评论:(0)  加入收藏
HTTP (Hypertext transfer protocol) 翻译成中文是超文本传输协议,是互联网上重要的一个协议,由欧洲核子研究委员会CERN的英国工程师 Tim Berners-Lee v发明的,同时,他也是WWW的...【详细内容】
2020-03-16   http  点击:(6)  评论:(0)  加入收藏
今天来给大家谈谈HTTPS 的 7 次握手以及 9 倍时延。HTTP 协议(Hypertext Transfer Protocol)已经成为互联网上最常用的应用层协议,然而其本身只是用于传输超文本的网络协议,不会...【详细内容】
2020-03-15   http  点击:(10)  评论:(0)  加入收藏
TCP协议 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成...【详细内容】
2020-03-11   http  点击:(3)  评论:(0)  加入收藏
前言:从本篇开始,正式介绍HTTP的协议,力图简洁和有效罗列出HTTP协议的核心知识点。1. HTTP协议概念2. HTTP通过请求URI来定位资源3. 告知服务器意图的HTTP方法4. HTTP通过持久...【详细内容】
2020-03-08   http  点击:(11)  评论:(0)  加入收藏
HTTP是一个简单的请求-响应协议,它通常运行在TCP之上,指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。HTTP协议是前端人员学习的入门级知识点,同时它也在不...【详细内容】
2020-03-07   http  点击:(6)  评论:(0)  加入收藏
1、不带参数的POST请求public static string Post(string url){string result = ;HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);req.Method = POST;HttpWe...【详细内容】
2020-03-07   http  点击:(10)  评论:(0)  加入收藏
一、什么是HTTP协议http协议是Hyper Text Transfer Protocol(超文本传输协议),是用于万维网服务器传输超文本到本地浏览器的传输协议,http协议是基于TCP/IP通信协议来传送数据。...【详细内容】
2020-03-07   http  点击:(7)  评论:(0)  加入收藏
项目背景某股份制银行,部分省份的用户报告无法访问该行手机银行和主页,排查发现通过DNS解析手机银行和微信银行等域名得到错误结果。某企业用户,内部用户反馈部分域名无法解析,...【详细内容】
2020-03-05   http  点击:(21)  评论:(0)  加入收藏
随着 HTTPS 建站的成本下降,现在大部分的网站都已经开始用上 HTTPS 协议。大家都知道 HTTPS 比 HTTP 安全,也听说过与 HTTPS 协议相关的概念有 SSL 、非对称加密、 CA 证书等...【详细内容】
2020-03-04   http  点击:(6)  评论:(0)  加入收藏
购买SSL证书要想使用https访问你的网址,首先得拥有颁发的SSL证书。我使用的是免费版,有效期为一年,过期后再重新申请。 申请SSL证书购买后,可在搜索框输入证书关键字进入到控...【详细内容】
2020-02-24   http  点击:(8)  评论:(0)  加入收藏
Http存在的问题上过网的朋友都知道,网络是非常不安全的。尤其是公共场所很多免费的wifi,或许只是攻击者的一个诱饵。还有大家平时喜欢用的万能钥匙,等等。那我们平时上网可能...【详细内容】
2020-02-23   http  点击:(12)  评论:(0)  加入收藏
一、总结:两次交互过程,三个秘钥。第一次交互:用非对称加密的公钥和私钥商量下通信使用的真实秘钥第二次交互:用真实秘钥进行加密通信详情如下:HTTPS在传输的过程中会涉及到三个...【详细内容】
2020-02-23   http  点击:(11)  评论:(0)  加入收藏
当你在浏览器的地址栏上输入https开头的网址后,浏览器和服务器之间会在接下来的几百毫秒内进行大量的通信。InfoQ的这篇文章对此有非常详细的描述。这些复杂的步骤的第一步,就...【详细内容】
2020-02-23   http  点击:(17)  评论:(0)  加入收藏
超文本传输协议(HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。自1990年代初以来,HTTP协议是整个Internet进行数据通信的基础。...【详细内容】
2020-02-21   http  点击:(2)  评论:(0)  加入收藏
作者 | 阿文责编 | 郭芮超文本传输协议(HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。自1990年代初以来,HTTP协议是整个Internet进行...【详细内容】
2020-02-21   http  点击:(2)  评论:(0)  加入收藏
一、HTTP存在的问题1.1 可能被窃听 HTTP 本身不具备加密的功能,HTTP 报文使用明文方式发送 由于互联网是由联通世界各个地方的网络设施组成,所有发送和接收经过某些设备的数...【详细内容】
2020-02-17   http  点击:(12)  评论:(0)  加入收藏
了解 Web 及网络基础 对端传输发送端在层与层间传输数据时,没经过一层都会被加上首部信息,接收端每经过一层都会删除一条首部 多种协议作用IP 协议,TCP 协议和 DNS 服务在使...【详细内容】
2020-02-16   http  点击:(12)  评论:(0)  加入收藏
一道经典的面试题是从 URL 在浏览器被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。 图片来自 Pexels 但是你有没有想过,收到...【详细内容】
2020-02-16   http  点击:(12)  评论:(0)  加入收藏
最近对自己的博客网站进行HTTPS化,打造一个安全的博客,博客地址:https://www.toptech.top/,,下面是具体步骤:1、下载nginx安装包wget -i -c http://nginx.org/download/nginx-1.17...【详细内容】
2020-02-13   http  点击:(2)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条