url和uri的一些问题
一 url和uri的区别:
uri: uniform resource identifier,统一资源标识符。
url: uniform resource locator,统一资源定位符。
做一个类比,人可以通过身份证唯一的标识出来,这个身份证ID就相当于uri,但是人也可以某个具体的地址如: 中国/南京/栖霞区/南京大学/宿舍楼/宿舍号/某某某 唯一的标识出来。也就是说,不管是编码的方式还是定位的方式,我们都可以唯一的确定一个资源。现在的网址我更倾向于叫它URL,因为提供了具体的位置信息,但是如果网址是通过号码来标识,如741236985.html,那么叫它URI更合适。
URI一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。
URL一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等
二 url中包含特殊字符如何处理
不管是以何种方式传递url时,如果要传递的url中包含特殊字符,如想要传递一个+,但是这个+会被url会被编码成空格,想要传递&,被url处理成分隔符。
尤其是当传递的url是经过Base64加密或者RSA加密后的,存在特殊字符时,这里的特殊字符一旦被url处理,就不是原先你加密的结果了。
url特殊符号及对应的编码:
| 符号 | url中的含义 | 编码 |
|---|---|---|
| + | URL 中+号表示空格 | %2B |
| 空格 | URL中的空格可以用+号或者编码 | %20 |
| / | 分隔目录和子目录 | %2F |
| ? | 分隔实际的URL和参数 | %3F |
| % | 指定特殊字符 | %25 |
| # | 表示书签 | %23 |
| & | URL中指定的参数间的分隔符 | %26 |
| = | URL中指定参数的值 | %3D |
1. js的处理方式:
(1)替换
function URLencode(sStr) {
return sStr .replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');
}
(2)使用encodeURI(url)和encodeURIComponent(url)
encodeURIComponent(URIstring): 假定其参数是URI一部分(比如协议、主机名、路径或查询字符串),因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号(? # 等)。
encodeURI(URIstring): 不会对URI中的分隔符编码,如 ? # 等。
2. java的处理方式
java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);
三 UriComponentsBuilder和UriComponents
SpringMVC使用UriComponentsBuilder和UriComponents两个类来提供一种构造和加密URI的机制。
扩大和编码URI模板字符串:
@RequestMapping(value = "/user/{name}")
public ResponseEntity<String> uri(HttpServletRequest req, @PathVariable String name, @RequestParam int id) {
UriComponents uriComponents = null;
//通过URL模板字符串来填充并加密一个URI
uriComponents = UriComponentsBuilder.fromUriString(
"http://example.com/hotels/{hotel}/bookings/{booking}").build();
URI uri = uriComponents.expand("42", "21").encode().toUri();
System.out.println(uri.toString());
//通过URI组件实例对象来填充并加密一个URI
uriComponents = UriComponentsBuilder.newInstance()
.scheme("http").host("example.com").path("/hotels/{hotel}/bookings/{booking}").build()
.expand("42", "21")
.encode();
System.out.println(uriComponents.toUri().toString());
return null;
}
url和uri的一些问题的更多相关文章
- URL和URI的区别和联系
URI:Universal Resource Identifier,通用资源标识符: URL:Uniform Resource Locator,统一资源定位符: 其中,URL ...
- URL和URI区别
URI:Universal Resource Identifier,通用资源标识符: URL:Uniform Resource Locator,统一资源定位符: 其中,URL是URI ...
- URL、URI和URN三者之间的区别
URI 统一资源标识符 Uniform Resource Identifier URL 统一资源定位符 Uniform Resource Locator URN 统一资源 ...
- 爬虫技术 -- 基础学习(三)理解URL和URI的联系与区别
网络爬虫的基本操作是抓取网页.首先要了解下URL~~ 在理解URL之前,先了解下URI,这两个概念我曾经混淆过~@_@|| 什么是URI? Web上每种可用的资源,如:html文档.视频,图片等都由一 ...
- URL和URI的区别与联系
转自:http://win7452.blog.51cto.com/147513/45741 今天在看STRUTS配置的时候,发现一个问题,就是在看配置文件的时候,有时出现URL有时又是URI, 让我心 ...
- 转!!URL和URI区别
URI,URL,URN 从上面的那幅图可以看出来,一共有三个不同的概念URI,URL,URN.这讨论这样的问题时,最好的方法就是回到原点啊,这里我们在RFC 3986: Uniform Resourc ...
- 【转】URL和URI的区别
[转]URL和URI的区别 译者:华科小涛:http://www.cnblogs.com/hust-ghtao/: 初学http协议,就被这两个相似的术语搞蒙了,查了很多资料,总算搞清楚了.(找资料还 ...
- [译]URL和URI的区别
译者:华科小涛:http://www.cnblogs.com/hust-ghtao/: 初学http协议,就被这两个相似的术语搞蒙了,查了很多资料,总算搞清楚了.(找资料还是英文啊,靠谱...). 本 ...
- 一招明白URL和URI的区别
URL和URI的区别(示例): URL[统一资源定位器]: http://localhost:8080/api/account/queryAccountInfo URI[统一资源定位符]: /api/ ...
- URL和URI以及两者的区别和联系
1.url: 统一资源定位符(Uniform Resource Locator,URL)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一 ...
随机推荐
- web项目脱离Eclipse在Tomcat部署并配置Eclipse调试
简单来说,把WEB项目打成war包后放到webapps目录下启动tomcat便部署成功了,但是因为与Eclipse没有关联,故而无法Debug调试代码.这时在Tomcat的catalina.sh脚本里 ...
- 完整详解GCD系列(三)dispatch_group
http://blog.csdn.net/hello_hwc/article/details/41409135 一.dispatch_group把一组任务提交到队列中,这些队列可以不相关,然后坚挺这组 ...
- BZOJ2816:[ZJOI2012]网络(LCT)
Description 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构 ...
- Gluon Data API
http://mxnet.apache.org/api/python/gluon/data.html import sys import os import time import mxnet as ...
- PHP----练习------球队列表
题目:页面上有一个ul球队列表当鼠标移动到某个li上的时候改行背景颜色变红,当点击某个li的时候,让该li之前的所有li背景色变黄,之后的所有li背景色变蓝.自己不变色. <!DOCTYPE h ...
- js中返回上一页
<a class="btn btn-danger" href="javascript:history.go(-1);">取消</a>
- 2019.1.10 Mac安装Nginx服务器
1.安装Homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/in ...
- Python re模块正则表达式
- 通过Field (反射)给私有字段赋值
public class Person { public String name; public char sex; private int age; public String getName() ...
- Gradle Goodness: Set Java Compiler Encoding
If we want to set an explicit encoding for the Java compiler in Gradle we can use the options.encodi ...