《我要进大厂》- 计算机网络夺命连环15问,你能坚持到第几问?(HTTP | HTTPS | HTTP演变)(上)

简介: 《我要进大厂》- 计算机网络夺命连环15问,你能坚持到第几问?(HTTP | HTTPS | HTTP演变)

一、HTTP 基本概念


1.1 HTTP 是什么?描述一下


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


HTTP 是一个在计算机世界里专⻔在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」


1.2 HTTP 常⻅的状态码,有哪些?(了解)

fd9172086114210b9c95c77e7ff8c6ef.png


1xx


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

2xx


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


「200 OK」 是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应报文都会有 响应体数据。

「204 No Content」 也是常见的成功状态码,与 200 OK 基本相同,但响应报文没有 响应体数据。

「206 Partial Content」 是应用于 HTTP 分块下载或断点续传,表示响应返回的 响应体 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。

3xx


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


==「301 Moved Permanently」==表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

==「302 Found」==表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。

「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,用于缓存控制。

注意: 301 和 302 都会在响应头里使用字段 Location ,指明后续要跳转的 URL,浏览器会自动重定向新的URL。


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」 表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后重试”的意思。


1.3 http 常⻅字段有哪些?列举一些


Host 字段:客户端发送请求时,用来指定服务器的域名。


c86e1df974be599a69522a731b20fd9b.png


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


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


d748b90353ee3fbeabe7285410fd7902.png


Connection:常用于客户端要求服务器使用 TCP 持久连接,以便其他请求复用


d10ed5eb97d8706b9317812c9bf22386.png



Content-Encoding:说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式


ea7eb195c5793064c4410de3f9b59e6e.png


注:上面表示服务器返回的数据采用了 gzip 方式压缩,告知客户端需要用此方式解压。客户端在请求时,用 Accept-Encoding 字段说明自己可以接受哪些压缩方法。


常见的压缩类型有:gzip,deflate,br…


43a697a9d9744e75a68720ab54fa2cfc.jpg



二、GET 与 POST


2.1 说一下 GET 和 POST 的区别?


Get 方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、⻚面、图片视频等


POST 方法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报文的 请求体里。


2.2 GET 和 POST 方法都是安全和幂等的吗?


安全和幂等的概念:


在 HTTP 协议里,所谓的 「安全」 是指请求方法不会 「破坏」 服务器上的资源。

所谓的 「幂等」,意思是多次执行相同的操作,结果都是 「相同」 的

很明显 GET 方法就是安全且幂等的,因为它是 「只读」 操作,无论操作多少次,服务器上的数据都是安全

的,且每次的结果都是相同的。


POST 是 「新增或提交数据」 的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多

个资源,所以不是幂等的。


43a697a9d9744e75a68720ab54fa2cfc.jpg


三、HTTP 特性


3.1 你知道的 HTTP(1.1) 的优点有哪些,怎么体现的?


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


简单


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


灵活和易于扩展


HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。


应用广泛和跨平台


HTTP 的应用范围非常的广泛,从台式机的浏览器到手机上的各种 APP,从看新闻、刷贴吧到购物、理财、吃鸡,HTTP 的应用片地开花,同时天然具有跨平台的优越性。


3.2 说一下HTTP的缺点吧


HTTP 协议里有优缺点一体的双刃剑,分别是 「无状态、明文传输」,同时还有一大缺点 「不安全」。


无状态双刃剑

好处: 因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的

负担,能够把更多的 CPU 和内存用来对外提供服务。


坏处: 既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。


例如登录->添加购物⻋->下单->结算->支付,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要问一遍身份信息。


对于无状态的问题,解法方案有很多种,其中比较简单的方式用 Cookie 技术。(Cookie 通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态)


明文传输双刃剑

明文意味着在传输过程中的信息,是可方便阅读的。对于开发人员来说,可以通过F12或者一些抓包工具肉眼查看,方便我们的调试。


但是这正是这样,HTTP 的所有信息都暴露在了光天化日下,相当于信息裸奔。在传输的漫长的过程中,信息的内容都毫无隐私可言,很容易就能被窃取。


不安全

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


通信使用明文(不加密),内容可能会被窃听。比如,账号信息容易泄漏,那你号没了

