HTTP协议经典面试题整理及答案详解

无论你是Java、PHP开发者,还是运维人员,只要从事互联网行业,面试时都可能被问到HTTP协议相关知识。历时多天的呕心沥血,为你总结了HTTP协议的经典面试题。由于涉及内容比较繁杂不方便记忆,建议收藏起来,时不时看一遍或者面试前突击复习。

什么是HTTP报文?

HTTP报文是HTTP协议在客户端和服务端之间传送的数据块。

HTTP报文由哪三部分组成?

HTTP报文由起始行(start line)、头部(header)和主体(body)三部分组成,起始行是对报文进行的描述,头部包含报文的一些属性,主体包含报文的数据(可选,非必选)。

HTTP报文分为哪两类?

HTTP报文可以分为:请求报文(request message)和响应报文(response message)。当客户端向服务端发送请求时,就是发送请求报文;当服务端向客户端返回数据时,就是返回响应报文。比如,获取一个文本需要的请求报文和响应报文:

HTTP协议经典面试题整理及答案详解

HTTP常见的请求方法有哪些?

方法 描述 是否包含主体
GET 从服务端获取指定信息
POST 向服务端发送待处理的数据
HEAD 从服务端获取指定信息的头部
PUT 向服务端发送数据并替换服务端上指定的数据
OPTIONS 查询针对请求URL指定的资源支持
DELETE 从服务端删除指定数据
TRACE 沿着目标资源的路径执行消息环回测试

HTTP的状态码分为哪几类?

整体范围 已定义范围 分类
100~199 100~101 信息提示
200~299 100~206 成功
300~399 300~305 重定向
400~499 400~415 客户端错误
500~599 500~505 服务端错误

HTTP常见的状态码有哪些?

状态码 原因短语 含义
100 Continue 说明收到了请求的初始部分,请客户端继续。
101 Switching Protocols 说明服务端正在根据客户端的指定,将协议切换成Update头部所列的协议。
200 OK 请求没有问题,主体包含了所请求的数据。
201 Created 用于在服务端创建数据的请求(比如PUT),Location头部给出了创建数据的URL。
202 Accepted 请求已经被接受,但服务端还没有对其执行任何动作。
203 Non-Authoritative Information 数据已经正常地返回,但一些响应报文头部可能不正确。
204 No Content 响应报文中包含起始行和头部,没有主体部位。客户端应该继续显示原来的数据。
205 Reset Content 仍然没有主体部分,但客户端应该清除它所显示的数据。
206 Partial Content 成功执行了一部分或者一个范围内的请求。
300 Multiple Choices 客户端请求了一个实际指向多个资源的URL,服务端可以在Location头部包含首选URL。
301 Moved Permanently 请求的URL已经被移除,响应报文中的Location头部包含现在资源的URL。
302 Found 类似于301,但新的URL应该被视为临时性的,将来的请求仍应是老的URL。
303 See Other 类似于301,但主要目的是允许POST请求的响应将客户端定向到某个资源上。
304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求时,服务端告知客户端,原来缓冲的数据还可以继续使用。
305 Use Proxy 用来说明必须通过代理进行访问,代理的位置在Location头部给出。
306 - 未使用
307 Temporary Redirect 类似于301,但客户端应该使用Location头部给出的URL临时请求,将来的请求仍应是老的URL。
400 Bad Request 客户端发出的是错误请求,服务器无法理解。
401 Unauthorized 请求要求客户端的身份认证
402 Payment Required 保留,以作将来使用
403 Forbidden 服务端理解客户端的请求,但是拒绝执行此请求。
404 Not Found 服务端无法找到客户端所请求的URL。
405 Method Not Allowed 服务端不支持客户端请求的方法。
406 Not Acceptable 服务端无法根据客户端请求的类型完成请求。
407 Proxy Authentication Required 类似于401,但用于要求对资源进行认证的代理服务器。
408 Request Timeout 服务端等待客户端发送的请求时间过长,服务端可以响应此状态码,并关闭连接。
409 Conflict 客户端的请求可以在资源上引发一些冲突,服务端可以发送此状态码。
410 Gone 类似于404,但是服务端曾经拥有过此资源。
411 Length Required 服务端要求客户端的请求报文中包含Content-Length头部时,使用此状态码。
412 Precondition Failed 客户端发起了条件请求,并且其中一个条件失败时,使用此状态码。
413 Request Entity Too Large 客户端发送的主体部分比服务端能够或者期望处理的要大时,使用此状态码。
414 Request URI Too Large 客户端发送的请求URI比服务端能够或者期望处理的要长时,使用此状态码。
415 Unsupported Media Type 服务端无法理解或无法支持客户端所发的内容类型是,使用此状态码。
416 Requested Range Not Satisfiable 客户端请求指定资源的范围无效或无法满足。
417 Expectation Failed 服务端无法满足客户端的Expect头部。
500 Internal Server Error 服务端发生内部错误,无法完成请求。
501 Not Implemented 服务端不支持客户端的请求,无法完成请求。
502 Bad Gateway 作为网关或代理的服务器,从远端服务端接收到了一个无效的请求。
503 Service Unavailable 用来说明服务端现在无法为请求提供服务,但是将来可以。什么时候资源会变为可用可包含在服务端的Retry-After头部中。
504 Gateway Timeout 类似于408,只是作为网关或代理的服务器,未及时从远端服务端获取请求。
505 HTTP Version Not Supported 服务端不支持请求的HTTP协议的版本,无法完成处理。

