前言
上一章内容我们讲了在应用层制定了我们自己自定义的协议、序列化和反序列化。
协议的制定相对来讲还是比较麻烦的,不过既然应用层的协议制定是必要的,那么肯定已经有许多计算机大佬们已经制定好了非常完善的协议了,我们今天就来学习我们日常生活经常会用到的HTTP协议。
需要用到的软件为 postman,fiddler。这些都是知名的抓包工具。
一、HTTP协议
现在我们使用浏览器一般都是使用http协议和https协议,在近些年,由于https更为安全可靠,许多浏览器都默认强制使用https协议进行访问,各大厂商也跟着一起改变。
Http在传输层也是采用的也是TCP协议。
所以,由于浏览器限制,这里我使用postman来进行http协议的访问。
1.url
之前我们学习udp和tcp协议我们知道,通过ip地址和端口号的方式就能访问到全网中的唯一主机所绑定端口号的服务器。
那么url是什么?
以上图为例,红色框圈起来的就叫做url(统一资源定位系统(uniform resource locator;URL)。
它的用途就是通过ip地址+端口号+文件路径的方式,来访问到全网中唯一主机中唯一资源。以?号结尾。
后面?的部分可以理解为参数,这是一种K/V式的参数,多个参数之间用&隔开。
url特殊字符
上图可以看出,这样的一串http地址,每个部分需要有不同的字符来隔开,例如/ : @ ? # 那么如果我们就是要在参数中加入这些字符,应该怎么办?
我们很容易就想到一种方式就是转码和解码。
request
我们这里向百度搜索helloworld,就是向百度的服务器发送了这样一个request请求报文。
这里我们没有发送正文。
respond
当我们向百度服务器发送上面这样的正文之后,百度的服务器也要给我们一个respond响应报文。
一般状态码200 为成功,404为未找到资源
需要注意的是,这里有个content-length,这个参数表示后面的正文字符长度,看过我的上个文章就知道,想要获取一个完整的报文,就需要向报头传长度进去。
总结
本章主要讲解了一下http协议中的url与请求报文和响应报文。
下一章我们来讲解如何自己实现一个httpserver。