浅谈 HTTP 请求响应过程

1,383 阅读2分钟
原文链接: www.jianshu.com

我是一个服务器,名字是www.lingyv.cn,门牌号是121.42.155.28,每天得工作就是跟各种浏览器打交道。他们总来我这要求取信息、存信息、删信息。可惜我才疏学浅,只稍微学过HTTP协议,所以看得懂用HTTP规定格式发过来的请求信,当然,回复他的时候也是用HTTP规范写回信。

我家有一个看门的人(服务器进程),每当有浏览器想找我时,他就会过来通知我。

这不,说着说着他就进来了。

“报~~~有浏览器找您。”

“好,跟他连线。”

OK,TCP连接已建立……

哒哒哒………打印机将请求报文打印了出来。

我拿过来看了看。

只见第一行写着。

“GET /student/composition/index.html HTTP/1.1”

“恩,这是用1.1版本HTTP规范写的。原来是找我要student文件夹里composition文件夹中的index.html文件啊。”我在心里默念。

转眼扫到第二行:“Host:www.lingyv.cn ”恩,是找我的没错。接着往下看

第三行:“Connerction:keep-alive”噢,他跟我说给他发完index.html后不要关闭跟他的连接

接着看第四、第五行:

“Accept:text/html”

“Accept-Language:zh-CN”

这是在告诉我他能接收哪些类型的信息以及他能接收的语言啊。然后看最后一行:

“User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36”

噢~~~这是在跟我表明自己的身份啊。

看完请求报文。我已经明白了这位浏览器客户的需求。赶紧找到index.html文件,给这位浏览器客户回信(响应报文)。

首先表明我使用的规范以及他的请求是成功的。

“HTTP/1.1 200 OK”

然后表明我接受获取他获取文件的请求

“Accept-Ranges: bytes”

接着告诉他我给他文件的类型

“Content-Type:text/html; charset=UTF-8“

写上日期时间:

“Date:Wed, 13 Apr 2016 13:17:32 GMT“

告诉他我的个人信息:

“Server:Apache/2.0.61 (Unix)”

告诉他内容的长度:

“Content-Length:1350”

……

把这些声明(响应头)写完了。接下来空一行把他想要的文件内容copy进去(响应体)。

好了,所有东西写完,我就把信(响应报文)给这位浏览器客户发了过去,让他得到自己想要的文件信息。