HTTP常见的头部信息有哪些?

请求报文的头部信息

Header 含义 示例
Accept 指定客户端能够接收的内容类型。 Accept: text/html,application/xhtml+xml
Accept-Charset 客户端可以接受的字符编码集。 Accept-Charset: GBK
Accept-Encoding 客户端可以支持的服务端返回内容压缩编码类型。 Accept-Encoding: gzip, deflate
Accept-Language 客户端可接受的语言 Accept-Language: zh-CN,zh
Authorization HTTP授权的授权证书 Authorization: Basic b25lbW9yZSUzQSV1NEUwNyV1NzMyQiV1NUI2NiV1NzkzRQ==
Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache
Connection 表示是否需要持久连接。 Connection: keep-alive
Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给服务端。 Cookie: onemore=万猫学社;
Content-Length 请求的内容长度 Content-Length: 1024
Content-Type 请求的与实体对应的MIME信息 Content-Type: application/x-www-form-urlencoded
Date 请求发送的日期和时间 Date: Mon, 16 Mar 2020 11:11:11 GMT
Expect 请求的特定的服务端行为 Expect: 100-continue
Host 指定请求的服务端的域名和端口号 Host: onemore.study
If-Match 只有请求内容与实体相匹配才获取该数据 If-Match: "306073f04224cbd114f14693c272f6a0"
If-Modified-Since 如果请求的部分在指定时间之后被修改则请求成功。 If-Modified-Since: Mon, 16 Mar 2020 11:11:11 GMT
If-None-Match 只有请求内容与实体不匹配才获取该数据。 If-None-Match: "306073f04224cbd114f14693c272f6a0"
If-Range 允许对数据的某个范围进行条件请求。 If-Range: "306073f04224cbd114f14693c272f6a0"
If-Unmodified-Since 只有在指定时间之后未被修改才请求成功。 If-Unmodified-Since: Mon, 16 Mar 2020 11:11:11 GMT
Max-Forwards 将请求转发给其他代理或网关的最大次数。 Max-Forwards: 10
Pragma 用来包含实现特定的指令 Pragma: no-cache
Proxy-Authorization 连接到代理的授权证书 Proxy-Authorization: Basic b25lbW9yZSUzQSV1NEUwNyV1NzMyQiV1NUI2NiV1NzkzRQ==
Range 只请求数据的一部分,指定范围 Range: bytes=512-1024
Referer 先前资源的URL Referer: http://onemore.study
TE 客户端愿意接受的传输编码 TE: trailers,deflate;q=0.5
User-Agent 包含发出请求的客户端信息 User-Agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:65.0)

响应报文的头部信息

Header 含义 示例
Age 从原始服务端到代理缓存形成的估算时间(以秒计,非负) Age: 12
Allow 对某资源的有效的请求行为 Allow: GET, POST
Cache-Control 告诉所有的缓存机制是否可以缓存及哪种类型。 Cache-Control: no-cache
Content-Encoding 服务端支持的返回内容压缩编码类型。 Content-Encoding: gzip
Content-Language 响应体的语言 Content-Language: zh-CN,zh
Content-Length 响应体的长度 Content-Length: 1024
Content-Location 请求资源实际所处位置 Content-Location: /index.do
Content-MD5 返回资源的MD5校验值 Content-MD5: 306073f04224cbd114f14693c272f6a0
Content-Range 在整个返回资源中本部分的字节位置 Content-Range: bytes 512-1024
Content-Type 返回资源的对象类型 Content-Type: text/html; charset=GBK
Date 原始服务端消息发出的时间 Date: Mon, 16 Mar 2020 11:11:11 GMT
ETag 请求变量的实体标签的当前值 ETag: "306073f04224cbd114f14693c272f6a0"
Expires 响应过期的日期和时间 Expires: Mon, 16 Mar 2020 11:11:11 GMT
Last-Modified 请求资源的最后修改时间 Last-Modified: Mon, 16 Mar 2020 11:11:11 GMT
Location 告知客户端资源的实际URL Location: http://onemore.study
Pragma 包括实现特定的指令 Pragma: no-cache
Proxy-Authenticate 它指出认证方案和可应用到代理的该URL上的参数 Proxy-Authenticate: Basic
Retry-After 如果实体暂时不可取,通知客户端在指定时间之后再次尝试 Retry-After: 60
Server 服务端软件名称 Server: Microsoft-IIS/8.5
Set-Cookie 设置Http Cookie Set-Cookie: onemore=万猫学社;
Transfer-Encoding 文件传输编码 Transfer-Encoding:chunked
Vary 告知下游代理是使用缓存响应还是从原始服务端请求 Vary: *
Via 告知代理客户端响应是通过哪里发送的 Via: HTTP/1.1 GWA
WWW-Authenticate 表明客户端请求实体应该使用的授权方案 WWW-Authenticate: Basic
文章持续更新,微信搜索「万猫学社」第一时间阅读。
关注后回复「电子书」,免费获取12本Java必读技术书籍。
上一篇:阿里面试居然跟我扯了半小时的CyclicBarrier


下一篇:腾讯面试居然跟我扯了半小时的CountDownLatch