【计算机网络】HTTP常见面试题

1、HTTP 基本概念

HTTP 是超⽂本传输协议,也就是HyperText Transfer Protocol

2、能否详细解释「超⽂本传输协议」?

  • 超⽂本
  • 传输
  • 协议

在这里插入图片描述

(1)协议

​ HTTP 是⼀个⽤在计算机世界⾥的协议。它使⽤计算机能够理解的语⾔确⽴了⼀种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理⽅式(⾏为约定和规范)。

(2)传输

​ 所谓的「传输」,很好理解,就是把⼀堆东⻄从 A 点搬到 B 点,或者从 B 点 搬到 A 点。别轻视了这个简单的动作,它⾄少包含两项重要的信息。HTTP 协议是⼀个双向协议

​ 在 HTTP ⾥,需要中间⼈遵从 HTTP 协议,只要不打扰基本的数据传输,就可以添加任意额外的东⻄。

HTTP 是⼀个在计算机世界⾥专⻔⽤来在两点之间传输数据的约定和规范。

(3)超⽂本

​ 「⽂本」,在互联⽹早期的时候只是简单的字符⽂字,但现在「⽂本」的涵义已经可以扩展为图⽚、视频、压缩包等,在 HTTP 眼⾥这些都算作「⽂本」。

​ 「超⽂本」,它就是超越了普通⽂本的⽂本,它是⽂字、图⽚、视频等的混合体,最关键有超链接,能从⼀个超⽂本跳转到另外⼀个超⽂本。

​ HTML 就是最常⻅的超⽂本了,它本身只是纯⽂字⽂件,但内部⽤很多标签定义了图⽚、视频等的链接,再经过浏览器的解释,呈现给我们的就是⼀个⽂字、有画⾯的⽹⻚了。

HTTP 是⼀个在计算机世界⾥专⻔在「两点」之间「传输」⽂字、图⽚、⾳频、视频等「超⽂本」数据的「约定和规范」。

3、那「HTTP 是⽤于从互联⽹服务器传输超⽂本到本地浏览器的协议 ,这种说法正确吗?

​ 这种说法是不正确的。因为也可以是「服务器<–>服务器」,所以采⽤两点之间的描述会更准确。

4、HTTP 常⻅的状态码,有哪些?

在这里插入图片描述

  • 1xx

    1xx 类状态码属于提示信息,是协议处理中的⼀种中间状态,实际⽤到的⽐较少。

  • 2xx

    2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。

    • 「200 OK」是最常⻅的成功状态码,表示⼀切正常。如果是⾮ HEAD 请求,服务器返回的响应头都会有 body数据。
    • 「204 No Content」也是常⻅的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。
    • 「206 Partial Content」是应⽤于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,⽽是其中的⼀部分,也是服务器处理成功的状态。
  • 3xx

    3xx 类状态码表示客户端请求的资源发送了变动,需要客户端⽤新的 URL 重新发送请求获取资源,也就是重定向。

    • 「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改⽤新的 URL 再次访问。
    • 「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要⽤另⼀个 URL 来访问。
    • 「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲⽂件,也称缓存重定向,⽤于缓存控制。
  • 4xx

    4xx 类状态码表示客户端发送的报⽂有误,服务器⽆法处理,也就是错误码的含义。

    • 「400 Bad Request」表示客户端请求的报⽂有错误,但只是个笼统的错误。
    • 「403 Forbidden」表示服务器禁⽌访问资源,并不是客户端的请求出错。
    • 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以⽆法提供给客户端。
  • 5xx

    5xx 类状态码表示客户端请求报⽂正确,但是服务器处理时内部发⽣了错误,属于服务器端的错误码。

    • 「500 Internal Server Error」与 400 类型,是个笼统通⽤的错误码,服务器发⽣了什么错误,我们并不知道。
    • 「501 Not Implemented」表示客户端请求的功能还不⽀持,类似“即将开业,敬请期待”的意思。
    • 「502 Bad Gateway」通常是服务器作为⽹关或代理时返回的错误码,表示服务器⾃身⼯作正常,访问后端服务器发⽣了错误。
    • 「503 Service Unavailable」表示服务器当前很忙,暂时⽆法响应服务器,类似“⽹络服务正忙,请稍后重试”的意思。

