网络前端小技巧(前端要知道的网络知识六)
网络前端小技巧(前端要知道的网络知识六)
2024-11-25 09:26:39  作者:所以在乎你  网址:https://m.xinb2b.cn/know/wfs529673.html


一般地,URL和URI比较难以区分。接下来,本文以区分URL和URI为引子,详细介绍URL的用法,JavaScript重文·也许你该知道浏览器输入 URL 后发生了什么?


与URI区别

URI是Uniform Resource Identifier的缩写,称为统一资源标识符。URI是一个通用的概念,由两个主要的子集URL和URN构成,URL是通过描述资源的位置来标识资源的,而URN则是通过名字来识别资源的,与它们当前所处位置无关

URL是Uniform Resource Locator的缩写,称为统一资源定位符。URL正是使用web浏览器等访问web页面时需要输入的网页地址

URL是一种强有力的工具。但URL并不完美。它表示的是实际的地址,而不是准确的名字。这种方案的缺点在于如果资源被移走了,URL也就不再有效了。那时,它就无法对对象进行定位了

如果有了对象的准确名称,则不论其位于何处都可以找到这个对象。就像人一样,只要给定了资源的名称和其他一些情况,无论资源移到何处,都能够追踪到它。为了应对这个问题,因特网工程任务组(Internet Engineering Task Force, IETF) 已经对URN的新标准做了一段时间的研究了。无论对象搬移到什么地方,URN都能为对象提供一个稳定的名称

但是,从URL转换成URN是一项巨大的工程,支持URN需要进行很多改动——标准主体的一致性,对各种HTTP应用程序的修改等。所以,还要等待更合适的时机才能进行这种转换

URL语法

URL语法建立在由下面9部分构成的通用格式上。其中,URL最重要的3个部分是方案(scheme)、主机(host)和路径(path)

<scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>

【方案】

方案实际上是规定如何访问指定资源的主要标识符,它会告诉负责解析URL的应用程序应该使用什么协议

方案组件必须以一个字母符号开始,由第一个“:”符号将其与URL的其余部分分隔开来。方案名是大小写无关的,因此URL“http://www.hardware.com”和“HTTP://www.hardware.com” 是等价的

常见的方案如下

1、HTTP

HTTP是一种超文本传输协议方案,除了没有用户名和密码之外,与通用的URL格式相符。如果省略了端口,就默认为80

基本格式:

http://<host>:<port>/<path>?<query>#<frag>

示例:

http://www.hardware.com/index.htmlhttp://www.hardware.com:80/index.html

2、https

方案https与方案http是一对。唯一的区别在于方案https使用了网景的SSL, SSL为HTTP连接提供了端到端的加密机制。其语法与HTTP的语法相同,默认端口为443

基本格式:

https://<host>:<port>/<path>?<query>#<frag>

示例:

https://www.hardware.com/secure.html

3、Mailto

Mailto URL指向的是E-mail地址。由于E-mail的行为与其他方案都有所不同(它并不指向任何可以直接访问的对象),所以mailto URL的格式与标准URL的格式也有所不同

示例:

mailto:joe@hardware.com

4、FTP

文件传输协议URL可以用来从FTP服务器上下载或向其上传文件,并获取FTP服务器上的目录结构内容的列表

在Web和URL出现之前,FTP就已经存在了。Web应用程序将FTP作为一种数据访问方案使用

基本格式:

ftp://<user>:<password>@<host>:<port>/<path>;<params>

示例:

ftp://anonymous:joe@hardware.com@prep.ai.mit.edu:21/pub/gnu/

5、rtsp,rtspu

RTSP URL是可以通过实时流传输协议(Real Time Streaming Protocol)解析的音/视频媒体资源的标识符

方案rtspu中的u表示它是使用UDP协议来获取资源的

基本格式:

rtsp://<user>:<password>@<host>:<port>/<path>rtspu://<user>:<password>@<host>:<port>/<path>

示例:

rtsp://www.hardware.com:554/interview/cto_video

6、file

方案file表示一台指定主机(通过本地磁盘、网络文件系统或其他一些文件共享系统)上可直接访问的文件。各字段都遵循通用格式。如果省略了主机名,就默认为正在使用URL的本地主机

基本格式:

file ://<host>/<path>

示例:

file://OFFICE-FS/policies/casual-fridays.doc

7、telnet

方案telnet用于访问交互式业务。它表示的不是对象自身,而是可通过telnet协议访问的交互式应用程序(资源)

基本格式:

telnet://<user>:<password>@<host>:<port>/

示例:

telnet://slurp:webhound@joes-hardware.com:23/

[注意]除了以上常见的7种方案之外,如果要查看全部的URI方案列表,请移步至https://www.w3.org/Addressing/schemes.html

