1、什么是协议?什么是HTTP协议?HTTP协议具有什么特性?
协议是计算机之间通过网络实现通信时事先达成的一种“约定”;HTTP协议(超文本传输协议)是客户端与服务器进行请求和应答的规则,它基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。特性:
无 连 接 : \color{#FF3030}{无连接:} 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
媒 体 独 立 : \color{#FF3030}{媒体独立:} 媒体独立:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
无 状 态 : \color{#FF3030}{无状态:} 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快
2、使用浏览器上网的大致过程: 用户输入域名( 如:www.baidu.com ),浏览器首先在 C:\Windows\System32\drivers\etc\hosts 进行查找,看有没有此域名以及对应IP地址,若有则使用IP地址,若没有则通过DNS服务器进行域名转换为IP地址,然后通过IP地址访问服务器获取想要的资源。一次完整的HTTP事务流程:
(1)域名解析后经过三次握手与web服务器建立连接
(2)发起http请求
(3)服务器响应http请求
(4)断开TCP连接
(5)浏览器解析HTML代码并渲染页面。
数 据 封 装 : \color{#FF3030}{数据封装:} 数据封装:在应用层数据发送到物理网络之前,将沿着协议栈从上往下依次传递,每一层都是在上层的基础上加上自己的头部(尾部)信息,实现该层功能。
整 个 流 程 : \color{#FF3030}{整个流程:} 整个流程:
3、OSI只是参考模型,实际应用的是TCP/IP模型(TCP/IP协议是协议群的统称,包含所有协议):
用户感知最强的是应用层,自上而下每一层都依赖于其下面一层,越往上越靠近用户越往下越接近硬件。
① 应 用 层 : \color{#FF3030}{①应用层:} ①应用层: 应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
② 传 输 层 : \color{#FF3030}{②传输层:} ②传输层: 在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等。如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。(封装生成数据包)
③ 网 络 层 : \color{#FF3030}{③网络层:} ③网络层: 负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。
④ 网 络 接 口 层 : \color{#FF3030}{④网络接口层:} ④网络接口层: 接收IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。
每 一 层 的 主 要 协 议 : \color{#FF3030}{每一层的主要协议:} 每一层的主要协议:
应用层:HTTP、FTP、TELNET、SMTP、DNS等
传输层:TCP、UDP
网络层:IP、ICMP、ARP、RARP等
网络接口层:各种物理通信网络接口
4、TCP协议与UDP协议
T C P 协 议 \color{#FF3030}{TCP协议} TCP协议(Transmission Control Protocol,传输控制协议):TCP协议是传输层的协议,为应用层提供可靠的、面向连接的、基于字节流的服务。
面向连接意味着:在正式发送数据之前,需要在收发主机之间建立一条可靠的连接线路(三次握手四次挥手)。将应用层的数据流分割成报文段并发送给目标节点的TCP层。数据包都有序号,对方收到则发送ack确认,未收到则重传。
U D P 协 议 \color{#FF3030}{UDP协议} UDP协议(User Control Transmission Protocol,用户数据报协议):为应用层提供不可靠、无连接、基于数据报的服务。
这种类型不要求建立和断开连接,发送端可任何时候发送数据,接收端也不知道自己何时从哪里接受数据(只管收发数据,不管对方是否收到以及收到数据的质量)。UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境,如直播、电视、游戏等。相比TCP更加快速。
5、TCP三次握手与四次挥手
见:https://blog.csdn.net/Jqy_111/article/details/106598981
【一些小知识】
1 ) 、 U R I 与 U R L 的 区 别 : \color{#FF3030}{1)、URI与URL的区别:} 1)、URI与URL的区别:
HTTP使用URI(Uniform Resource Identifiers,统一资源标识符)来传输数据和建立连接,URI用来在互联网上唯一标识一个资源。
URI一般由三部组成:①访问资源的命名机制 ②存放资源的主机名 ③资源自身的名称,由路径表示,着重强调于资源。
URL(Uniform Resource Locator,统一资源定位符),是互联网上用来标识某一处资源的地址。也就是说URI可以标识某一互联网资源,而URL则可以表示该资源在互联网上的位置。URL是URI的子集。
URL一般由三部组成:①协议 ②存有该资源的主机IP地址(有时也包括端口号) ③主机资源的具体地址,如目录和文件名等,以及是否带参数。
2 ) 、 U R L 的 具 体 组 成 : \color{#FF3030}{2)、URL的具体组成:} 2)、URL的具体组成:
例:http://www.baidu.com:8080/news/index.js?id=123#name
3 ) 、 网 卡 : \color{#FF3030}{3)、网卡:} 3)、网卡:全称网络接口卡,也称为网络适配器、网卡、LAN卡
4 ) 、 安 全 : \color{#FF3030}{4)、安全:} 4)、安全:HTTP协议本身不存在安全问题,但是应用HTTP协议的服务器与客户端可能受到攻击。
5 ) 、 I P 地 址 : \color{#FF3030}{5)、IP地址:} 5)、IP地址:其实是网络节点,同一网络(如同一局域网)ip地址必须唯一。
6 ) 、 H T T P 状 态 码 : \color{#FF3030}{6)、HTTP状态码:} 6)、HTTP状态码:
状态码 描述
1xx 提示信息—服务器收到信息,需要请求者继续执行操作
2xx 成功—操作被成功接收并处理
3xx 重定向—需要进一步的操作以完成请求
4xx 客户端错误—请求包含语法错误或者无法完成请求
5xx 服务器错误—服务器在处理请求的过程中发生了错误
一些常用状态码:
200:成功
301:永久重定向
302:临时重定向
404:网页不存在
500:服务器挂了
503:稍后再来
7 ) 、 w e b 服 务 器 与 应 用 服 务 器 : \color{#FF3030}{7)、web服务器与应用服务器:} 7)、web服务器与应用服务器:
web服务器(Apache(用于linux windows mac)、IIS(用于windows)、NGINX(linux unix)):通常用于静态网页访问
应用服务器(node.js):用于动态网页访问
一个项目一般是web服务器与应用服务器一起使用。
8 ) 、 \color{#FF3030}{8)、} 8)、在浏览器输入一个网址,会首先根据网址请求其对应HTML文件,解析HTML文件时会根据文件中引用的图片、css、js等分别进行请求,所以总共对服务器请求的次数取决于html的链接数。
9 ) 、 H T T P 缓 存 : \color{#FF3030}{9)、HTTP缓存:} 9)、HTTP缓存:
由服务器响应头决定要不要将请求的东西缓存
10 ) 、 请 求 方 法 : \color{#FF3030}{10)、请求方法:} 10)、请求方法:
GET:请求资源。
POST:提交资源。资源被包含在请求体中。
PUT:替换修改资源(需要上传文件),但由于HTTP1.1的PUT方法自身不带验证机制,谁都可以上传文件,存在安全问题。
HEAD:获取响应头(报文首部),和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的时间等。
DELETE:删除资源,与PUT效果相反。其也存在与PUT一样的问题–不带验证机制,所以几乎不用。
OPTIONS:询问服务器支持的请求的方法。
TRACE:回显服务器收到的请求,用于测试或诊断。
CONNECT:要求用隧道协议连接代理。
PATCH: 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
11 ) 、 s o c k e t 套 接 字 : \color{#FF3030}{11)、socket套接字:} 11)、socket套接字:
大致理解,假如有好多客户端连接同一服务器请求数据,服务器依赖socket为不同客户端发送不同数据。
12 ) 、 \color{#FF3030}{12)、} 12)、IPv4地址:32位,以点分十进制表示,如:127.0.0.1
IPv6地址:128位,用 冒号: 隔开的8个16位的无符号整数表示,每个整数由4个16进制位表示。如:1234:2233:3d3d:4f4f:12af:2233:3d3d:4f4f
13 ) 、 D N S : 域 名 解 析 服 务 器 \color{#FF3030}{13)、DNS:域名解析服务器} 13)、DNS:域名解析服务器
域名和 IP地址 是一一对应的,域名方便用户记忆,IP地址用于计算机识别。DNS的作用:进行域名和IP地址的相互转换。
14 ) 、 \color{#FF3030}{14)、} 14)、FTP(文件传输协议):控制文件的双向传输
15 ) 、 H T T P S 与 H T T P 的 一 些 区 别 \color{#FF3030}{15)、HTTPS与HTTP的一些区别} 15)、HTTPS与HTTP的一些区别
HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
HTTP —> TCP
HTTPS —> SSL/TLS —> TCP
16 ) 、 H T T P 1.0 和 H T T P 1.1 的 区 别 \color{#FF3030}{16)、HTTP1.0 和 HTTP1.1的区别} 16)、HTTP1.0和HTTP1.1的区别
①HTTP1.0
HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开销。
在HTTP/1.0中这个TCP连接是在http请求创建的时候同步创建的,http请求发送到服务器端,服务器端响应了之后,这个TCP连接就关闭了;HTTP/1.1中可以以某种方式声明这个连接一直保持,一个请求传输完之后,另一个请求可以接着传输。这样的好处是:在创建一个TCP连接的过程中需要“三次握手”的消耗,“三次握手”代表有三次网络传输。如果TCP连接保持,第二个请求发送就没有这“三次握手”的消耗。
17 ) 、 请 求 头 与 响 应 头 详 解 \color{#FF3030}{17)、请求头与响应头详解} 17)、请求头与响应头详解
①客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
请求行:用来说明请求类型,要访问的资源以及所使用的HTTP版本。
请求头:用来说明服务器要使用的附加信息。
空行:请求头部后面的空行是必须的,用于隔开请求头与请求体。
请求体:要携带的参数或数据。
②服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。也包含四个部分:
状态行:由HTTP协议版本号,状态码和状态消息三部分组成。
响应头:用来说明客户端要使用的一些附加信息。
空行:必须,用于隔开响应头与响应体。
响应体:返回的数据。
18 ) 、 P O S T 请 求 与 G E T 请 求 辨 析 \color{#FF3030}{18)、POST请求与GET请求辨析} 18)、POST请求与GET请求辨析
POST请求:
GET请求:
POST与GET的使用选择:
参考:https://www.cnblogs.com/ranyonsue/p/5984001.html
还有部分内容参考于动力节点讲课视频,以及菜鸟教程HTTP部分教程。
http相关面试题见:web前端http面试题小结