本文章参考了很多文档文献整理成狮子自己喜欢的风格类型文字,主要有:
《图解网络-小林coding》、Github上面的《前端语音社群》,ChatGpt 3.5
大家有兴趣可以去找来看看,一起上岸!!!
目录
- 面试官:什么是HTTP?
- 面试官:说说 HTTP1.0/1.1/2.0 的区别?
- 面试官:说说 HTTP 常见的请求头有哪些? 作用?
- 面试官:说说HTTP 常见的状态码有哪些,适用场景?
- 1xx
- 2xx
- 3xx
- 4xx
- 5xx
- 面试官:HTTP 和 HTTPS 的区别?
- 面试官:HTTPS 解决了 HTTP 的哪些问题?
- 面试官:HTTPS 是如何建⽴连接的?其间交互了什么?
- 面试官:说⼀下 GET 和 POST 的区别?
面试官:什么是HTTP?
主要抓住三方面:超文本 传输 协议
HTTP 协议是⼀个双向协议(两点之间)
eg:
浏览器是请求⽅ A ,百度⽹站就是应答⽅ B。双⽅约定⽤ HTTP 协议来通信,于是浏览器把请求数据发送给⽹站,⽹站再把⼀些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图⽚、视频了。
A——>B
A<——B 两点之间可以有很多个过程,但是这个过程中也得遵循Http协议
答:超文本传输协议。是一个在网络世界里面专门在两点之间传输文字、图片、视频、音频等超文本数据的约定和规范
面试官:说说 HTTP1.0/1.1/2.0 的区别?
答:
Http协议是基于TCP/IP协议的形式,
Http/1.0: 采用的是短连接并且是串行请求,这样客户端每次发送一个请求就需要建立一次TCP连接(三次握手),并且串行请求会进行很多无谓的TCP连接和断开,这样就造成了很大的通信负担。
Http/1.1:为了改善上述问题,Http/1.1采用了长连接的通信方式,也叫持久连接,即TCP连接默认不关闭,可以被多个请求复用,这样就有效减少了TCP的重复连接与断开造成的额外负担。
Http/2.0:相比于前两个版本,Http/2.0性能上进行了很大的提升。
首先,采用二进制格式而非文本格式,解析起来更高效;
其次它采用完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行;
还能进行服务器推送,允许服务端推送资源给客户端
面试官:说说 HTTP 常见的请求头有哪些? 作用?
HTTP头字段(HTTP header fields),是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分它们定义了一个超文本传输协议事务中的操作参数。
字段名 | 说明 | 示例 |
---|---|---|
Accept | 能够接受的回应内容类型(Content-Types) | Accept: text/plain |
Accept-Charset | 能够接受的字符集 | Accept-Charset: utf-8 |
Accept-Language | 能够接受的回应内容的自然语言列表 | Accept-Language: en-US |
Cache-Control | 用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令 | Cache-Control: no-cache |
Connection | 该浏览器想要优先使用的连接类型 | Connection: keep-alive Connection: Upgrade |
Cookie | 服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议Cookie | Cookie: $Version=1; Skin=new; |
Content-Length | 以 八位字节数组 (8位的字节)表示的请求体的长度 | Content-Length: 348 |
Content-Type | 请求体的 多媒体类型 | Content-Type: application/x-www-form-urlencoded |
Host | 服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号 | Host: en.wikipedia.org:80 Host: en.wikipedia.org |
面试官:说说HTTP 常见的状态码有哪些,适用场景?
1xx
代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束
常见的有:
- 100(客户端继续发送请求,这是临时响应):这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应
- 101:服务器根据客户端的请求切换协议,主要用于websocket或http2升级
2xx
代表请求已成功被服务器接收、理解、并接受
常见的有:
- 200(成功):请求已成功,请求所希望的响应头或数据体将随此响应返回
- 201(已创建):请求成功并且服务器创建了新的资源
- 202(已创建):服务器已经接收请求,但尚未处理
- 203(非授权信息):服务器已成功处理请求,但返回的信息可能来自另一来源
- 204(无内容):服务器成功处理请求,但没有返回任何内容
- 205(重置内容):服务器成功处理请求,但没有返回任何内容
- 206(部分内容):服务器成功处理了部分请求
3xx
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向
常见的有:
- 300(多种选择):针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择
- 301(永久移动):请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置
- 302(临时移动): 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
- 303(查看其他位置):请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码
- 305 (使用代理): 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理
- 307 (临时重定向): 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
4xx
代表了客户端看起来可能发生了错误,妨碍了服务器的处理
常见的有:
- 400(错误请求): 服务器不理解请求的语法
- 401(未授权): 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
- 403(禁止): 服务器拒绝请求
- 404(未找到): 服务器找不到请求的网页
- 405(方法禁用): 禁用请求中指定的方法
- 406(不接受): 无法使用请求的内容特性响应请求的网页
- 407(需要代理授权): 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理
- 408(请求超时): 服务器等候请求时发生超时
5xx
表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生
常见的有:
- 500(服务器内部错误):服务器遇到错误,无法完成请求
- 501(尚未实施):服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码
- 502(错误网关): 服务器作为网关或代理,从上游服务器收到无效响应
- 503(服务不可用): 服务器目前无法使用(由于超载或停机维护)
- 504(网关超时): 服务器作为网关或代理,但是没有及时从上游服务器收到请求
- 505(HTTP 版本不受支持): 服务器不支持请求中所用的 HTTP 协议版本
面试官:HTTP 和 HTTPS 的区别?
Https协议 = Http协议 + SSL/TLS 安全协议
- 因为Http协议传输的超文本信息是明文传输,存在安全风险问题;Https则解决了Http不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。
- 交互方式不同,HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
- 端口号不同,Http默认端口号为80,而Https默认端口号为443。
- Https协议需要向CA申请数字证书,来保证服务器的身份是可信的。
面试官:HTTPS 解决了 HTTP 的哪些问题?
-
窃听⻛险,Http协议仅支持明文传输,所有信息都暴露在大众眼球,信息很容易被窃听,⽐如通信链路上可以获取通信内容,⽤户号容易没。
-
篡改⻛险,⽐如强制植⼊垃圾⼴告,视觉污染
-
冒充⻛险,⽐如冒充淘宝⽹站,⽤户钱容易没。
对应解决方案:
-
信息加密:交互信息⽆法被窃取。
-
校验机制:⽆法篡改通信内容,篡改了就不能正常显示。
-
身份证书:证明淘宝是真的淘宝⽹。
面试官:HTTPS 是如何建⽴连接的?其间交互了什么?
- 客户端向服务端发送连接请求,包括支持的加密算法、协议版本等信息。
- 服务端回应客户端请求,确认使用的加密算法、协议版本等信息。
- 服务端将自己的公钥证书发送给客户端,客户端验证证书的合法性,并提取出服务端的公钥。
- 客户端生成随机数,使用服务端的公钥对该随机数进行加密,然后将加密后的随机数发送给服务端。
- 服务端使用自己的私钥对加密后的随机数进行解密,得到客户端随机数,然后生成一个新的随机数作为会话密钥。
- 客户端和服务端分别使用会话密钥加密和解密数据,确保通信过程中数据的安全性和完整性。
面试官:说⼀下 GET 和 POST 的区别?
Get
⽅法的含义是请求从服务器获取资源,这个资源可以是静态的⽂本、⻚⾯、图⽚视频等
eg: 你打开我的⽂章,浏览器就会发送 GET 请求给服务器,服务器就会返回⽂章的所有⽂字及资源。
POST
⽅法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报⽂的 body ⾥。
eg: 你在我⽂章底部,敲⼊了留⾔后点击「提交」(暗示你们留⾔),浏览器就会执⾏⼀次 POST 请求,把你的留⾔⽂字放进了报⽂ body ⾥,然后拼接好 POST 请求头,通过 TCP 协议发送给服务器。
tips:安全和幂等性的概念
在 HTTP 协议⾥,所谓的安全是指请求⽅法不会「破坏」服务器上的资源。
所谓的「幂等」,意思是多次执⾏相同的操作,结果都是「相同」的。
那么很明显 GET ⽅法就是安全且幂等的,因为它是「只读」操作,⽆论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。
POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。