面试常被问的HTTP和HTTPS
引言
讲一段自己的真实的面试经历。
面试官:HTTP你懂么?
我:懂一点
面试官:HTTP响应头首部的一个Content-Type字段表示什么含义?
我:。。。emmm。。是不是编码格式我记得。
面试官:哦~那Content-Encoding表示什么呢?
我:哦哦,是这个表示编码格式。(尴尬)
面试官:哦~那Content-Type表示什么?
我:。。emmm。。。。是不是表示支持的语言。。
面试官:哦~~那Content-Language表示什么?
我:哦哦,是这个表示使用的语言。。。(出汗了)
面试官:哦~那Content-Type表示什么?
我:(一脸黑线)我不知道。。。
我记得他好像笑出了声,所以这就是猫眼娱乐的一个面试官啊,印象极其深刻,我会记他一辈子。????
什么是HTTP?
HTTP是超文本传输协议,是一个基于请求与相应,无状态的,应用层的协议。常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议。设计HTTP的初衷是为了提供一种发送和接收HTML页面的方法。HTTP/1.0出生于1996年,我也是这一年出生的。HTTP/1.1出生于1997年。HTTP/2产生于2015年,增加了多路复用,头信息压缩,二进制协议等内容。
HTTP报文格式
请求报文
常问的可能是HTTP的几种请求方法的含义,GET和POST的区别,头/首部字段名的含义
列出几个首部字段名及含义。
请求头字段名 | 说明 |
---|---|
Accept | 能够接受的回应内容类型 |
Accept-Charset | 能够接受的字符集 |
Accept-Encoding | 能够接受的编码方式列表 |
Accept-Language | 能够接受的回应内容的自然语言列表 |
Cookie | 之前由服务器Set-Cookie发送的一个超文本传输协议Cookie |
Content-Length | 以八位字节数组表示的请求体的长度 |
Content-Type | 请求体的多媒体类型 |
Data | 发送该消息的日期和时间 |
响应报文
一个可能会问的问题,HTTP状态码和其含义。上次面试,面试官问了我状态码500表示什么。
一般状态码是一个三位数,最高位定义了响应的类别。
最高位 | 含义 |
---|---|
1xx | 指示信息,表示请求已接收,继续处理 |
2xx | 成功,表示请求已被成功接收,理解,接受 |
3xx | 重定向,要完成请求必须进行更进一步的操作 |
4xx | 客户端错误,请求有语法错误或请求无法实现 |
5xx | 服务端错误,服务器未能实现合法的请求 |
常见的状态码以及描述如下:
状态码 | 描述 |
---|---|
200 | OK,客户端请求成功 |
400 | Bad Request,客户端请求有语法错误,不能被服务器所理解 |
401 | Unauthorized,请求未经授权 |
403 | Forbidden,服务器收到请求,但是拒绝提供服务 |
404 | Not Found,请求资源不存在,比如输入了错误的URL |
500 | Internal Server Error,服务器发生不可预期的错误 |
503 | Server Unavailable,服务器当前不能处理客户端的请求,一段时间后可能恢复 |
列出几个首部字段名及含义。
响应头字段名 | 说明 |
---|---|
Content-Encoding | 在数据上使用的编码格式 |
Content-Length | 响应主体的长度 |
Content-Type | 当前内容的类型 |
Data | 此条消息被发送时的日期和时间 |
HTTP的特点
- 无状态。协议对客户端没有状态存储,对事物处理没有记忆能力,比如访问一个网站需要反复进行登陆操作。
- 无连接。HTTP/1.1以前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要消耗不必要的时间和流量。
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应。
- 简单快速、灵活。
- 通信使用明文,请求和响应不会对通信方进行确认,无法保护数据的完整性。
HTTPS的特点
基于HTTP协议,通过SSL或TLS提供加密处理数据,验证对方身份以及数据完整性保护。
HTTPS有如下特点:
- 内容加密:采用混合加密技术,中间这无法直接查看明文内容。
- 验证身份:通过证书认证客户端访问的是自己的服务器。
- 保护数据完整性:防止传输的内容被中间人冒充或篡改。
具体的加密过程这里不再细说,之前面试58,面试官问我:怎么确保CA的正确性?当时晕了,没答出来,其实操作系统都预装了最顶级的可以信任的CA,信用一级一级背书,可以知道服务端发送的CA公钥是不是对的。