面试_计算机网络_http与https

81 阅读6分钟

HTTP


HTTP 是应用层协议,默认端口号为80,基于TCP/IP通信协议来传递数据。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。




HTTP有什么特点?

  • **无状态:**对于事务处理没有记忆能力,任何两次请求之间相互独立,没有关联。
  • 短连接:一次连接只处理一个请求,处理完即关闭。如果还要请求其他资源,就必须再新建一个连接。
  • 可靠:因为是基于TCP/IP的,尽最大努力交付



HTTP 方法有哪些?

  • GET:获取资源

  • POST:提交数据

  • PUT:上传文件,由于自身不带验证机制,任何人都可以上传文件,因此 存在安全性问题

  • Delete:删除文件,与 PUT 功能相反,并且同样不带验证机制,存在安全性问题




post与get的异同

  • 相同点

    他们都是http方法,底层也都是TCP/IP。

  • 不同点

    • get用来从服务器上获得资源;post是向服务器提交数据

    • get将请求参数放在url上,使用"?"、"&"连接,对客户端来说不安全;post将数据放在请求头或消息体中,相对安全。但从服务器的角度看,安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的,因此,POST是不安全的而GET是安全的。

    • get传输的数据要受到url长度限制(1024字节,1KB);post可以传输大量数据




HTTP 常见响应状态码

状态码分类

1xx:表示目前是协议的中间状态,还需要后续请求

2xx:表示请求成功

3xx:表示重定向状态,需要进一步操作

4xx:表示客户端请求错误

5xx:服务器端错误


常用状态码

101 切换请求协议,从 HTTP 切换到 WebSocket

200 请求成功,有响应体

301 永久重定向:会缓存

302 临时重定向:不会缓存

400 请求报文中存在语法错误

403 服务器禁止访问

404 服务器无法根据客户端的请求找到资源

500 服务器端内部错误

502 网关出错(如果想访问的端口号在组策略中没有打开,就是这个状态码)

503 服务器繁忙



302 和301状态码有什么区别?你平时浏览网页的过程中遇到过哪些 这两种场景吗?

301 代表该地址上的资源被永久移除了,以后都不应该访问这个地址,服务器帮助“自动转向”,并且url也会被自动替换。场景:输入 www.baidu.com,跳转到 baidu.com。域名换了


而 302 表示临时重定向,这个资源只是暂时不能被访问了,但是之后过一段时间还是可以继续访问,搜索引擎会抓取新的内容而在url上保留旧的网址。场景:访问某个网站的资源需要权限时,会需要用户去登录,跳转到登录页面登录之后,还可以继续访问。




HTTP 1.1和HTTP 1.0的区别?

  1. 支持长连接:从 HTTP/1.1起,默认使用长连接,开启 Connection:keep-alive。TCP连接默认不关闭,可以被多个请求复用。

  2. HTTP/1.1版还引入了 管道机制,即在同一个TCP连接里面,客户端可以同时发送多个请求。

  3. 带宽优化:HTTP1.0中,客户端可能只是需要某个对象的一部分,但服务器会将整个对象送过来,造成带宽的浪费;HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,返回码是206,另外支持断点续传功能。




HTTP 2.0和HTTP 1.X区别?

  • 多路复用:采用二进制编码,在一个连接里,客户端和浏览器都可以同时发送多个消息,而且不用按照顺序一一对应。

  • 服务端推送:客户端在请求一个资源时,服务器会把相关资源一起发给客户端,减少请求数量。

  • 请求头压缩:通讯双方各自缓存一份请求头数据,避免信息重复发送。




HTTP的缺点

  • 不验证通信方身份,身份可能被伪装
  • 通信使用明文不加密,内容可能被窃听(常见的抓包分析就是这种)
  • 不验证报文的完整性,可能被篡改





HTTPS


HTTPS 是在 HTTP 和 TCP 之间加了一个SSL/TLS安全层,所有传输的内容都经过加密,加密采用对称加密,但用来对称加密的密钥是用非对称加密产生的。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。

https与http的区别

  • HTTP安全性较差,明文传输,也不进行身份验证;HTTPS加入SSL来解决安全问题,但加密和身份认证也意味着性能消耗要比HTTP要大。
  • 端口号:http默认使用80端口,https默认使用443端口。
  • Https通信需要证书,而证书一般需要向认证机构购买;



HTTPS 的安全性是如何保障的?

  1. Client发起一个HTTPS请求。
  2. Server把事先配置好的 证书 返回给客户端。证书中含有 公钥
  3. Client验证证书,不通过就显示警告信息,通过就生成随机字符串作为会话密钥,然后用证书的公钥加密这个会话密钥,发给Server。
  4. Server使用自己的 私钥 解密这个消息,得到 会话密钥 。至此,Client和Server双方都持有了相同的 会话密钥
  5. 以后二者就都用这个 会话密钥 加密和解密传输的数据。

以上的流程是用 非对称加密 的方式加密密钥的过程;后续两方就都用这个 会话密钥 传输数据,传输的过程是 对称加密 的。

为什么两个都用到?

  • 首先:非对称加密安全性更高,但加解密效率是非常低的,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。

  • 另外:在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密


对称加密:使用相同的密钥进行加密和解密。双方通信前先约定一个密钥,加密方用它加密,接收方用它解密。但如果密钥在发送的时候被窃取,那就白忙一场。现实中通常的做法是将密钥进行非对称加密,然后传送给需要它的人。常见的算法:AES

非对称加密:非对称加密需要公钥和私钥,公钥可以随意发布,但私钥只有服务端知道。具体的过程就是上面那个流程的前4步。常见的算法:RSA、ECC