面试常被问的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和HTTPS
常问的可能是HTTP的几种请求方法的含义,GET和POST的区别,头/首部字段名的含义
列出几个首部字段名及含义。

请求头字段名 说明
Accept 能够接受的回应内容类型
Accept-Charset 能够接受的字符集
Accept-Encoding 能够接受的编码方式列表
Accept-Language 能够接受的回应内容的自然语言列表
Cookie 之前由服务器Set-Cookie发送的一个超文本传输协议Cookie
Content-Length 以八位字节数组表示的请求体的长度
Content-Type 请求体的多媒体类型
Data 发送该消息的日期和时间

响应报文

面试常被问的HTTP和HTTPS
一个可能会问的问题,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的特点

  1. 无状态。协议对客户端没有状态存储,对事物处理没有记忆能力,比如访问一个网站需要反复进行登陆操作。
  2. 无连接。HTTP/1.1以前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要消耗不必要的时间和流量。
  3. 基于请求和响应:基本的特性,由客户端发起请求,服务端响应。
  4. 简单快速、灵活。
  5. 通信使用明文,请求和响应不会对通信方进行确认,无法保护数据的完整性。

HTTPS的特点

基于HTTP协议,通过SSL或TLS提供加密处理数据,验证对方身份以及数据完整性保护。
HTTPS有如下特点:

  1. 内容加密:采用混合加密技术,中间这无法直接查看明文内容。
  2. 验证身份:通过证书认证客户端访问的是自己的服务器。
  3. 保护数据完整性:防止传输的内容被中间人冒充或篡改。

具体的加密过程这里不再细说,之前面试58,面试官问我:怎么确保CA的正确性?当时晕了,没答出来,其实操作系统都预装了最顶级的可以信任的CA,信用一级一级背书,可以知道服务端发送的CA公钥是不是对的。