网络学习笔记-从入门到精通

举报
资源描述
硬核!30张图解 HTTP 常见面试题 前言 在面试过程中,HTTP 被提问的概率还是比较高的。小林我搜集了 5 大类 HTTP 面试常问的题目,同时这 5 大类题跟 HTTP 的发展和演变关联性是比较大的,通过问答+图解的形式由浅入深的方式帮助大家进一步的学习和理解 HTTP。1.HTTP 基本概念2.Get 与 Post3.HTTP 特性4.HTTPS 与 HTTP5.HTTP/1.1、HTTP/2、HTTP/3 演变正文 01 HTTP 基本概念 HTTP 是什么?描述一下HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。能否详细解释超文本传输协议?HTTP的名字超文本协议传输,它可以拆成三个部分:超文本传输协议1.协议在生活中,我们也能随处可见协议,例如:刚毕业时会签一个三方协议;找房子时会签一个租房协议;生活中的协议,本质上与计算机中的协议是相同的,协议的特点:协字,代表的意思是必须有两个以上的参与者。例如三方协议里的参与者有三个:你、公司、学校三个;租房协议里的参与者有两个:你和房东。议字,代表的意思是对参与者的一种行为约定和规范。例如三方协议里规定试用期期限、毁约金等;租房协议里规定租期期限、每月租金金额、违约如何处理等。针对 HTTP 协议,我们可以这么理解。HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。2.传输所谓的传输,很好理解,就是把一堆东西从 A 点搬到 B 点,或者从 B 点 搬到 A 点。别轻视了这个简单的动作,它至少包含两项重要的信息。HTTP 协议是一个双向协议。我们在上网冲浪时,浏览器是请求方 A,百度网站就是应答方 B。双方约定用 HTTP 协议来通信,于是浏览器把请求数据发送给网站,网站再把一些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图片、视频了。数据虽然是在 A 和 B 之间传输,但允许中间有中转或接力。就好像第一排的同学想传递纸条给最后一排的同学,那么传递的过程中就需要经过好多个同学(中间人),这样的传输方式就从A B,变成了A N M B。而在 HTTP 里,需要中间人遵从 HTTP 协议,只要不打扰基本的数据传输,就可以添加任意额外的东西。针对传输,我们可以进一步理解了 HTTP。HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。3.超文本HTTP 传输的内容是超文本。我们先来理解文本,在互联网早期的时候只是简单的字符文字,但现在文本的涵义已经可以扩展为图片、视频、压缩包等,在 HTTP 眼里这些都算作文本。再来理解超文本,它就是超越了普通文本的文本,它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,再经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。OK,经过了对 HTTP 里这三个名词的详细解释,就可以给出比超文本传输协议这七个字更准确更有技术含量的答案:HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。那HTTP 是用于从互联网服务器传输超文本到本地浏览器的协议,这种说法正确吗?这种说法是不正确的。因为也可以是服务器服务器,所以采用两点之间的描述会更准确。HTTP 常见的状态码,有哪些?1xx1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。2xx2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。200 OK是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。204 No Content也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。206 Partial Content是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。3xx3xx 类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。301 Moved Permanently表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。302 Found表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的URL。304 Not Modified不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,用于缓存控制。4xx4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。400 Bad Request表示客户端请求的报文有错误,但只是个笼统的错误。403 Forbidden表示服务器禁止访问资源,并不是客户端的请求出错。404 Not Found表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。5xx5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。500 Internal Server Error与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。501 Not Implemented表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。502 Bad Gateway通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。503 Service Unavailable表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后重试”的意思。http 常见字段有哪些?Host 字段客户端发送请求时,用来指定服务器的域名。有了 Host 字段,就可以将请求发往同一台服务器上的不同网站。Content-Length 字段服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。Host:www.A.com如上面则是告诉浏览器,本次服务器回应的数据长度是 1000 个字节,后面的字节就属于下一个回应了。Connection 字段Connection 字段最常用于客户端要求服务器使用 TCP 持久连接,以便其他请求复用。HTTP/1.1 版本的默认连接都是持久连接,但为了兼容老版本的 HTTP,需要指定 Connection 首部字段的值为 Keep-Alive。一个可以复用的 TCP 连接就建立了,直到客户端或服务器主动关闭连接。但是,这不是标准字段。Content-Type 字段Content-Type 字段用于服务器回应时,告诉客户端,本次数据是什么格式。Content-Length:1000Connection:keep-aliveContent-Type:text/html;charset=utf-8上面的类型表明,发送的是网页,而且编码是UTF-8。客户端请求的时候,可以使用 Accept 字段声明自己可以接受哪些数据格式。上面代码中,客户端声明自己可以接受任何格式的数据。Content-Encoding 字段Content-Encoding 字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式上面表示服务器返回的数据采用了 gzip 方式压缩,告知客户端需要用此方式解压。客户端在请求时,用 Accept-Encoding 字段说明自己可以接受哪些压缩方法。02 GET 与 POST 说一下 GET 和 POST 的区别?Get 方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等。比如,你打开我的文章,浏览器就会发送 GET 请求给服务器,服务器就会返回文章的所有文字及资源。Accept:*/*Content-Encoding:gzipAccept-Encoding:gzip,deflate而POST 方法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报文的 body 里。比如,你在我文章底部,敲入了留言后点击提交(暗示你们留言),浏览器就会执行一次 POST 请求,把你的留言文字放进了报文 body 里,然后拼接好 POST 请求头,通过 TCP 协议发送给服务器。GET 和 POST 方法都是安全和幂等的吗?先说明下安全和幂等的概念:在 HTTP 协议里,所谓的安全是指请求方法不会破坏服务器上的资源。所谓的幂等,意思是多次执行相同的操作,结果都是相同的。那么很明显 GET 方法就是安全且幂等的,因为它是只读操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。POST 因为是新增或提交数据的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。03 HTTP 特性 你知道的 HTTP(1.1)的优点有哪些,怎么体现的?HTTP 最凸出的优点是简单、灵活和易于扩展、应用广泛和跨平台。1.简单HTTP 基本的报文格式就是 header+body,头部信息也是 key-value 简单文本的形式,易于理解,降低了学习和使用的门槛。2.灵活和易于扩展HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。同时 HTTP 由于是工作在应用层(OSI 第七层),则它下层可以随意变化。HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层,HTTP/3 甚至把 TCP 层换成了基于 UDP 的 QUIC。3.应用广泛和跨平台互联网发展至今,HTTP 的应用范围非常的广泛,从台式机的浏览器到手机上的各种 APP,从看新闻、刷贴吧到购物、理财、吃鸡,HTTP 的应用片地开花,同时天然具有跨平台的优越性。那它的缺点呢?HTTP 协议里有优缺点一体的双刃剑,分别是无状态、明文传输,同时还有一大缺点不安全。1.无状态双刃剑无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。无状态的坏处,既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。例如登录-添加购物车-下单-结算-支付,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要问一遍身份信息。这样每操作一次,都要验证信息,这样的购物体验还能愉快吗?别问,问就是酸爽!对于无状态的问题,解法方案有很多种,其中比较简单的方式用 Cookie 技术。Cookie 通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。相当于,在客户端第一次请求后,服务器会下发一个装有客户信息的小贴纸,后续客户端请求服务器的时候,带上小贴纸,服务器就能认得了了,2.明文传输双刃剑明文意味着在传输过程中的信息,是可方便阅读的,通过浏览器的 F12 控制台或 Wireshark 抓包都可以直接肉眼查看,为我们调试工作带了极大的便利性。但是这正是这样,HTTP 的所有信息都暴露在了光天化日下,相当于信息。在传输的漫长的过程中,信息的内容都毫无隐私可言,很容易就能被窃取,如果里面有你的账号密码信息,那你号没了。3.不安全HTTP 比较严重的缺点就是不安全:通信使用明文(不加密),内容可能会被窃听。比如,账号信息容易泄漏,那你号没了。不验证通信方的身份,因此有可能遭遇伪装。比如,访问假的淘宝、拼多多,那你钱没了。无法证明报文的完整性,所以有可能已遭篡改。比如,网页上植入垃圾广告,视觉污染,眼没了。HTTP 的安全问题,可以用 HTTPS 的方式解决,也就是通过引入 SSL/TLS 层,使
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号