加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

C说话编写Http处事器中Request的理会,让一些从零开始

发布时间:2018-10-21 03:33:56 所属栏目:业界 来源:今日头条
导读:【51CTO技能沙龙】10月27日,让我们配合试探AI场景化应用实现之道 建造流程 调查收到的http数据 理会 request 的 method url version 理会 header 理会 body 调查收到的http数据 假如你能完成一个简朴的基于TCP/IP的socket server 措施,那么恭喜你,本文你
【51CTO技能沙龙】10月27日,让我们配合试探AI场景化应用实现之道

建造流程

  • 调查收到的http数据
  • 理会 request 的 method url version
  • 理会 header
  • 理会 body

调查收到的http数据

C说话编写Http处事器中Request的理会,让一些从零开始

假如你能完成一个简朴的基于TCP/IP的socket server 措施,那么恭喜你,本文你可以好好读一读。HTTP正式基于TCP/IP的应用层协议,以是只要我们的措施能读懂HTTP数据,并做出切合HTTP协议的相应,那么就能完成HTTP的通讯。

假如你有机遇,可以知识行使telnet毗连我们的处事器,你将的获得得是一些没故意义的字符。假如是赏识器,会传送什么呢?我们试着在赏识器地点栏输入我们的处事器地点: 127.0.0.1:9734 后会见,发明赏识器说“127.0.0.1 发送的相应无效。”, 那是说我们返回给赏识器的数据赏识器读不懂,由于当代的赏识器默认用http协议哀求会见我们的处事器,而我们的返回的数据只是"helloworld"字符串,并不切合http协议的返回名目。固然云云,但赏识器却是很有诚意的给我们的处事器发尺度的http哀求,不信我们看下我们的处事器收到的信息:

C说话编写Http处事器中Request的理会,让一些从零开始

先调查一会儿,看起来第一行是http哀求的范例,第二行开始是一些":"号支解的键值对。简直云云,第一行汇报我们是用的GET哀求,哀求的url是"/",用的是1.1的HTTP版本。第二行开始是HTTP的哀求头部。除了GET哀求外,另一种常用的哀求是POST。用赏识器发POST哀求稍贫困,我们就借用curl器材来发送个HTTP POST哀求给处事器看下数据又会是怎们样的:curl -d "message=nice to meet you" 127.0.0.1:9734/hello

处事器收到的信息:

C说话编写Http处事器中Request的理会,让一些从零开始

可以看到头部信息之后多了一空行和之后的POST的body数据信息。还要留意的是Content-Length头,代表POST的body数据的巨细。

理会 request 的 method url version

先来理会最简朴的第一行: "POST /hell HTTP/1.1", 只必要用空格split出三个字符串就好了。

1.request.h

C说话编写Http处事器中Request的理会,让一些从零开始

2.request.c

C说话编写Http处事器中Request的理会,让一些从零开始

3.编写测试用例

C说话编写Http处事器中Request的理会,让一些从零开始

在test目次下执行:` gcc ../request.h ../request.c requestTest.c && ./a.out`,可以看到我们理会的要领正确。

理会 header

header的理会看起来较量伟大,每一行很轻易看出是用":"支解的key-value对,以是我们可以用HashMap来表达。怎样判定header数据的竣事呢,通过前面的调查,可以发明假如是POST会有一个空行和body离隔,是GET的话只能搜查客户端的数据是否发完,发完就代表header也末了了。在正式理会header之前,我们先结构根基数据的数据布局,以利便往后行使。

  • 1. 建设链表布局体
  • 2. 建设哈希表布局体
  • 3. 按行理会header,碰着空行或字符串末了遏制

由于代码较量多,这里不久不把两种布局体得实当代码贴出来,假如足下必要可以私信我"代码"获取。

理会header代码,有了哈希布局体后,理会header就利便多了,只要按行按照":" 拆分成 key和value就行了

要害代码:

C说话编写http处事器中request的理会,让一些从零开始

理会body

理会body很简朴,假如最后一行不是空格不是空行,声名是有body数据的,空行后头的就是body数据了.

header内里有个要害的key, ‘Content-Length’ 代表了body有多长,我们可以操作这个字段来判定body的末了。

C说话编写http处事器中request的理会,让一些从零开始

大功告成 最后打印我们的成就

打印理会内容

C说话编写http处事器中request的理会,让一些从零开始

执行 gcc request.h request.c main.c tools/utils.c tools/utils.h && ./a.out

然后新开一个终端执行 curl -d "message=nice to meet you" 127.0.0.1:9734/hello-everyone

看到输出功效:

C说话编写http处事器中request的理会,让一些从零开始

总的来说难度系数照旧有一些得呦,再会。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读