HTTP协议经典面试题整理及答案详解
无论你是Java、PHP开发者,还是运维人员,只要从事互联网行业,面试时都可能被问到HTTP协议相关知识。历时多天的呕心沥血,为你总结了HTTP协议的经典面试题。由于涉及内容比较繁杂不方便记忆,建议收藏起来,时不时看一遍或者面试前突击复习。
什么是HTTP报文?
HTTP报文是HTTP协议在客户端和服务端之间传送的数据块。
HTTP报文由哪三部分组成?
HTTP报文由起始行(start line)、头部(header)和主体(body)三部分组成,起始行是对报文进行的描述,头部包含报文的一些属性,主体包含报文的数据(可选,非必选)。
欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。
HTTP报文分为哪两类?
HTTP报文可以分为:请求报文(request message)和响应报文(response message)。当客户端向服务端发送请求时,就是发送请求报文;当服务端向客户端返回数据时,就是返回响应报文。比如,获取一个文本需要的请求报文和响应报文:
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 | 服务端错误 |
欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。
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协议的版本,无法完成处理。 |
欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。
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 |
微信公众号:万猫学社
微信扫描二维码
获得更多Java技术干货
HTTP协议经典面试题整理及答案详解的更多相关文章
- Java基础概念性问题整理,面试题型整理,附带答案详解供参考,首次整理!
题目目录 Java基础 1.JDK1.8新特性? 2.面向对象和面向过程的区别? 3.什么是值传递和引用传递? 4.什么是不可变对象? 5.讲讲类的实例化顺序? 6.java 创建对象的几种方式 7. ...
- iOS面试题整理带答案
iOS面试题整理带答案 找工作,面试是避免不了的! 而技术开发面试,问一些技术相关的问题是必须的,最新的技术可能人人都趋之若鹜,但有些原理和基础的也希望都有了解. 这里整理了一些iOS相关 ...
- 常用经典SQL语句大全完整版--详解+实例 《来自网络,很全没整理,寄存与此》
常用经典SQL语句大全完整版--详解+实例 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML ...
- 常用经典SQL语句大全完整版--详解+实例 (存)
常用经典SQL语句大全完整版--详解+实例 转 傻豆儿的博客 http://blog.sina.com.cn/shadou2012 http://blog.sina.com.cn/s/blog_84 ...
- web前端经典面试题大全及答案
阅读目录 JavaScript部分 JQurey部分 HTML/CSS部分 正则表达式 开发及性能优化部分 本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在 ...
- 2019年19道java经典面试题(附答案)
1.不可变对象 指对象一旦被创建状态不能再改变.任何修改都会创建一个新的对象,如 String.Integer及其它包装类. 2.能否创建一个包含可变对象的不可变对象? 可以.不要共享可变对象的引用就 ...
- 笔记整理--HTTP Header 详解
HTTP Header 详解 2013/09/21 | 分类: IT技术 | 0 条评论 | 标签: HTTP 分享到:36 原文出处: zcmhi HTTP(HyperTextTransferPro ...
- 算法进阶面试题01——KMP算法详解、输出含两次原子串的最短串、判断T1是否包含T2子树、Manacher算法详解、使字符串成为最短回文串
1.KMP算法详解与应用 子序列:可以连续可以不连续. 子数组/串:要连续 暴力方法:逐个位置比对. KMP:让前面的,指导后面. 概念建设: d的最长前缀与最长后缀的匹配长度为3.(前缀不能到最后一 ...
- Active Directory的LDAP协议与DN(Distinguished Name)详解
前言 光copy几段代码的文章没什么意思,本章上最基础的代码,主要是为了从编程方面聊LDAP和DN,其它的后面聊,一步步慢慢来吧. Active Directory编程须知 1.域控服务器: Wind ...
随机推荐
- 阅读GitHub源码的正确打开方式
前言 近来发现阅读开源项目上手就整最新的代码不合适,缺少项目迭代的具体实现过程,想着若是可以看到针对问题的提交代码就好了,所以就有了本篇博客. 以文主要涉及:如何fork开源项目,如何保证本地仓库代码 ...
- LSTM + linear-CRF序列标注笔记
CRF 许多随机变量组成一个无向图G = {V, E},V代表顶点,E代表顶点间相连的边, 每个顶点代表一个随机变量,边代表两个随机变量间存在相互影响关系(变量非独立), 如果随机变量根据图的结构而具 ...
- 038.集群网络-K8S网络实现
一 Kubernetes网络实现 1.1 Kubernetes网络优势 在实际的业务场景中,业务组件之间的关系十分复杂,微服务的理念更是让应用部署的粒度更加细小和灵活.为了支持业务应用组件的通信,Ku ...
- 源码分析 Alibaba sentinel 滑动窗口实现原理(文末附原理图)
要实现限流.熔断等功能,首先要解决的问题是如何实时采集服务(资源)调用信息.例如将某一个接口设置的限流阔值 1W/tps,那首先如何判断当前的 TPS 是多少?Alibaba Sentinel 采用滑 ...
- HTTP2.0学习 与 Nginx和Tomcat配置HTTP2.0
目录 一.HTTP2.0 1.1 简介 1.2 新的特性 1.3 h2c 的支持度 二.Nginx 对 http2.0 的支持 2.1 Nginx 作为服务端使用http2.0 2.2 Nginx 作 ...
- 测试工程师需要了解的shell变量知识
欢迎访问个人博客 什么是变量 本地变量:手动定义的,在当前系统的某个环境下才能生效,作用范围小 普通变量: 单引号:原字符输出,变量名='变量值' ➜ shell name='tom' ➜ shell ...
- 动态规划-Last Stone Weight II
2020-01-11 17:47:59 问题描述: 问题求解: 本题和另一题target sum非常类似.target sum的要求是在一个数组中随机添加正负号,使得最终得到的结果是target,这个 ...
- 使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法:
使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法: 1.错误详情: Excepti ...
- 彻底明白equals和hashCode
equals和hashCode方法 equals 我们知道equals是用来比较两个对象是否相等的,比如我们常用的String.equals方法 @Test public void test() { ...
- 《JavaScript 模式》读书笔记(5)— 对象创建模式4
我们学完了大部分对象创建模式相关的内容,下面还有一些小而精的部分. 七.对象常量 JavaScript中没有常量的概念,虽然许多现代的编程环境可能为您提供了用以创建常量的const语句.作为一种变通方 ...