【主机和端口】

要想在因特网上找到资源,应用程序要知道是哪台机器装载了资源,以及在那台机器的什么地方可以找到能对目标资源进行访问的服务器。URL的主机和端口组件提供了这两组信息

主机组件标识了因特网上能够访问资源的宿主机器。可以用上述主机名(www.hardware.com)或者IP地址来表示主机名

[注意]IP地址可以是192.168.1.1这类IPv4地址名,还可以是[0:0:0:0:0:0:0:1]这样用括号括起来的IPv6地址名

比如,下面两个URL就指向同一个资源——第一个URL通过主机名,第二个通过IP地址指向服务器

http://www.hardware.com:80/index.html http://161.58.228.45:80/index.html

端口组件标识了服务器正在监听的网络端口。对下层使用了TCP协议的HTTP来说,默认端口号为80

【用户名和密码】

很多服务器都要求输入用户名和密码才会允许用户访问数据。FTP服务器就是这样一个常见的实例

ftp://ftp.prep.ai.mit.edu/pub/gnuftp://anonymous@ftp.prep.ai.mit.edu/pub/gnuftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu http://joe:joespasswd@www.joes-hardware.com/sales_info.txt

第一个例子没有用户或密码组件,只有标准的方案、主机和路径。如果某应用程序使用的URL方案要求输入用户名和密码,比如FTP,但用户没有提供,它通常会插入一个默认的用户名和密码。比如,如果向浏览器提供一个FTP URL,但没有指定用户名和密码,它就会插入anonymous(匿名用户)作为你的用户名,并发送一个默认的密码(IE会发送IEUser)

第二个例子显示了一个指定为anonymous的用户名。这个用户名与主机组件组合在一起,看起来就像E-mail地址一样。字符将用户和密码组件与URL的其余部分分隔开来

在第三个例子中,指定了用户名(anonymous)和密码(my_passwd),两者之间由字符“:”分隔

【路径】

URL的路径组件说明了资源位于服务器的什么地方。路径通常很像一个分级的文件系统路径

http://www.hardware.com:80/seasonal/index-fall.html

这个URL中的路径为/seasonal/index-fall.html,很像UNIX文件系统中的文件系统路径。路径是服务器定位资源时所需的信息。可以用字符“/”将HTTP URL的路径组件划分成一些路径段(path segment),每个路径段都有自己的参数(param)组件

【参数】

对很多方案来说,只有简单的主机名和到达对象的路径是不够的。除了服务器正在监听的端口,以及是否能够通过用户名和密码访问资源外,很多协议都还需要更多的信息才能工作

负责解析URL的应用程序需要这些协议参数来访问资源。否则,另一端的服务器可能就不会为请求提供服务,或者更糟糕的是,提供错误的服务。比如,像FTP这样的协议,有两种传输模式:二进制和文本形式。肯定不希望以文本形式来传送二进制图片,这样的话,二进制图片可能会变得一团糟

为了向应用程序提供它们所需的输入参数,以便正确地与服务器进行交互,URL中有一个参数组件。这个组件就是URL中的名值对列表,由字符“;”将其与URL的其余部分(以及各名值对)分隔开来。它们为应用程序提供了访问资源所需的所有附加信息。比如:

ftp://prep.ai.mit.edu/pub/gnu;type=d

在这个例子中,有一个参数type=d,参数名为type,值为d

如前所述,HTTP URL的路径组件可以分成若干路径段。每段都可以有自己的参数。比如:

http://www.hardware.com/hammers;sale=false/index.html;graphics=true

这个例子就有两个路径段,hammers和index.html。hammers路径段有参数sale,其值为false。index.html段有参数graphics,其值为true

【查询字符串】

很多资源,比如数据库服务,都是可以通过提问题或进行査询来缩小所请求资源类型范围的。假设数据库中维护着一个未售货物的清单,并可以对淸单进行査询,以判断产品是否有货,那就可以用下列URL来査询Web数据库网关,看看编号为12731、颜色为blue、尺寸为large的条目是否有货:

http://www.hardware.com/inventory-check.cgi?item=12731&color=blue&size=large

这个URL的大部分都与我们见过的其他URL类似。只有问号(?)右边的内容是新出现的。这部分被称为查询(query)组件。URL的査询组件和标识网关资源的URL路径组件一起被发送给网关资源

除了有些不合规则的字符需要特别处理之外,对査询组件的格式没什么要求。按照常规,很多网关都希望査询字符串以一系列“名/值”对的形式出现,名值对之间用字符“&”分隔

【片段】

