http杂谈

        因为笔者经常和协议打交道,所以这个专题就从协议入手谈一下我对协议的认识。废话不多说进入正题。

        之所以写http的协议是因为现在web开发多如猪毛,算是自己一点体会,错误的地方请大家斧正。本文根据rfc2616 http1.1撰写。

        http是Hypertext Transfer Protocol的缩写,超文本传输协议。基于OSI模型第四层的tcp,属于OSI模型的第七层,同层的还有telnet ,ftp等。下面是一个http请求的例子,以此展开。


http


http

如上图所示,既然说http是文本协议,就是说是可见字符传输,不像coap,mqtt等二进制协议包含不可见字符。当然有的同学就会说了,那我不可见字符就不能传输了?废话,当然可以,要不然要payload干吗?没说payload里面不能有不可见字符啊。言归正传,下面是对上面图片的解析。

nc -l 8000 

笔者本机监听8000端口,其实就相当于一个监听8000端口tcp服务端,如果你要接受udp包加个-u参数。这里说的http协议建立在tcp连接之上大家应该能理解了。也就是说在tcp三次握手建立连接之后才开始传输http报文。

请求

POST /test HTTP/1.1

此部分包括请求方法、请求地址和协议版本,POST  表明http请求的方法,GET,POST,PUT,DELETE等,然后紧接着是一个空格,加上你要访问的资源路径加空格,再加上你采用的协议版本,这里笔者使用的是http 1.1,然后换行符,下面是http请求头部

Host: 127.0.0.1:8000

Host表明你要访问的主机+端口,这里有人会有疑问,我tcp里面连接里面已经有ip和端口了,你这里为什么还要有主机和端口,原因是由于同一个机器上面可能部署多个服务通过解析域名+端口指定服务,同时也可以用作服务端校验客户端的一种手段。在rfc1945 1.0的定义中不带host头,1.1中必须要携带host,不然会报400 bad request(也就是不是正确的http请求)

User-Agent: PostmanRuntime/7.1.1

User-Agent 客户端标识,告诉服务端这个请求是啥client发起的,要是你要限制客户端也可以在这里做文章。

Accept: */*

client想要接受的数据类型,可以是多个,大家看到*理论上应该能想到这是所有的意思啦。

Accept-Encoding: gzip, deflate

client告诉服务端,我支持gzip解压,你尽管发过来吧。

Cache-Control: no-cache

client告诉服务端不使用缓存策略,具体的大家可以google一下Cache-Control的值,了解一些http的缓存策略。

Content-Type: text/plain

告诉服务端我发送的数据是文本类型的啦,不是什么json,二进制的

Postman-Token: 16ba727a-a71d-48ed-96b5-a79c95ab512e

client自己加的,大家可以看的出来,我是使用post man发送的

X-Lantern-Version: 5.4.7

这个……不解释

在这里http请求头已经结束了,需要换行两次,可以看到图片上有个空白的一行,然后发送post请求的payload

i am client

http post请求的payload,大家可以对照Content-Type: text/plain结合着看,是个文本数据,如果我发送的是json数据的话,大家可以猜一下Content-Type的值是啥呢?

响应

HTTP/1.1 200 OK

此部分包括协议版本,状态码,状态码描述。服务端告诉客户端我采用的协议是http1.1 响应的状态是200 OK的,同样的大家猜一下如果客户端发送一个错误的http请求这里的响应应该是啥?

Server: Tengine

告诉客户端服务端信息譬如我是Apache nginx等

Date: Tue, 16 Jul 2019 07:58:07 GMT

响应时间

Content-Type: text/plain; charset=utf-8

同请求的Content-Type

Content-Length: 2

返回的数据长度(单位字节)

Connection: keep-alive

告诉client我想保持长连接,然后如果client不接受长连接那就直接tcp的挥手了。当然tcp异常端开了,服务端可能要等到下一个tcp心跳才能感知客户端已经断开。

紧接着又是两个换行。

ok

响应的paylaod,同reqest的。

所以对于一个web服务大致时序如下图:


http时序


响应码:

http的状态码可以快速的帮我们定位大致问题,一下是我据的几个例子

1、服务端tcp端口根本就没监听,你在tcp连接都建立不上,这时候一般你看到的响应是503之类的,这种就是服务不可用。你的client库自己告诉你的,其实根本没有返回

2、你请求的资源路径上没有handle处理,那服务端给你返回404,资源路径没找到

3、你发送的协议不符合http规范,400bad request

4、你使用http1.0协议请求一个http1.1的服务器,服务器会返回给你状态码101,并在响应头部告诉你服务器希望你使用的协议版本

5、你上传一个很大的文件,不知道服务器是否支持,于是你在你的请求头部添加Expect:100-continue服务端接收到你的指令希望你继续发送http请求会给你返回个100的状态码

6、301,302,303重定向相关,具体区别就是永久重定向还是单次请求重定向,浏览器会自动重定向到服务端返回指定的url

等等

下图是网上找的一个字典树的图,可以帮助大家理解后端,下期讲一下二进制协议coap,以上有错误的地方欢迎大家留言斧正。

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

推荐阅读更多精彩内容