Fork me on GitHub

你能写出正确的网址吗?

URI,统一资源标识符(Uniform Resource Identifier)。因为它经常出现在浏览器的地址栏里,所以俗称为“网络地址”,简称“网址”。

一、URI格式

URI 本质上是一个字符串,这个字符串的作用是唯一地标记资源的位置或者名字。

下面的这张图显示了 URI 最常用的形式,由 scheme、host:port、path 和 query 四个部分组成,但有的部分可以视情况省略。

 

 URI 第一个组成部分叫scheme,翻译成中文叫“方案名”或者“协议名”,表示资源应该使用哪种协议来访问。

在 scheme 之后,必须是三个特定的字符“://”,它把 scheme 和后面的部分分离开。

第二个部分是主机加端口,锁定资源路径。

再加上后面标记资源所在位置的path,浏览器就能访问服务器资源了。

最后一个部分是代表参数,有时候请求会带着参数去查询某些信息,这时就要加上最后一个部分。URI 的 path 部分必须以“/”开始,也就是必须包含“/”

二、实例   这时我们来访问一下资源,实地测试一下。

1. 在浏览器中打开空白页面,然后F12打开开发者工具,访问网址:http://www.chrono.com/11-1,出现下面提示:

 

 这时左边就出现了刚才我们学习的URI结构每个部分。然后点击右边下面第一条,查看HTTP请求信息,如下:

这时发现起始行中请求目标地址并不全,这是因为Host中有了主机地址,加上起始行最后也有HTTP协议,所以为避免重复,就省去了。

三、URI的编码

有时候网址中会有中文或者其他特殊字符,这时候进行访问自然是不行的,URI 引入了编码机制,对于 ASCII 码以外的字符集和特殊字符做一个特殊的操作,把它们转换成与 URI 语义不冲突的形式。

URI 转义的规则有点“简单粗暴”,直接把非 ASCII 码或特殊字符转换成十六进制字节值,然后前面再加上一个“%”。

例如,空格被转义成“%20”,“?”被转义成“%3F”。而中文、日文等则通常使用 UTF-8 编码后再转义,例如“银河”会被转义成“%E9%93%B6%E6%B2%B3”。

四、课后作业

1. HTTP 协议允许在在请求行里使用完整的 URI,但为什么浏览器没有这么做呢?

答:前面已经说过了,因为在请求头的字段中都有,没必要重复。
2. URI 的查询参数和头字段很相似,都是 key-value 形式,都可以任意自定义,那么它们在使用时该如何区别呢?

答:通过最开始的?和每个KV中间的&来区别。

至此,结束。

posted @ 2021-02-23 17:36  叶语婷  阅读(1636)  评论(0编辑  收藏  举报