HTTP学习笔记(1)
最近工作有点闲。一直想着充实下自己。正好在知乎上有人推荐了HTTP权威指南这本书。
之所以选择学习HTTP,是因为某种程度上工作需要罢了。最近一段时间一直在自学Python,需要写爬虫搜集各大招聘网站的招聘信息。但是我本人对网络的机理一无所知,导致经常知其然而不知其所以然。数学专业出身的我,最讨厌的就是这点了。
HTTP,简单点说,是应用层的协议,基于TCP所在的传输层。按照书中的总结:TCP负责,1)无差错的数据传输,2)按序传输,3)未分段的数据流。而HTTP呢?我的理解是,感觉就像是两国之间的贸易公司。要么你下单,我按照你的要求发送货物。要么我下单,你按照我的要求来发送货物。而TCP协议则是航运公司,只负责运输货物。
在现实中,贸易公司下单,发货,双方需要填写订单,发货清单。同理,在网络中,双方也需要遵循类似的流程,用来规范双方。这个流程就是请求和响应的报文。
HTTP报文是由一行一行的字符串组成的[就像我们平常会把文字和数字区分开来一样,计算机语言也会有相似的区分。一般是字符串(既文本),整数,浮点数(小数)等]。
HTTP的报文格式如下:
请求报文:
- GET /writer#/notebokks/88888/notes.txt HTTP/1.0
- Accept:text/*
- Accept-Language:en,fr
响应报文:
- HTTP/1.0 200 OK
- Content-type:text/plain
- Content-length:19
- Hi! Welcome to my Blog!
我们首先看请求报文。请求报文一般是客户端,也就是你的浏览器发送给服务器的报文。GET很好理解哈。这是一个请求的命令。好比意思是说:“XXX,我文件丢在这个地方( /writer#/notebokks/88888/notes.txt)了,你把它发给我。记得是扫描后快递给我(HTTP/1.0),记得是文字哈(text),英文或者法文版的(en,fr)。不要拍照片给我哈。谢谢啦”。
当然,除开GET,还有许多其他请求命令。比如POST,PUT,DELETE,HEAD。 不过,比较常用的是GET和POST。
POST就是:你突然接到一个电话,是你老婆打来的,“老公,我最近看上了一个包包,有点儿贵。那个,你卡号是多少来着?” 。 “那个,咳,对,我卡号是多少来着?你让我想想哈。喂!喂!你听的到吗?喂!嘟!嘟!嘟!”
言归正传哈,毕竟是你老婆,卡号还是要给的。毕竟你老婆是你的,她的包也是你的,不过是左手和右手的关系。这么想,心情是不是突然好一点儿了啦。
言归正传2.0
HTTP服务器(支持HTTP协议的服务器)接受到来自你的请求后,当然不能坐视不理,只能立马按照你的要求将你需要的资源(文本,图片,视频等)按照你要求的协议版本(HTTP/1.0)发给你。这就是所谓的响应报文.
那个,咳,Hi! Welcome to my Blog! 这就是服务器快递给你的作业内容,虽然是英文的,但是也忒简单了点吧?也就比Hello World稍微复杂点。你英语老师是教体育的吧?
好吧!这就是HTTP权威指南的第一章。
难道第一章就这么点内容吗?
当然不是。
虽然第一章的标题叫HTTP概述,但是:
我的这个叫Preview of HTTP概述。