URL HTML 统一资源定位器(Uniform Resource Locators)

URL 是一个网页地址。

URL可以由字母组成,如"runoob.com",或互联网协议(IP)地址: 192.68.20.50。大多数人进入网站使用网站域名来访问,因为 名字比数字更容易记住。

URL - 统一资源定位器

Web浏览器通过URL从Web服务器请求页面。

当您点击 HTML 页面中的某个链接时,对应的 <a> 标签指向万维网上的一个地址。

一个统一资源定位器(URL) 用于定位万维网上的文档。

一个网页地址实例: http://www.runoob.com/html/html-tutorial.html 语法规则:

scheme://host.domain:port/path/filename

说明:

    • scheme - 定义因特网服务的类型。最常见的类型是 http
    • host - 定义域主机(http 的默认主机是 www)
    • domain - 定义因特网域名,比如 runoob.com
    • :port - 定义主机上的端口号(http 的默认端口号是 80)
    • path - 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)。
    • filename - 定义文档/资源的名称

常见的 URL Scheme

以下是一些URL scheme:

Scheme访问用于...
http 超文本传输协议 以 http:// 开头的普通网页。不加密。
https 安全超文本传输协议 安全网页,加密所有信息交换。
ftp 文件传输协议 用于将文件下载或上传至网站。
file   您计算机上的文件。

 


URL 字符编码

URL 只能使用 ASCII 字符集.

来通过因特网进行发送。由于 URL 常常会包含 ASCII 集合之外的字符,URL 必须转换为有效的 ASCII 格式。

URL 编码使用 "%" 其后跟随两位的十六进制数来替换非 ASCII 字符。

URL 不能包含空格。URL 编码通常使用 + 来替换空格。

一个URL(统一资源路径地址)包含哪些部分呢?举个例子,比如 “http://www.baidu.com/index.html?name=mo&age=25#dowell”,在这个例子中我们可以分成六部分;

1、传输协议:http,https

2、域名: 例www.baidu.com为网站名字。 baidu.com为一级域名,www是服务器

3、端口: 不填写的话默认走的是80端口号

4、路径 http://www.baidu.com/路径1/路径1.2。/表示根目录

5、携带的参数:?name=mo

6、哈希值:#dowell

 
传输协议

 传输协议是用来完成客户端和服务器端之间数据传输的;

传输协议可分为三类

1、http:超文本传输协议

             客户端和服务器端传输的内容除了文本以外,还可以传输图片、音频和视频等文件流(二进制编码 | base64码),以及XML格式的数据等,是目前应用最广泛的。

2、https:http ssl,它比http更加安全,因为数据内容的传输通道是经过SSL加密的(需要在服务器端进行特殊的处理),涉及金融类的网站一般都是使用https。

3、ftp:资源文件传输协议

             用于客户端把资源文件(不是代码)上传到服务器端,或者从服务器端下载一些资源文件(一般传输的内容会比http这类协议传输的内容多)。
域名

用于解析对应的IP地址,便于记忆;

顶级域名(一级域名):baidu.com;

二级域名:www.baidu.com    sports.baidu.com    ai.baidu.com

三级域名:my.sports.baidu.com;
端口号

在服务器发布项目的时候,我们可以通过端口号区分当前服务器上不同的项目。如:www.baidu.com:8080,一台服务器的端口号取值范围在 0 ~ 65535 之间,如果电脑上安装了很多程序,有一些端口号是被占用的;

http:默认端口号80

https:默认端口号443

ftp:默认端口号21

对于以上三个端口号其实很重要,如果被其他程序占用,则我们就不能使用了,所以服务器上一般是禁止安装其他程序的。
资源文件路径名称

在服务器中发布项目的时候,我们一般都会配置一些默认文档,即使用户不输入文件的名称,服务器也会默认找到配置好的文档(一般默认文档都是index.**)。

为了做SEO优化,会把一些动态页面的地址(xxx.php、xxx.aspx、xxx.asp、 xxx.jsp)进行URL重写(需要服务器处理)。
问号传参(可有可无)

把一些值通过 “key=value” 的方式放在一个URL的末尾,通过?传递;

作用:

1、在ajax请求中,我们可以通过问号传递参数的方式,在客户端把一些信息传递给服务器,服务器根据传递信息的不一样,返回不同的数据;

2、清除ajax get方法的缓存,?math_random=0.123456;