不验证通信方的身份,因此有可能遭遇伪装。比如,访问假的淘宝、拼多多,那你钱没了。

无法证明报文的完整性,所以有可能已遭篡改。比如,网⻚上植入垃圾广告,视觉污染,眼没了

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


3.3 那你再说下 HTTP/1.1 的性能如何?


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


1.长连接


早期 HTTP/1.0 性能上的一个很大的问题,那就是每发起一个请求,都要新建一次 TCP 连接(三次握手),而且是串行请求,做了无谓的 TCP 连接建立和断开,增加了通信开销。


为了解决上述 TCP 连接问题,HTTP/1.1 提出了⻓连接的通信方式,也叫持久连接。建立一次连接后可以发送多个请求。这种方式的好处在于减少了TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。


持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。


279a47f52e4d37cf0b6e3f139e2a001c.png


管道网络传输

H


TTP/1.1 采用了⻓连接的方式,这使得管道(pipeline)网络传输成为了可能。


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


举例来说,客户端需要请求两个资源。以前的做法是,在同一个TCP连接里面,先发送 A 请求,然后等待服务器做出回应,收到后再发出 B 请求。管道机制则是允许浏览器同时发出 A 请求和 B 请求。


905cee5fcbfb7b24b07095b5920aa63a.png


但是服务器还是按照顺序进行回应,先回应 A 请求,完成后再回应 B 请求。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为 「队头堵塞」 。


队头阻塞

当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一同被阻塞了,会招致

客户端一直请求不到数据,这也就是 「队头阻塞」。好比上班的路上塞⻋。


4382b131d38b4a2a7f4c169d1075500f.png


总之 HTTP/1.1 的性能一般般,后续的 HTTP/2 和 HTTP/3 就是在优化 HTTP 的性能。


相关文章
|
5月前
|
存储 网络协议 算法
从HPACK到多路复用,揭秘HTTP/2如何终结网络拥堵
HTTP/2通过HPACK压缩头部冗余信息,提升传输效率;并利用多路复用技术,在单个TCP连接上并行处理多个请求,避免队头阻塞,显著提升性能。同时支持服务器推送和流优先级设置,优化资源加载体验。
325 7
|
8月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
428 61
|
8月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
9月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
250 18
|
9月前
|
JSON 安全 网络协议
HTTP/HTTPS协议(请求响应模型、状态码)
本文简要介绍了HTTP与HTTPS协议的基础知识。HTTP是一种无状态的超文本传输协议,基于TCP/IP,常用80端口,通过请求-响应模型实现客户端与服务器间的通信;HTTPS为HTTP的安全版本,基于SSL/TLS加密技术,使用443端口,确保数据传输的安全性。文中还详细描述了HTTP请求方法(如GET、POST)、请求与响应头字段、状态码分类及意义,并对比了两者在请求-响应模型中的安全性差异。
863 20
|
9月前
|
安全 网络协议 算法
HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析
本文系统探讨了构建企业级双协议隧道代理系统的挑战与实现。首先对比HTTP/HTTPS和SOCKS5协议特性,分析其在工作模型、连接管理和加密方式上的差异。接着提出兼容性架构设计,包括双协议接入层与统一隧道内核,通过协议识别模块和分层设计实现高效转换。关键技术部分深入解析协议转换引擎、连接管理策略及加密传输方案,并从性能优化、安全增强到典型应用场景全面展开。最后指出未来发展趋势将更高效、安全与智能。
371 1
|
10月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
292 22
|
10月前
|
安全 网络安全 数据安全/隐私保护
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
531 3
|
10月前
|
网络安全
网络问题解析:如何解决CondaHTTPError HTTP 000 CONNECTION FAILED错误。
以上就是斯诺普为你准备的解决Conda出现HTTP连接错误的手术室。希望这辆小车可以顺利驶出棘手的泥潭,再次在自由的大路上疾驰。一切的尝试和努力,只为更好的探索与开发。
398 17
|
网络协议 安全 网络安全
HTTP与HTTPS协议入门
HTTP协议是互联网的基石,HTTPS则是其安全版本。HTTP基于TCP/IP协议,属于应用层协议,不涉及数据包传输细节,主要规定客户端与服务器的通信格式,默认端口为80。
533 25
HTTP与HTTPS协议入门

热门文章

最新文章