1.https握手过程

提前工作:服务器需要CA机构申请证书,CA颁发证书并存至服务器

  1. 服务器携带公钥向数字证书机构申请证书
  2. 数字证书机构用自己的私钥对服务器传来的公钥签名颁发证书并返回给服务器
  3. 服务器将申请携带公钥的证书发给客户端
  4. 客户端对证书进行校验,验证通过或者用户接受不安全的证书,从操作系统中找到证书颁发机构的公钥,解密后得到服务器的公钥
  5. 使用服务器公钥非对称加密发送给服务器,并携带随机字符串(密钥,之后用作对称加密的钥匙)。
  6. 服务器使用私钥解密,获取报文数据及随机字符串(密钥)
  7. 服务器通过密钥对称加密,发一次握手数据
  8. 客户端接受握手消息,握手结束,双方确定加密算法,开始传输过程

HTTP高频面试题 - 图1

2.什么是Http协议无状态协议?怎么解决Http协议无状态协议?

无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息

也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“。
可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。

3.HTTP请求报文与响应报文格式

请求报文包含四部分:
HTTP高频面试题 - 图2

  • a、请求行:包含请求方法、URI、HTTP版本信息
  • b、请求首部字段
  • c、请求内容实体
  • d、空行

请求行:请求方法、URL地址、协议名称及版本号
请求头:HTTP的报文头;K-V
请求体:它承载多个请求参数的数据
响应报文包含四部分:
HTTP高频面试题 - 图3

  • a、状态行:包含HTTP版本、状态码、状态码的原因短语
  • b、响应首部字段
  • c、响应内容实体
  • d、空行

响应行:报文协议及版本、状态码及状态描述
响应头:也是由多个属性组成;
响应体:请求返回的数据
常见的首部:

  • 通用首部字段(请求报文与响应报文都会使用的首部字段)
    • Date:创建报文时间
    • Connection:连接的管理
    • Cache-Control:缓存的控制
    • Transfer-Encoding:报文主体的传输编码方式
  • 请求首部字段(请求报文会使用的首部字段)
    • Host:请求资源所在服务器
    • Accept:可处理的媒体类型
    • Accept-Charset:可接收的字符集
    • Accept-Encoding:可接受的内容编码
    • Accept-Language:可接受的自然语言
  • 响应首部字段(响应报文会使用的首部字段)
    • Accept-Ranges:可接受的字节范围
    • Location:令客户端重新定向到的URI
    • Server:HTTP服务器的安装信息
  • 实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
    • Allow:资源可支持的HTTP方法
    • Content-Type:实体主类的类型
    • Content-Encoding:实体主体适用的编码方式
    • Content-Language:实体主体的自然语言
    • Content-Length:实体主体的的字节数
    • Content-Range:实体主体的位置范围,一般用于发出部分请求时使用

      4.HTTP优化方案

      5.状态码

      1 信息,服务器收到请求,需要请求者继续执行操作
      2
      成功,操作被成功接收并处理
      3 重定向,需要进一步的操作以完成请求
      4
      客户端错误,请求包含语法错误或无法完成请求
      5** 服务器错误,服务器在处理请求的过程中发生了错误

1开头的状态码
100:Continue继续。客户端应继续其请求
101:Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2开头的状态码
200:请求被正确处理
204:请求被受理但无资源返回
206:客户端只请求资源的一部分
3开头的状态码
301:永久性重定向
302:临时重定向
303:与302类似,只希望客户端在请求一个URI时,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
4开头的状态码
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止访问
404:服务器找不到对应资源
5开头的状态码
500:服务器内部错误
503:服务器正忙

6.get和post的区别

1)get请求参数跟在url后面,有长度限制(浏览器长度限制,如果是内部的get请求则不限制长度),post请求参数封装在请求头中,无长度限制。
2)get请求参数暴露,安全性保密性没有post高
3)get请求会被浏览器缓存起来,post请求内容不会被缓存
简单来说:GET产生一个TCP数据包,POST产生两个TCP数据包
严格的说:对于GET方式的请求,游览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST请求。游览器先发送header,服务器响应100 continue,游览器再发送data,服务器响应200 ok(返回数据)

7.输入URL,中间经历的过程

1、游览器输入url。先解析url地址是否合法
2、游览器检查是否有缓存(游览器缓存-系统缓存-路由器缓存)。如果有,直接显示。如果没有,跳到第三步。
3、在发送http请求前,需要域名解析(DNS解析),解析获取对应过的ip地址。
4、游览器向服务器发起tcp链接,与游览器简历tcp三次握手
5、握手成功后,游览器向服务器发送http请求,请求数据包
6、服务器收到处理的请求,将数据返回至游览器
7、游览器收到http响应。
8、游览器解析响应。如果响应可以缓存,则存入缓存
9、游览器发送请求获取嵌入在HTML中的资源(html,css,JavaScript,图片,音乐等),对于未知类型,会弹出对话框
10、游览器发送异步请求
11、页面全部渲染结束。

8.http与https的区别

HTTPS = HTTP + SSL
1、https有ca证书,http一般没有
2、http是超文本传输协议,信息是明文传输。https则是具有安全性的ssl加密传输协议
3、http默认80端口,https默认443端口。

9.常用的HTTP方法有哪些?

  • GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
  • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
  • PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
  • HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
  • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
  • OPTIONS:查询相应URI支持的HTTP方法。

    10.HTTP幂等性

    HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。“副作用”的意思:指当你发送完一个请求以后,网站上的资源状态没有发生修改,即认为这个请求是无副作用的
    GET是幂等的,无副作用,DELETE/PUT是幂等的,有副作用,POST是非幂等的,有副作用的
    解决方案:

  • token机制,防止页面重复提交。发送方记录token(GUID) (通常保存到redis),发送提交接口 带上发送方token,将token从redis中删除token,如果成功删除说明第一次执行,如果删除失败即已经删除过,说明该消息已经被消费。

  • 悲观锁 获取数据的时候加锁获取
  • select+insert,再插入或者修改的时候先查询一下,如果正确再进行修改
  • 状态机幂等: 在设计单据相关的业务,或者是任务相关的业务,肯定会涉及到状态机(状态变更图),就是业务单据上面有个状态,状态在不同的情况下会发生变更,一般情况下存在有限状态机。如果状态机已经处于下一个状态,这时候来了一个上一个状态的变更,理论上是不能够变更的,这样的话,保证了有限状态机的幂等。

    11.请求头信息

  1. Cache-Control:指定请求和响应遵循的缓存机制
  2. Connection:表示是否需要持久连接,http1.1默认是“Keep-Alive”
  3. Content-Type:
  4. User-Agent:

    12.http报503错误是为什么

因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求。 其含义是, 这是一个暂时情况,会有一些延误, 过 后将会得到缓解。 有些服务器在这种情况下也许干脆拒绝套接字(socket) 连接,在这种情况下,可能会由于套接字建立超时而产生不同的错误信息。
解决 503 错误
您的 Web 服务器实际上处于“关闭维修”状态。 它仍然在最低限度地运行, 因为它至少可以响应 503 状态码, 但全面服务是不可能的, 即您的网站不可用。 可能的原因有很多, 但一般来说, 是由于您的 Web 服务器操作员的人为干预。 通常您就应知道有人正在努力解决此问题,正常服务将被尽快恢复。