3、通过URL传递参数的方式,实现页面之间的通信;
HASH值(可有可无)

作用

1、可做页面中的锚点定位

2、在单页应用开发中作为前端路由使用(Vue Router、React Router);
---------------------
就以下面这个URL为例,介绍下普通URL的各部分组成

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:
1、协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2、域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

3、端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口80

4、虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5、文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6、锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7、参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
---------------------
目录

一、#说明

二、?说明

三、&说明
一、#说明

1、#的涵义

        #代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。
  为网页位置指定标识符,有两个方法。一是使用锚点,比如<a name="print"></a>,二是使用id属性,比如<div id="print">。

就比如说,我们想到达页面中的某一个指定的位置,可以通过#来实现,我们经常也能看到这样的情况。

        在VUE中,路由的实现方式有两种,其中一种就是通过#标识符进行页面内导航从而实现路由切换。

2、HTTP请求不包括#

#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。
比如,访问下面的网址,http://www.example.com/index.html#print,浏览器实际发出的请求是这样的:

    GET /index.html HTTP/1.1
     
    Host: www.example.com

也就是说,比如我们用vue去跳转一个指定的页面,那么我们向服务器端请求还是#号之前的内容,#后面的内容用来指导浏览器动作。

这里遇到一个坑,在微信浏览器中,只存在于部分安卓机,如果你访问http://wx.thingcom.cn/#/,然后做微信授权,服务器后台重定向到http://wx.thingcom.cn/#/user。在这个时候,微信浏览器访问服务器资源,它认为同样的资源已经请求过,会从本地缓存中获取资源。按道理说,本地浏览器应该可以根据#之后的地址重新定向页面,但是部分机型不成功。原因可能是部分机型不支持当前页面的重定向,依旧加载原始页面,重定向不同于刷新。

解决方法是在#之前加时间戳,http://wx.thingcom.cn/?time=2312234#/user,强制浏览器再次去服务器中获取资源。这里还有一个问题,如果你这么做了之后,那么接下来你的所有路由跳转,全部都是在#之后,也就是说http://wx.thingcom.cn/?time=2312234#/home这样的,#之前的内容不再改变,路由只改变#之后的内容。

3、#后的字符

在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。
比如,下面URL的原意是指定一个颜色值:http://www.example.com/?color=#fff,但是,浏览器实际发出的请求是:

    GET /?color= HTTP/1.1
     
    Host: www.example.com

说明同上

4、改变#不触发网页重载

单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。
比如,从http://www.example.com/index.html#location1改成http://www.example.com/index.html#location2,浏览器不会重新向服务器请求index.html。

说明同第一个,例如单页面应用SPA一样,路由的切换,不会重新加载页面,只是切换位置,或者切换组件;第二种应用就是在单个页面里面通过name和id切换当前显示的位置。

5、改变#会改变浏览器的访问历史

每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用"后退"按钮,就可以回到上一个位置。这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。值得注意的是,上述规则对IE 6和IE 7不成立,它们不会因为#的改变而增加历史记录。

说明:通过#的切换,是算在浏览器的访问历史中的,前进和后退都是生效的。

6、onhashchange事件

这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。
  它的使用方法有三种:

    window.onhashchange = func;
    <body οnhashchange="func();">
    window.addEventListener("hashchange", func, false);

对于不支持onhashchange的浏览器,可以用setInterval监控location.hash的变化。

说明:这是一个监听事件,监听#的变化,具体行为自定义完成。
二、?说明

1、连接作用

http://www.xxx.com/Show.asp?id=77&nameid=2905210001&page=1

通过?来带参数,连接域名和参数,经常会用到。

2、清除缓存

    http://www.xxxxx.com/index.html
     
    http://www.xxxxx.com/index.html?test123123

两个url打开的页面一样,但是后面这个有问号,说明不调用缓存的内容,而认为是一个新地址,重新读取。

因为在做http请求的时候,如果浏览器检测到你的地址完全没变,会从缓存里读取先前请求过的数据,不再发送请求。有些时候是页面资源的加载,有些时候是API的get请求,都有可能。加上这个,会让浏览器认为这是一个新的地址,从而保证重新获取资源。
三、&说明

不同参数的间隔符


posted @ 2019-07-19 14:48  长空雁叫霜晨月  阅读(1729)  评论(0编辑  收藏  举报