有些资源类型,比如HTML,除了资源级之外,还可以做进一步的划分。比如,对一个带有章节的大型文本文档来说,资源的URL会指向整个文本文档,但理想的情况是,能够指定资源中的那些章节

为了引用部分资源或资源的一个片段,URL支持使用片段(frag)组件来表示一个资源内部的片段。比如,URL可以指向HTML文档中一个特定的图片或小节

片段挂在URL的右手边,最前面有一个字符“#”。比如:

http://www.hardware.com/tools.html#drills

在这个例子中,片段drills引用了Web服务器上页面/tools.html中的一个部分。这部分的名字叫做drills

HTTP服务器通常只处理整个对象,而不是对象的片段,客户端不能将片段传送给服务器。浏览器从服务器获得了整个资源之后,会根据片段来显示感兴趣的那部分资源

字符

URL的设计者们认识到有时人们可能会希望URL中包含除通用的安全字母表之外的二进制数据或字符。因此,需要有一种转义机制,能够将不安全的字符编码为安全字符,再进行传输

人们设计了一种编码机制,用来在URL中表示各种不安全的字符。这种编码机制就是通过一种“转义”表示法来表示不安全字符的,这种转义表示法包含一个百分号(%),后面跟着两个表示字符ASCII码的十六进制数

下面是一些例子


在URL中,有几个字符被保留起来,有着特殊的含义。有些字符不在定义的US- ASCII可打印字符集中。还有些字符会与某些因特网网关和协议产生混淆,因此不赞成使用

下面列出了保留及受限的字符


常见的三种编码方法

【encodeURI()】

encodeURI()函数把字符串作为URI进行编码,实际上enchodeURI()函数只把参数中的空格编码为 ,其余特殊字符均不会转换

encodeURI()的不编码字符有82个:

! # $ & ' ( ) * , - . / : ; = ? @ _ ~ 0-9 a-z A-Z

使用方式

//'http://www.w3school.com.cn<br />'console.log(encodeURI("http://www.w3school.com.cn") "<br />")//'http://www.w3school.com.cn/My first/'console.log(encodeURI("http://www.w3school.com.cn/My first/"))//',/?:@&= $#'console.log(encodeURI(",/?:@&= $#"))

[注意]encodeURI()可以编码中文

//'测试'console.log(encodeURI('测试'));

【decodeURI()】

decodeURI()函数可对encodeURI()函数编码过的URI进行解码。实际上,decodeURI()仅仅会把 转换为空格显示

//"http://www.w3school.com.cn/My first/"console.log(decodeURI("http://www.w3school.com.cn/My first/"));

【encodeURIComponent()】

encodeURIComponent()函数可把字符串作为URI组件进行编码。该方法主要对;/?:@&= $,#等这些用于分隔URI组件的字符以及中文进行编码

encodeURIComponent不编码字符有71个:

!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

由于此方法对:/都进行了编码,所以不能用它来对网址进行编码,而适合对URI中的参数进行编码

[注意]encodeURIComponent()可以编码中文

var uri = "http://www.wrox.com/illegal value.htm#start";//'http://www.wrox.com/illegal value.htm#start'console.log(encodeURIComponent(uri));//'测试'console.log(encodeURIComponent('测试'));

【decodeURIComponent()】

decodeURIComponent()函数可对encodeURIComponent()函数编码的URI进行解码

var uri = 'http://www.wrox.com/illegal value.htm#start';//'http://www.wrox.com/illegal value.htm#start'console.log(decodeURIComponent(uri));

【escape()】

escape()函数对字符串进行编码,将字符的unicode编码转化为16进制序列

ES3中反对escape()的使用,并建议用encodeURI和encodeURIComponent代替,不过escape()依然被广泛的用于cookie的编码,因为escape()恰好编码了cookie中的非法字符并且对路径中常出现的“/”不进行编码

escape()的不编码字符有69个:

* - . / @ _ 0-9 a-z A-Z

[注意]escape()可以编码中文

var uri = "http://www.wrox.com/illegal value.htm#start";//'http://www.wrox.com/illegal value.htm#start'console.log(escape(uri));//%u6D4B%u8BD5console.log(escape('测试'));

【unescape()】

unescape()函数用于对escape()函数编码的URI进行解码

//http://www.wrox.com/illegal value.htm#startconsole.log(unescape('http://www.wrox.com/illegal value.htm#start'));//'测试'console.log(unescape('%u6D4B%u8BD5'));

链接文章:

https://www.cnblogs.com/xiaohuochai/p/6144157.html

https://www.cnblogs.com/xiaohuochai/p/6144157.html