5、HTTP常⻅字段有哪些?

  • Host 字段

    客户端发送请求时,⽤来指定服务器的域名。

    有了 Host 字段,就可以将请求发往「同⼀台」服务器上的不同⽹站。

    在这里插入图片描述

  • Content-Length 字段

    服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据⻓度。

    在这里插入图片描述

    如上⾯则是告诉浏览器,本次服务器回应的数据⻓度是 1000 个字节,后⾯的字节就属于下⼀个回应了。

  • Connection字段

    Connection 字段最常⽤于客户端要求服务器使⽤ TCP 持久连接,以便其他请求复⽤。

    在这里插入图片描述

  • Content-Type 字段

    Content-Type 字段⽤于服务器回应时,告诉客户端,本次数据是什么格式。

    在这里插入图片描述

  • Content-Encoding 字段

    Content-Encoding 字段说明数据的压缩⽅法。表示服务器返回的数据使⽤了什么压缩格式。

    在这里插入图片描述

    上⾯表示服务器返回的数据采⽤了 gzip ⽅式压缩,告知客户端需要⽤此⽅式解压。
    客户端在请求时,⽤ Accept-Encoding 字段说明⾃⼰可以接受哪些压缩⽅法。
    Accept-Encoding: gzip, deflate

6、GET 与 POST

(1)GET 与 POST的区别

Get ⽅法的含义是请求从服务器获取资源,这个资源可以是静态的⽂本、⻚⾯、图⽚视频等。

POST ⽅法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报⽂的 body ⾥。

在这里插入图片描述

(2)GET 和 POST ⽅法都是安全和幂等的吗?

安全和幂等的概念:

  • 在 HTTP 协议⾥,所谓的「安全」是指请求⽅法不会「破坏」服务器上的资源。
  • 所谓的「幂等」,意思是多次执⾏相同的操作,结果都是「相同」的。

​ 那么很明显 GET ⽅法就是安全且幂等的,因为它是「只读」操作,⽆论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。
​ POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。

【结论】

GET请求:安全且幂等

POST请求:非安全和幂等

7、HTTP 特性

(1) HTTP(1.1) 的优点有哪些,怎么体现的?

HTTP 最凸出的优点是「简单、灵活和易于扩展、应⽤⼴泛和跨平台」。

  • 简单

    HTTP 基本的报⽂格式就是 header + body ,头部信息也是 key-value 简单⽂本的形式,易于理解,降低了学习和使⽤的⻔槛。

  • 灵活和易于扩展

    HTTP协议⾥的各类请求⽅法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发⼈员⾃定义和扩充。
    同时 HTTP 由于是⼯作在应⽤层( OSI 第七层),则它下层可以随意变化。
    HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层,HTTP/3 甚⾄把 TCP 层换成了基于 UDP 的QUIC。

  • 应⽤⼴泛和跨平台

(2)那它的缺点呢?

​ HTTP 协议⾥有优缺点⼀体的双刃剑,分别是「⽆状态、明⽂传输」,同时还有⼀⼤缺点「不安全」。

  • ⽆状态双刃剑

    • ⽆状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存⽤来对外提供服务。
    • ⽆状态的坏处,既然服务器没有记忆能⼒,它在完成有关联性的操作时会⾮常麻烦。
      例如登录->添加购物⻋->下单->结算->⽀付,这系列操作都要知道⽤户的身份才⾏。但服务器不知道这些请求是有关联的,每次都要问⼀遍身份信息。

    对于⽆状态的问题,解法⽅案有很多种,其中⽐较简单的⽅式⽤ Cookie 技术。

    相当于,在客户端第⼀次请求后,服务器会下发⼀个装有客户信息的「⼩贴纸」,后续客户端请求服务器的时候,带上「⼩贴纸」,服务器就能认得了了,

  • 明⽂传输双刃剑

    明⽂意味着在传输过程中的信息,是可⽅便阅读的,通过浏览器的 F12 控制台或 Wireshark 抓包都可以直接⾁眼查看,为我们调试⼯作带了极⼤的便利性。

  • 不安全

    HTTP ⽐较严重的缺点就是不安全:

    • 通信使⽤明⽂(不加密),内容可能会被窃听。⽐如,账号信息,号没了
    • 不验证通信⽅的身份,因此有可能遭遇伪装。⽐如,访问假的淘宝,钱没了
    • ⽆法证明报⽂的完整性,所以有可能已遭篡改。⽐如,⽹⻚上植⼊垃圾⼴告,眼没了。

    HTTP 的安全问题,可以⽤ HTTPS 的⽅式解决,也就是通过引⼊ SSL/TLS 层,使得在安全上达到了极致。

