各类书上在介绍http请求报文和http响应报文时花的太过于专业,没有结合实际,当时读的时候可能是我太笨了,想象不出来到底是个什么样子,所以我自己简单的对其做了一下总结:
一般书上会说http请求报文由四部分组成,请求行(request line),请求头部(request header),空行(blank line),请求数据(request body)。那么实际上我们可以理解为请求报文由三部分组成,因为只是加了一个空行而已。在这个我们可以记为http请求报文由请求行、请求投、请求体三部分组成。
请求行里面也包含着三部分请求方法、请求地址(URL)、请求的协议版本
上图中的第一行就是我们现在所说的请求行,因为请求方法是post,所以参数被放在了请求体中,如果请求方法是get,请求地址和参数将会用?想连。例如我正在写文章的地址如下图:
注意如果是面试的花请求的方法和长连接短连接问题是面试官比较常问的两个问题。
长连接短连接问题
在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行次HTTP 操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的Web 页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS 文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从HTTP/1. 1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响 应头有加入这行代码: Connect ion:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据 的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一 条已经建立的连接.Keep-Alive不会永久保持连接,它有-个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
get方法与post方法的区别
请求头各种主要由键值对组成,通知服务器关于客户端请求各种附加信息,键值对的类型主要有十种,了解即可,如上面fiddler抓包图并不是每一种键值对都要包含在请求头里面。
请求体里就是要上传的数据或者要修改更新的数据,通常的数据格式有:
HTTP响应报文的主要考点就是各类状态码的含义: