计算机网络的那些事儿-4
C++软件与嵌入式软件面经解析大全(蒋豆芽的秋招打怪之旅)
本章讲解知识点
- 1.1 什么是计算机网络
- 1.2 计算机网络的组成
- 1.3 分组交换
- 1.4 计算机网络的类别及性能指标
- 1.5 计算机网络的结构体系
- 1.6 TCP/IP四层模型及常见协议
- 1.7 TCP和UDP的区别
- 1.8 TCP三次握手与四次挥手
- 1.9 TCP可靠机制
- 1.10 socket网络编程
- 1.11 TCP粘包
- 1.12 HTTP协议
- 1.13 GET和POST
- 1.14 HTTP的特点
- 1.15 HTTP1.0、HTTP1.1、HTTP2.0的区别
- 1.16 HTTPS协议
受众:本教程适合于C/C++已经入门的学生或人士,有一定的编程基础。
本教程适合于互联网、嵌入式软件求职的学生或人士。
故事背景
蒋 豆 芽:小名豆芽,芳龄十八,蜀中人氏。卑微小硕一枚,科研领域苟延残喘,研究的是如何炒好一盘豆芽。与大多数人一样,学习道路永无止境,间歇性踌躇满志,持续性混吃等死。会点编程,对了,是面对对象的那种。不知不觉研二到找工作的时候了,同时还在忙论文,豆芽都秃了,不过豆芽也没头发啊。
隔壁老李:大名老李,蒋豆芽的好朋友,技术高手,代码女神。给了蒋豆芽不少的人生指导意见。
导 师:蒋豆芽的老板,研究的课题是每天对豆芽嘘寒问暖。
故事引入
导 师:豆芽,终于把论文投出去了,辛苦了。
蒋 豆 芽:老师也辛苦!(热泪盈眶)
蒋 豆 芽:老李,我终于把论文写完了,天啊,太感动了。
隔壁老李:恭喜啊,豆芽,太好了呀!
蒋 豆 芽:哈哈哈哈!
隔壁老李:可以继续安心找工作了!
蒋 豆 芽:(叹气)还以为是结束,其实才是开始啊!工作好难找啊!
隔壁老李:没事,豆芽,有我陪着你,你还怕啥?
隔壁老李:万里长征才刚开始呢!豆芽,你还要继续加油啊!
蒋 豆 芽:老李!上一节学了TCP/IP模型和实现,我觉得我又行了!
隔壁老李:不要急,豆芽,这才哪到哪?我们再介绍另一个常考的协议——HTTP和HTTPS协议。
1.12 HTTP协议
隔壁老李:协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它详细规定了浏览器和万维网(World Wide Web,WWW)服务器之间相互通信的规则,是因特网传送万维网文档的基础数据传送协议。
蒋 豆 芽:那HTTP的工作原理是什么呢?
隔壁老李:HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是 HTTP 请求/响应的步骤:
客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.baidu.com。发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部(header)和请求数据 (可选)3部分组成。服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源副本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部和响应数据(请求体)3部分组成。处理TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;解析数据,显示Web界面
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,并在浏览器窗口中显示。
隔壁老李:好了,这里就引出一个常见的问题了:在浏览器地址栏键入URL,按下回车之后会经历以下流程?豆芽,你来总结一下吧。
蒋 豆 芽:没问题!
- 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
- 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
- 释放 TCP连接;
- 浏览器解析html代码,并请求html代码中的资源,最后对页面进行渲染呈现给用户。
隔壁老李:没错!perfect!
蒋 豆 芽:老李,刚才提到的URL啊、请求啊、响应啊又是个什么东东?
隔壁老李:好,接下来我们详细讲解。1、HTTP 协议之URL。HTTP URL(Uniform Resource Locator,统一资源定位器) 是一种特殊类型的URI(Uniform Resource Identifier,统一资源标识符),包含了用于查找某个资源的足够的信息。它的格式如下:
http://host[":"port][abs_path] http:表示要通过HTTP协议来定位网络资源 host:表示合法的Internet主机域名或者IP地址 port:指定一个端口号,为空则使用缺省端口80 abs_path:指定请求资源的路径,说明请求服务器上的具体特定资源
例如:
1、输入:www.guet.edu.cn 浏览器自动转换成:http://www.guet.edu.cn/ 2、http:192.168.0.116:8080/index.jsp
URL和URN(Universal Resource Name, 统一资源名称)都是URI的子集,一个标准的URL又包括:protocol、host、port、path。
个人的身份证号就是URN,个人的家庭地址就是URL,URN可以唯一标识一个人,而URL可以告诉邮递员怎么把货送到你手里。URN、URL共同组成了URI
隔壁老李:2、HTTP 协议之请求。http请求由三部分组成,分别是:请求行、消息报头、请求正文。如图:
请求行:
①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。
②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL。
③是协议名称及版本号。
请求头:
④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
与缓存相关的规则信息,均包含在header中
请求体:
⑤是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
1.13 GET和POST
隔壁老李:这里我们要重点补充请求方法,GET和POST是最常见的HTTP方法。
GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,请求行将如下:
GET /form.html HTTP/1.1 (CRLF) //CRLF表示回车和换行
POST方法:要求被请求服务器接受附在请求后面的数据,常用于提交表单。如下:
POST /reg.jsp HTTP/ (CRLF) //请求行 Accept:image/gif,image/x-xbit,... (CRLF) //报文头 ... HOST:www.guet.edu.cn (CRLF) Content-Length:22 (CRLF) Connection:Keep-Alive (CRLF) Cache-Control:no-cache (CRLF) (CRLF) //该CRLF表示消息报头已经结束,在此之前为消息报头 user=jeffrey&pwd=1234 //此行以下为提交的数据
蒋 豆 芽:那这两个方法有什么区别呢?
隔壁老李:所以又引出一个常考面试题了——get、post的区别。
- get将数据放在url后面,post将数据放在报文体
- url长度会受到特定的浏览器及服务器的限制,如IE对URL长度的限制是2083字节(2K+35)。而报文体长度没有限制
- get将数据放在url后面,信息并不安全;post方法将数据放在报文体中,更安全。
蒋 豆 芽:老李,我明白了,你继续!
隔壁老李:3、HTTP 协议之响应。在接收和解释请求消息后,服务器返回一个HTTP响应消息。HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文。
响应行:
①报文协议及版本;
②状态码及状态描述;
响应头:
③响应报文头,也是由多个属性组成;
包含服务器的类型、传输编码、时间和后面数据的格式等信息。
响应体:
④响应报文体,即我们真正要的“干货”
隔壁老李:然后我们补充讲解状态码,也是重点。
状态码 | 意义 | 解释 |
---|---|---|
301 | Permanently Moved | 被请求的资源已永久移动到新位置,新的URL在Location头中给出,浏览器应该自动地访问新的URL。301为永久重定向。 |
302 | Found | 请求的资源现在临时从不同的URL响应请求。302为临时重定向。 |
200 | OK | 表示从客户端发来的请求在服务器端被正确处理 |
304 | Not Modified | 告诉浏览器可以从缓存中获取所请求的资源。 |
400 | bad request | 请求报文存在语法错误 |
403 | forbidden | 表示对请求资源的访问被服务器拒绝 |
404 | not found | 表示在服务器上没有找到请求的资源 |
500 | internal sever |
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> - 本专刊适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专刊适合于互联网C++软件开发、嵌入式软件求职的学生或人士。 - 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构等一系列知识点的讲解,并且最后总结出了高频面试考点(附有答案)共近400道,知识点讲解全面。不仅如此,教程还讲解了简历制作、笔试面试准备、面试技巧等内容。 </p> <p> <br /> </p>