我是靠谱客的博主 大胆火车,最近开发中收集的这篇文章主要介绍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;  
    }  

 

 

 

 

 

转载于:https://www.cnblogs.com/lyy-2016/p/7927713.html

最后

以上就是大胆火车为你收集整理的url和uri的一些问题的全部内容,希望文章能够帮你解决url和uri的一些问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部