(3)那你再说下 HTTP/1.1 的性能如何?

HTTP 协议是基于 TCP/IP,并且使⽤了「请求 - 应答」的通信模式,所以性能的关键就在这两点⾥。

  • ⻓连接

    早期 HTTP/1.0 性能上的⼀个很⼤的问题,那就是每发起⼀个请求,都要新建⼀次 TCP 连接(三次握⼿), ⽽且是串⾏请求,做了⽆谓的 TCP 连接建⽴和断开,增加了通信开销。
    为了解决上述 TCP 连接问题,HTTP/1.1 提出了⻓连接的通信⽅式,也叫持久连接。这种⽅式的好处在于减少了TCP 连接的重复建⽴和断开所造成的额外开销,减轻了服务器端的负载。 持久连接的特点是,只要任意⼀端没有明确提出断开连接,则保持 TCP 连接状态。

    在这里插入图片描述

  • 管道⽹络传输

    HTTP/1.1 采⽤了⻓连接的⽅式,这使得管道(pipeline)⽹络传输成为了可能。

    即可在同⼀个 TCP 连接⾥⾯,客户端可以发起多个请求,只要第⼀个请求发出去了,不必等其回来,就可以发第⼆个请求出去,可以减少整体的响应时间。

  • 队头阻塞

    「请求 - 应答」的模式加剧了 HTTP 的性能问题。
    因为当顺序发送的请求序列中的⼀个请求因为某种原因被阻塞时,在后⾯排队的所有请求也⼀同被阻塞了,会招致客户端⼀直请求不到数据,这也就是「队头阻塞」。好⽐上班的路上塞⻋。

8、HTTP 与 HTTPS

(1)HTTP 与 HTTPS 有哪些区别?
  • HTTP 是超⽂本传输协议,信息是明⽂传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP ⽹络层之间加⼊了 SSL/TLS 安全协议,使得报⽂能够加密传输。

  • HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。

  • HTTP 的端⼝号是 80,HTTPS 的端⼝号是 443。

  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

(2)HTTPS 解决了 HTTP 的哪些问题?

HTTP 由于是明⽂传输,所以安全上存在以下三个⻛险:

  • 窃听⻛险,⽐如通信链路上可以获取通信内容,⽤户号容易没。
  • 篡改⻛险,⽐如强制植⼊垃圾⼴告,视觉污染,⽤户眼容易瞎。
  • 冒充⻛险,⽐如冒充淘宝⽹站,⽤户钱容易没。

在这里插入图片描述

HTTPS 在 HTTP 与 TCP 层之间加⼊了 SSL/TLS 协议,可以很好的解决了上述的⻛险:

  • 信息加密:交互信息⽆法被窃取,但你的号会因为「⾃身忘记」账号⽽没。
  • 校验机制:⽆法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾⼴告。
  • 身份证书:证明淘宝是真的淘宝⽹,但你的钱还是会因为「剁⼿」⽽没。
(3)HTTPS 是如何解决上⾯的三个风险的?
  • 混合加密的⽅式实现信息的机密性,解决了窃听的⻛险。
  • 摘要算法的⽅式来实现完整性,它能够为数据⽣成独⼀⽆⼆的「指纹」,指纹⽤于校验数据的完整性,解决了篡改的⻛险。
  • 将服务器公钥放⼊到数字证书中,解决了冒充的⻛险。

参考小林coding所著的《图解网络》进行了相关整理,侵删

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值