新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  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   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
作为服务端,web容器是如何解析http报文的呢?本文以jetty和undertow容器为例,来解析web容器是如何处理http报文的。...【详细内容】
2019-11-27   http  点击:(0)  评论:(0)  加入收藏
百度百科OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO组织在1985年研究的网络互联模型。该体系结构标准定义了网络互联的七层框架(物理层、数...【详细内容】
2019-11-27   http  点击:(0)  评论:(0)  加入收藏
相关链接:Apache+WordPress部署SSL加密服务,全站开启https访问第一步、部署SSL加密服务准备工作1.在VPS已部署好LNMP一键安装包;2.申请SSL证书(百度免费SSL证书),我以阿里云提过...【详细内容】
2019-11-27   http  点击:(0)  评论:(0)  加入收藏
在TCP/IP的模型图中,读者可以看到,HTTP协议位于最上层的应用层,它是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个协议。HTTP是一个由请求和响应组成的、标...【详细内容】
2019-11-26   http  点击:(2)  评论:(0)  加入收藏
很多时候我们都要看我们使用的软件发送的什么包,或者我们使用的网站发送的数据包是什么,甚至我们还想修改一下里面的数据来看看。再这里给大家来介绍一下我们入了利用Proxifie...【详细内容】
2019-11-25   http  点击:(18)  评论:(0)  加入收藏
subversion可以结合apache httpd提供服务,这样子就可以通过http提供服务。 安装yum -y install subversion httpd mod_dav_svn 配置文件安装完以后,可以在/etc/httpd/conf.mod...【详细内容】
2019-11-22   http  点击:(7)  评论:(0)  加入收藏
前言页面的重定向想必大家都知道,如果你是用过 koa ,那么通过如下代码,就能让网页跳转至指定页面: 或者你用过 java 的重定向: 那么框架内部到底是怎么实现页面重定向的呢?这篇小...【详细内容】
2019-11-19   http  点击:(5)  评论:(0)  加入收藏
本文介绍使用ezhttp一键安装配置lnmp lamp lnamp(apache nginx php mysql)环境,在开始之前,请先查看ezhttp介绍。这里以安装lnmp为例,其它的安装类似。交互安装:1.选择安装lnmp1...【详细内容】
2019-11-19   http  点击:(3)  评论:(0)  加入收藏
简介:ezhttp是一个Linux一键配置工具,采用bash脚本语言编写。支持自动配置LAMP,LNMP,LNAMP环境,以前提供各种其它的配置工具,如自动配置swap,配置iptables等。项目托管在github,...【详细内容】
2019-11-18   http  点击:(4)  评论:(0)  加入收藏
如今,https协议正在被广泛重视和使用。随着今年2月初,谷歌旗下Chrome浏览器宣布将所有http标示为不安全网站,许多网站都争相从http升级到了https。当你打开很多网站时,会发现浏...【详细内容】
2019-11-15   http  点击:(13)  评论:(0)  加入收藏
web服务在写前端页面时,经常会在浏览器运行html页面,此工具可以快速在本地启动一个http服务器http-server可以用来干啥? 做模拟数据 做静态资源服务器 做调试、测试的前端服...【详细内容】
2019-11-11   http  点击:(38)  评论:(0)  加入收藏
1、HTTP 是如何使用 TCP 连接的;世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,TCP/IP 是全球计算机及网络设备都 在使用的一种常用的分组交换网络分层协议集。客户端应用...【详细内容】
2019-11-11   http  点击:(12)  评论:(0)  加入收藏
本篇将讨论 HTTPS 的加解密原理,很多人都知道 RSA,以为 HTTPS=RSA,使用 RSA 加解密数据,实际上这是不对的。HTTPS 是使用 RSA 进行身份验证和交换密钥,然后再使用交换的密钥进行...【详细内容】
2019-11-07   http  点击:(7)  评论:(0)  加入收藏
本篇写的是HTTPS在Tomcat中的配置方法;至于HTTPS安全认证的原理,大家可以上网查看去理解;学习建议:大家可以使用面向对象的方式去理解握手协议,单向认证与双向认证的原理。(这篇本...【详细内容】
2019-11-04   http  点击:(8)  评论:(0)  加入收藏
0X01 HTTPHTTP是一个应用层的面向对象的协议。0X02 抓包工具Wireshark、burpsuite、Fiddler0X03 POST请求 POST /user/avatar/srote HTTP/1.1 第一部分(请求行)Host: www.moz...【详细内容】
2019-11-04   http  点击:(27)  评论:(0)  加入收藏
基本概念HTTP:超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,因此,HTTP协议不适合传输一些敏感信...【详细内容】
2019-11-04   http  点击:(6)  评论:(0)  加入收藏
一、前言1.1 正向代理功能比较简单,但是原生nginx不支持https代理,如果访问https网站,会报错。# nginx代理不支持http CONNECT方法:curl: (56) Received HTTP code 400 from pro...【详细内容】
2019-10-30   http  点击:(68)  评论:(0)  加入收藏
TLS传输层安全性协定 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为网际网路通信,提供安全及数据完整性保障。 如图,TLS 在...【详细内容】
2019-10-24   http  点击:(14)  评论:(0)  加入收藏
我们经常通过缓存技术来加快网站的访问速度,从而提升用户体验。HTTP协议中也规定了一些和缓存相关的Header,来允许浏览器或共享高速缓存缓存资源。这些Header包括: Last-Modif...【详细内容】
2019-10-24   http  点击:(12)  评论:(0)  加入收藏
1xx:信息100 Continue服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。101 Switching Protocols服务器转换协议:服务器将遵从客户的请...【详细内容】
2019-10-24   http  点击:(19)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条