无论你是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协议经典面试题整理及答案详解的更多相关文章

  1. Java基础概念性问题整理,面试题型整理,附带答案详解供参考,首次整理!

    题目目录 Java基础 1.JDK1.8新特性? 2.面向对象和面向过程的区别? 3.什么是值传递和引用传递? 4.什么是不可变对象? 5.讲讲类的实例化顺序? 6.java 创建对象的几种方式 7. ...

  2. iOS面试题整理带答案

    iOS面试题整理带答案       找工作,面试是避免不了的! 而技术开发面试,问一些技术相关的问题是必须的,最新的技术可能人人都趋之若鹜,但有些原理和基础的也希望都有了解. 这里整理了一些iOS相关 ...

  3. 常用经典SQL语句大全完整版--详解+实例 《来自网络,很全没整理,寄存与此》

    常用经典SQL语句大全完整版--详解+实例 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML ...

  4. 常用经典SQL语句大全完整版--详解+实例 (存)

    常用经典SQL语句大全完整版--详解+实例 转 傻豆儿的博客 http://blog.sina.com.cn/shadou2012  http://blog.sina.com.cn/s/blog_84 ...

  5. web前端经典面试题大全及答案

    阅读目录 JavaScript部分 JQurey部分 HTML/CSS部分 正则表达式 开发及性能优化部分 本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在 ...

  6. 2019年19道java经典面试题(附答案)

    1.不可变对象 指对象一旦被创建状态不能再改变.任何修改都会创建一个新的对象,如 String.Integer及其它包装类. 2.能否创建一个包含可变对象的不可变对象? 可以.不要共享可变对象的引用就 ...

  7. 笔记整理--HTTP Header 详解

    HTTP Header 详解 2013/09/21 | 分类: IT技术 | 0 条评论 | 标签: HTTP 分享到:36 原文出处: zcmhi HTTP(HyperTextTransferPro ...

  8. 算法进阶面试题01——KMP算法详解、输出含两次原子串的最短串、判断T1是否包含T2子树、Manacher算法详解、使字符串成为最短回文串

    1.KMP算法详解与应用 子序列:可以连续可以不连续. 子数组/串:要连续 暴力方法:逐个位置比对. KMP:让前面的,指导后面. 概念建设: d的最长前缀与最长后缀的匹配长度为3.(前缀不能到最后一 ...

  9. Active Directory的LDAP协议与DN(Distinguished Name)详解

    前言 光copy几段代码的文章没什么意思,本章上最基础的代码,主要是为了从编程方面聊LDAP和DN,其它的后面聊,一步步慢慢来吧. Active Directory编程须知 1.域控服务器: Wind ...

随机推荐

  1. asp.net c# 通过消息队列处理高并发请求(以抢小米手机为例)

    网站面对高并发的情况下,除了增加硬件, 优化程序提高以响应速度外,还可以通过并行改串行的思路来解决.这种思想常见的实践方式就是数据库锁和消息队列的方式.这种方式的缺点是需要排队,响应速度慢,优点是节省 ...

  2. java -封装一个类。(姓名、年龄、性别)

    //定义一个类. public class Maopao1{ //创建私有的对象. private String name; private int age; private String sex; ...

  3. setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop

    笔者以前面试的时候经常遇到写一堆setTimeout,setImmediate来问哪个先执行.本文主要就是来讲这个问题的,但是不是简单的讲讲哪个先,哪个后.笼统的知道setImmediate比setT ...

  4. eclipse 配置tomcat运行环境

    eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上 1.打开Eclipse,单击“Window”菜单,选择下方的“Preferences”. 2.单击“Server”选项, ...

  5. 将SublimeText加入右键菜单

    将SublimeText加入右键菜单 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\SublimeText] @=&q ...

  6. 【数据结构和算法】001 单链表 LinkedList

    一.单链表(LinkedList)介绍和内存布局 链表是有序的列表,它在内存中的实际存储结构如下: 看上去虽然无序,但他是靠灭个链表节点元素的地址和next域来分清首尾相连的顺序,如下图所示,由头指针 ...

  7. [模板] LCA-最近公共祖先-倍增法

    2019-11-07 09:25:45 C.树之呼吸-叁之型-树上两点路径长度 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 7 (4 ...

  8. 用svg+css 或者js制作打钩的动画

    之前老板让做一个登陆后 可以显示一个打钩的效果 百度死活搜不到 今天在B站看到的一个视频居然有 根据需求改进了一下废话不多说先看效果! html代码 <!DOCTYPE html> < ...

  9. 爬虫&Selenium&ChromeDriver

    一.Selenium selenium是什么 Selenium [1] 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, ...

  10. 微信公众平台 分享 关注 js功能代码

    转上一篇文章 微信很火,微信推出的公众平台也吸引了一部分市场宣传推广团队,像冷笑话大全这种微博养粉大户在微信的公众平台也是异常火爆. 因工作需求,最近为我们的市场部做了几个微信公共平台下的页面,其中涉 ...