点击上方蓝字设为星标
每周一、三、五上午 8:30 准时推送
下面开始今天的学习~ 日常生活中与我们打交道最多的可能就是 HTTP 协议了,无论是访问网站还是观看视频,几乎所有的数据都是通过 HTTP 协议进行传输,HTTP 全称 HyperText Transfer Protocol,被称为超文本传输协议。HTTP 协议
上图是 TCP IP 和 HTTP 之间关系的示意图,我们在传输数据时,可以只使用(传输层)TCP/IP 协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,Web 使用 HTTP 协议作应用层协议,以封装 HTTP 文本信息,然后使用 TCP/IP 做传输层协议将它发到网络上。 正是由于 HTTP 非常有名和常见,在日常的开发和面试中,都有可能被问到 HTTP 的一些基本原理,比如:HTTP 请求头由哪些部分构成,他们的作用分别是什么?有过网络相关编程经验的人会知道,在设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干。 HTTP 协议传输的消息也是这样规定的,每一个 HTTP 包都分为 HTTP 头和 HTTP 体两部分,消息体是可选的,而消息头是必须的。 每当我们打开一个网页,在上面点击右键,选择“查看源文件”,这时看到的 HTML 代码就是 HTTP 的消息体,那么消息头可以通过浏览器的开发工具(F12)或者插件可以看到。 HTTP 报文是面向文本的,报文中的每一个字段都是一些 ASCII 码串,各个字段的长度是不确定的。 HTTP有两类报文:
- 请求报文:从客户向服务器发送的请求报文。
- 响应报文:从服务器到客户的回答。
leetcode-cn.com
的时候,浏览器发出的 HTTP 请求头部是:
Host: leetcode-cn.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3835.0 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflate, br
这一切在你输入完网址并按下 Enter 之后浏览器会替你发送给 leetcode-cn.com的服务器,我们分别来看看这些字段代表了什么。
HTTP 返回头
HTTP 返回头也由两个部分组成,分别是: 状态行、消息报头,如下图: 在发出了之前的请求报文之后,leetcode-cn.com
的服务器就会进行返回,其中部分 HTTP 头部信息可能如下:
HTTP/2.0 200 OKdate: Sat, 12 Oct 2019 12:47:09 GMTcontent-type: text/html; charset=utf-8server: nginx/1.15.8content-encoding: br
对于其中的字段来说,可以整理为以下表格:
另外,第一行中的 200 OK 也就是大家所熟悉的 HTTP 状态码了,常见的状态码分类有: 其中,面试时常被问到的特定状态码有:- 404 Not Found:服务器无法根据客户端的请求找到资源(网页)。
- 304 Not Modified:未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。
- 502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应,一般来说是后端服务器挂掉时前端网页服务器进行的返回。
- 500 Internal Server Error:服务器内部错误,无法完成请求。
小结
HTTP 协议由于其常见性和重要性在面试和开发中非常常见,相关的概念需要非常清楚,除了 HTTP 头以外,还有以下一些相关的话题也是面试重点,有相关面试的同学需要提前弄懂哦:- 常用的 HTTP 方法有哪些?
- GET 方法与 POST 方法的区别?
- HTTP 请求报文与响应报文格式?
本文作者:Nova Kwok
编辑&版式:霍霍
声明:本文归 “力扣” 版权所有,如需转载请联系。
点个在看,少个 bug?