URI介绍

URI(Uniform Resource Identifier),是统一资源标识符的缩写,是一个用于标识某一个Web资源名称的字符串,该标识允许用户对任何资源通过特定的协议进行交互。Web上可用的每种资源,如:HTML、图像、视频和音乐等资源,都由一个统一资源标识符进行标识。URI一般由三部分组成:

●  访问资源的命名机制

●  存放资源的主机名

●  资源自身的名称,由路径标识,着重强调于资源

URL介绍

URL(Uniform Resource Locator),统一资源定位符的缩写,URL是一种特殊类型的URI,包含了用于查找某个资源的全部信息。URL一般由三部分组成:

●  协议类型

●  主机的IP地址(可以包含端口号)

●  资源路径

HTTP之URL

HTTP使用统一资源定位符URL来传输数据和建立连接,以下面这个URL为例,为大家介绍下URL的各部分组成:

http://www.itxdl.cn:8080/news/index.jsp?boardID=5&ID=24618&page=1#name

从上面的URL中可以看出,一个完整的URL包括以下几部分:

●  协议部分:该URL的协议部分为“http”,这代表网页使用的是HTTP协议,在Web中可以使用多种协议,如HTTP、FTP等等,在协议后面的“//”为分隔符。

●  域名部分:该URL的域名部分为www.itxdl.cn。一个URL中,也可以使用IP地址作为域名使用。

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

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

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

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

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

URL编码

如果一样东西需要编码,那么就说明这样的东西并不适合进行传输。原因是多种做样的,如长度过大,包含隐私数据等,对于URL来说,之所以要进行编码,是因为URL中有些字符会引起歧义。

例如,URL中的参数使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如username=snape&password=123,但是如果value中的字符串包含了=或&,那么一定会造成接收URL的服务器解析错误,因此必须将引起歧义的字符进行转义,也就是进行编码。

又如,URL中的编码格式采用的是ASCII码,而不是Unicode,也就是说不能在URL中包含任何非ASCII字符,例如中文。

在URL中是使用百分号编码的形式对中文进行编码的,因为使用百分号编码的方式非常简单,使用%加上两位十六进制数值即可。URL编码默认使用的字符集是US-ASCII,例如a在US-ASCII码中对应的十六进制形式是0x61,那么URL编码之后得到的就是%61,我们在浏览器地址栏中输入https://www.baidu.com/s?wd=%61,实际上就等同于在百度中搜索a了。

对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的十六进制数值,然后对每个字符执行百分号编码。对于Unicode字符,使用utf-8对其进行编码得到相应的十六进制数值,然后对每个字节执行百分号编码,如“中文”使用utf-8字符集得到的十六进制形式为“0xE4 0xB8 0xAD 0xE6 0x96 0x87”,经过“URL”编码之后得到"%E4%B8%AD%E6%96%87"。

IT兄弟连 JavaWeb教程 URI、URL的更多相关文章

  1. IT兄弟连 JavaWeb教程 文件下载技术

    ●  列出提供下载的文件资源 我们要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,编写一个ListFile ...

  2. IT兄弟连 JavaWeb教程 Servlet API

    Java Servlet是运行在带有支持Java Servlet规范的解释器的web服务器上的Java类. Servlet可以使用javax.servlet和javax.servlet.http包创建 ...

  3. IT兄弟连 JavaWeb教程 AJAX常见问题

    1  中文乱码问题 ●  POST提交乱码 乱码原因:所有浏览器对Ajax请求参数都使用UTF-8进行编码,而服务器默认使用ISO-8859-1去解码,所以产生乱码. 解决方法:在服务器接收请求参数前 ...

  4. IT兄弟连 JavaWeb教程 过滤器1

    Servlet过滤器是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强,监听器可以监听到Web应用程序启动和关闭.创建过滤器和监听器需要继承相应接口,并对其进行配置. ...

  5. IT兄弟连 JavaWeb教程 使用JSTL函数

    在JSTL Functions标签库中提供了一组常用的EL函数,主要用于处理字符串,在JSP中可以直接使用这些函数. 在JSP中使用Functions标签库,需要通过taglib指令引入该标签库: & ...

  6. IT兄弟连 JavaWeb教程 JSP中的三大指令

    指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到网页中.也就是说,指令标识对于客户端浏览器是不接见的.JSP页面的指令标识与我们的身份证类似, ...

  7. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie常用方法

    以下是在Servlet中操作Cookie时可使用的有用的方法列表 ●  public void setDomain(String pattern) 该方法设置cookie适用的域,例如 itxdl.c ...

  8. IT兄弟连 JavaWeb教程 ServletContext对象

    ServletContext是Servlet与Servlet容器之间直接通信的接口.Servlet容器在启动一个Web应用时,会为它创建一个ServletContext对象.每个Web应用都有唯一的S ...

  9. IT兄弟连 JavaWeb教程 Servlet表单数据

    很多情况下,需要传递一些信息,从浏览器到Web服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到Web服务器,分别为GET方法和POST方法. 1.GET方法 GET 方法向页面请求发送已编 ...

随机推荐

  1. MAC Intellij IDEA 经常使用快捷键(本人亲自測试过)

     MAC Intellij IDEA 经常使用快捷键 keymap 设置 MAC OS X 10.5+ alt+f7查找变量方法使用的地方 F3加入书签 Ctrl + O快捷覆写方法 Alt + F3 ...

  2. CPU维修技术

    中央处理单元(Central Process Unit)简称CPU,是电脑的核心部件,负责处理和运算电脑内部所有数据.因其在电脑中的地位相当重要,所以一旦发生故障就会造成很严重的后果. [技术66]开 ...

  3. FIR300M刷openwrt

    淘宝看到一款FIR300M路由器,当时只要19.9元.图便宜就买了. Hardware Architecture: MIPS Vendor: MediaTek (Ralink) Bootloader: ...

  4. Git使用之Permission Denied问题解决

    今天碰到了Git的Permission Denied问题. 在安装好git之后,我们通常会配置username和邮箱 git config --global user.name "zengj ...

  5. nodejs 实战

    使用 Koa + MongoDB + Redis 搭建论坛系统 「新手向」koa2从起步到填坑 基于koa2和react的PC端脚手架 一键生成koa/koa2项目: nodejs原生,express ...

  6. leetcode 677. Map Sum Pairs

    Implement a MapSum class with insert, and sum methods. For the method insert, you'll be given a pair ...

  7. 用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具

    用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具 前言 上周,同事抱怨说 react 怎么不能像 angular 那样,使用命令行工具来生成一个组件.对呀,平时工作时,想要创建 ...

  8. xunit输出output到控制台

    1.https://xunit.github.io/docs/capturing-output 里面似乎提到2个方法,第二个方法还需要在配置文件中添加appSetting 这里采用第一种方法, 1.添 ...

  9. 序列流、对象操作流、打印流、标准输入输出流、随机访问流、数据输入输出流、Properties(二十二)

    1.序列流 * 1.什么是序列流 * 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推.* 2.使用方式 * 整合两个 ...

  10. MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)

    知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ...