1.HTTP请求报文和响应报文是怎样的?
是应用层层面协议。
在请求报文中,分别具有,请求行,请求头部,空行,请求体。请求行包含请求的方法是get,post等等,URL,HTTP协议。请求头部更多的是自己设置,例如用户登录设置的Token放在请求头部。请求实就是具体的请求内容,通常用于POST请求等需要传输数据的情况。
在响应报文中,响应行,相应头部,空行,响应体。响应行有HTTP版本协议,URL,状态码,状态信息。响应头部就是对响应内容的附加信息,例如内容的格式,长度等等。响应体通常是服务器返回的HTML、JSON等内容。
2.HTTP请求中常见的状态码
1提示信息,2成功,3资源重定向,4客户端报文有误,5服务器内部出错。
200:成功。
301:永久重定向。
302:临时重定向。
304:协商缓存命中。
401表示用户未通过身份授权、验证。
403表示用户可能通过了身份验证,但缺少指定权限。
404:找不到页面。
405:请求类型不支持。
502:网关服务器从后端服务器那里获得的资源是错误的。
504:后端服务器无法及时返回资源给网关服务器。
3.强缓存和协商缓存?
参考
浏览器缓存(Brower Caching)是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。用于加快了客户端加载网页的速度,减少了冗余的数据传输,减少了服务器的负担,大大提升了网站的性能。
强缓存和协商缓存是浏览器的两个缓存级别。这两种缓存的实现依赖于HTTP报文中头部信息的交互。
具体来说,
浏览器在第一次请求发生后,再次请求 时:
- 浏览器会先获取该资源缓存的header信息,根据其中的expires和cahe-control判断是否命中强缓存 ,若命中则直接从缓存中获取资源,包括缓存的header信息,本次请求不会与服务器进行通信;状态码为200。
- 如果没有命中强缓存,浏览器会发送请求到服务器,该请求会携带第一次请求返回的有关缓存的header字段信息**(Last-Modified/IF-Modified-Since(时间的角度)、Etag/IF-None-Match(唯一检验码的角度))** ,由服务器根据请求中的相关header信息来对比结果是否命中协商缓存,若命中,则服务器返回新的响应header信息更新缓存中的对应header信息 ,但是并不返回资源内容,它会告知浏览器可以直接从缓存获取;否则返回最新的资源内容。成功命中返回304状态码。