https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_URL

  • 旅游景点三八妇女节优惠(上海这些景点打折优惠啦)
  • 2024-11-25上海这些景点打折优惠啦再过几天就是三八妇女节了,想好去哪里玩了吗?市文旅局说,醉白池公园、辰山植物园、海湾国家森林公园、滨江森林公园等不少景点在3月8日前后对女性游客有优惠哦!一起来看看↓醉白池公园3月6日—3月8日,所有。
  • 螃蟹要蒸多久才能蒸熟(螃蟹要蒸熟时间)
  • 2024-11-25螃蟹要蒸熟时间蒸螃蟹的时候一般需要用凉水蒸煮,等水再开了在蒸煮8-10分钟左右,一起煮的话15-20分钟左右蒸螃蟹最重要的是保持螃蟹的鲜味,将蟹蒸熟又不过头蒸螃蟹过程中最容易出现的问题是蒸太久,导致肉不鲜甜,或者是。
  • 信阳哈弗h6第三代(信阳宏和哈弗H6)
  • 2024-11-25信阳宏和哈弗H6在中段加速的时候,车子的动力输出也会有明显的提升而在高速驾驶方面,车辆在中后段的动力输出更加充沛动力方面,新车搭载型号为GW4B15A的1.5T发动机,最大功率110千瓦,峰值扭矩210牛·米"。
  • 松山湖城市改造项目(打造产城融合标杆)
  • 2024-11-25打造产城融合标杆10月18日,企石镇江南大道江边村路段一侧,今年5月底刚被拍下的连片土地上,数十米高的塔吊左旋右转、十余部挖掘机各自作业、20余吨荷载的泥头车出出入入……一派热火朝天的建设场景一路之隔的另一边,松山湖。
  • 订婚戒指戴哪个位置好(订婚戒指和结婚戒指的戴法一样吗)
  • 2024-11-25订婚戒指和结婚戒指的戴法一样吗订婚是结婚的前奏曲,它比恋爱更具有保障,比结婚又更具有自由订婚和结婚有许多方面都是不一样的,比如称唿上,只订婚未结婚的称唿对方为未婚夫、未婚妻,已经结婚的就可以直接向别人介绍这是我丈夫或者是这是我妻子。
  • 山居秋暝山居的意思(山居秋暝山居的意思是什么)
  • 2024-11-25山居秋暝山居的意思是什么“山居”的意思是:在山中居住“秋暝”的意思是:秋天天色将晚出自唐代诗人王维的作品《山居秋暝》,此诗描绘了秋雨初晴后傍晚时分山村的旖旎风光和山居村民的淳朴风尚,表现了诗人寄情山水田园并对隐居生活怡然自得。
  • 其实你分不清那些差别(没看清这5点区别之前)
  • 2024-11-25没看清这5点区别之前什么是迷恋呢?大概是我从没感受过温柔,直到遇见了笑如阳光般温暖的你,于是把你当作温暖的化身为了抓住我以为的温暖,于是开始热情高涨地穷追不舍,自我感动式地步步靠近我以为这就是爱,可后来一接触,发现你也会。
  • 玻璃心的人的缺点(正在毁掉你的人生)
  • 2024-11-25正在毁掉你的人生一、玻璃心的人,你们不累吗?周围经常有这样的朋友,无论别人说什么,做什么,她都会牵扯到自己身上哎呀,她们为什么看着我笑?是因为我今天穿的衣服不好看吗?刚才和闺蜜说了一句话,她一上午都没有理我,是不是生。
  • 我的世界凶兆状态有什么用(不祥之兆是什么)
  • 2024-11-25不祥之兆是什么我们都知道在这次更新中,MC更新了一个新玩法叫做:不祥之兆,那么不祥之兆究竟是什么?一起跟随亮亮的脚步看看吧!首先要得到不祥之兆就要找到掠夺者前哨!前哨一般在村庄周围,细心的玩家可以找找,不过我在这里。
  • 哆啦a梦最诡异的一集艺人(哆啦A梦里最多鬼主意的小夫)
  • 2024-11-25哆啦A梦里最多鬼主意的小夫要说《哆啦A梦》里让人又爱又恨的角色,除了胖虎,大概就数小夫了吧虽然平时都跟着胖虎狐假虎威,但是要论鸡贼劲,那还是没的说了,每次剧场版里边都是他充当军师的角色,时不时都有鬼点子出来,他们家之所以有钱,。
  • 金星杨幂金星秀经典语录(金星秀因为毒舌遭停播)
  • 2024-11-25金星秀因为毒舌遭停播8月30日晚,金星发微博晒与老搭档沈南合影,配文:亲爱的观众朋友们,谢谢你们一直以来对《金星秀》的支持和爱护,我们后会有期!20多分钟后,沈南转发:女士们先生们,接下来让我们掌声有请金星女士!《金星秀。