We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
严格来说,URI并不等于网址,在HTTP的世界里,URL才代表网址。但因为URL是在太普及了,所以常常把这两者简单视为相等。
URI本质上是一个字符串,作用是唯一的标记资源的位置和地址。
URI由四部分组成,分别是:
由于在URI里只能使用ASCII码,如果想要在URI里使用英语以外的语言,或者有某些特殊的URI在path,query里使用“@&?”等起界定符作用的字符,那么必定会导致URI解析出错,这时该怎么办呢?
所以URI引入了编码机制,对于ASCII码以外的字符集和特殊字符,会将它们转换为与URI语义不冲突的形式。
转义的规则很简单粗暴,直接把非ASCII码或特殊字符转换成十六进制字节值,然后前面再加上一个“%”。
encodeURI和encodeURIComponent都是对URI的编码,唯一区别就是编码的字符范围了。
IP协议的职责是“网际互联”,它位于MAC层之上,使用IP地址将MAC编号转换为了4组数字。
只要每个小网络在IP地址这个概念上达成一致,不管它在MAC层有多大差异,都能接入TCP/IP协议栈,最终汇入互联网中。
随着接入互联网的设备越来越多,IP地址对人不友好的问题也随之暴露,主要是难以记忆。
DNS域名系统就是为了解决这个问题而生,它是对IP地址的一层抽象,将数字形式的IP地址转换为更有意义,更好记忆的字符串。
域名是一个有层次的结构,是一串用“.”分隔的多个单词,最右边的被称为顶级域名,紧接着的就是二级域名。层级关系从右到左依次降低。
最左边的是主机名,一般会用来表示主机的用途,例如“www”就表示提供万维网服务,“mail”就表示提供邮件服务。
域名本质上是一个名字空间系统,使用多级域名能很好的划分出不同的国家、地区、公司、部门,每个域名都是独一无二的。
就像IP地址必须被转换为MAC地址才能访问主机一样,域名也必须转换为IP地址,这个过程就是域名解析。
DNS的核心系统是一个三层的树状、分布式服务,基本对应域名结构:
有了这个系统后,每个域名都能通过这个树形结构从顶向下进行查询,就像把域名从右向左顺序走了一遍,最终获得域名对应的IP地址。
例如,要访问“www.apple.com”这个网站,就要进行下面的三次查询:
虽然核心的DNS系统遍布全球,服务能力很强也很稳定,但如果全部网民都往里挤,整个系统即使不会崩溃,也会很慢。
所以为了缓解DNS系统域名解析的压力,就不能让所有人往里挤。
目前有两种手段,基本都围绕着“缓存”这个概念。
这些自建的DNS服务器会缓存之前的查询结果,如果已经有了记录,就无需再发起查询,直接返回对应的IP地址。
另外操作系统还有一个特殊的“主机映射”文件,这是一个可编辑的文本。在 Linux里是“/etc/hosts”,在 Windows 里是“C:\WINDOWS\system32\drivers\etc\hosts”。
如果操作系统在缓存里找不到DNS记录,就会来找这个文件。
有了这几种缓存之后,核心DNS系统的压力就减轻了很多。
总结来说,一个DNS查询会经历这么几个过程:
The text was updated successfully, but these errors were encountered:
No branches or pull requests
URI/URL
严格来说,URI并不等于网址,在HTTP的世界里,URL才代表网址。但因为URL是在太普及了,所以常常把这两者简单视为相等。
URI的格式
URI本质上是一个字符串,作用是唯一的标记资源的位置和地址。
URI由四部分组成,分别是:
URI的编码
由于在URI里只能使用ASCII码,如果想要在URI里使用英语以外的语言,或者有某些特殊的URI在path,query里使用“@&?”等起界定符作用的字符,那么必定会导致URI解析出错,这时该怎么办呢?
所以URI引入了编码机制,对于ASCII码以外的字符集和特殊字符,会将它们转换为与URI语义不冲突的形式。
转义的规则很简单粗暴,直接把非ASCII码或特殊字符转换成十六进制字节值,然后前面再加上一个“%”。
encodeURI和encodeURIComponent的区别
encodeURI和encodeURIComponent都是对URI的编码,唯一区别就是编码的字符范围了。
DNS
IP协议的职责是“网际互联”,它位于MAC层之上,使用IP地址将MAC编号转换为了4组数字。
只要每个小网络在IP地址这个概念上达成一致,不管它在MAC层有多大差异,都能接入TCP/IP协议栈,最终汇入互联网中。
随着接入互联网的设备越来越多,IP地址对人不友好的问题也随之暴露,主要是难以记忆。
DNS域名系统就是为了解决这个问题而生,它是对IP地址的一层抽象,将数字形式的IP地址转换为更有意义,更好记忆的字符串。
域名的形式
域名是一个有层次的结构,是一串用“.”分隔的多个单词,最右边的被称为顶级域名,紧接着的就是二级域名。层级关系从右到左依次降低。
最左边的是主机名,一般会用来表示主机的用途,例如“www”就表示提供万维网服务,“mail”就表示提供邮件服务。
域名本质上是一个名字空间系统,使用多级域名能很好的划分出不同的国家、地区、公司、部门,每个域名都是独一无二的。
域名的解析
就像IP地址必须被转换为MAC地址才能访问主机一样,域名也必须转换为IP地址,这个过程就是域名解析。
DNS的核心系统是一个三层的树状、分布式服务,基本对应域名结构:
有了这个系统后,每个域名都能通过这个树形结构从顶向下进行查询,就像把域名从右向左顺序走了一遍,最终获得域名对应的IP地址。
例如,要访问“www.apple.com”这个网站,就要进行下面的三次查询:
域名的缓存
虽然核心的DNS系统遍布全球,服务能力很强也很稳定,但如果全部网民都往里挤,整个系统即使不会崩溃,也会很慢。
所以为了缓解DNS系统域名解析的压力,就不能让所有人往里挤。
目前有两种手段,基本都围绕着“缓存”这个概念。
很多大公司、网络运行商都会建立自己的DNS服务器,作为用户DNS查询的代理商,代表用户访问核心DNS系统。
这些自建的DNS服务器会缓存之前的查询结果,如果已经有了记录,就无需再发起查询,直接返回对应的IP地址。
如果之前访问过一个网站,那么这个网站的DNS解析结果就会保存在操作系统的缓存中,无需再去DNS服务器去问。
另外操作系统还有一个特殊的“主机映射”文件,这是一个可编辑的文本。在 Linux里是“/etc/hosts”,在 Windows 里是“C:\WINDOWS\system32\drivers\etc\hosts”。
如果操作系统在缓存里找不到DNS记录,就会来找这个文件。
有了这几种缓存之后,核心DNS系统的压力就减轻了很多。
总结来说,一个DNS查询会经历这么几个过程:
The text was updated successfully, but these errors were encountered: