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
- 协议:该URL的协议为 http: , // 为分隔符。
- 域名:该URL的域名部分为 www.baidu.com ,一个URL中,也可以使用IP地址作为域名使用。
- 端口部分:该URL的端口为8080,域名和端口之间使用 : 作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口。
- 虚拟目录:从域名后的第一个 / 开始到最后一个 / 为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是 /news/ 。
- 文件名部分:从域名后的最后一个 / 开始到 ? 为止,是文件名部分,如果没有 ? ,则是从域名后的最后一个 / 开始到 # 为止,如果没有 ? 和 # ,那么从域名后的最后一个 / 开始到结束,都是文件名部分。本例中的文件名是 index.js 。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
- -参数部分:从 ? 到 # 之间的部分为参数部分。本例中的参数部分为 id=123 。允许有多个参数,参数与参数之间用 & 作为分隔符。
- 锚部分:从 # 开始到最后,都是锚部分。本例中的锚部分是 name 。锚部分也不是一个URL必须的部分。
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
- HTTP1.0的连接属于非持久连接,一次TCP连接只能进行一次请求与响应。
- 客户端只有在收到服务器端关于自己上一次请求的响应之后才能进行下一次请求。
- HTTP1.0不支持对虚拟主机的访问,因为其没有HOST请求头属性。浏览器会将用户发出的域名直接通过DNS转换为IP后发送到服务器。
- HTTP1.0在客户端收到服务器响应后马上发送关闭TCP连接的请求,服务端收到请求后关闭连接。
②HTTP1.1 - HTTP1.1 支持持久连接,一次TCP连接可以进行多次请求与响应。
- 客户端不用等待服务器端的响应就可以进行下一次请求。
- HTTP1.1 支持对虚拟主机的访问,其有HOST请求头属性,用于记录所要访问的虚拟域名。
- HTTP1.1在客户端收到最后一次请求的响应后马上发送关闭TCP连接的请求,服务端收到请求后关闭连接。
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面试题小结