>  기사  >  웹 프론트엔드  >  URL과 URI의 차이점은 무엇입니까?

URL과 URI의 차이점은 무엇입니까?

一个新手
一个新手원래의
2017-09-09 13:12:101756검색

처음 http 프로토콜을 배울 때 이 두 용어가 비슷해서 헷갈려서 많은 정보를 확인하고 드디어 알아냈습니다. (정보를 찾아보면 아직 영어로 되어 있어서 믿을만 합니다...)

에서 많은 기술적 논란이 있었는데, 가장 멋진 것은 웹 주소를 어떻게 불러야 하는가입니다. 이것은 대개의 경우입니다. 누군가가 주소 표시줄의 내용을 "URL"이라고 부릅니다. 이때 어떤 사람들은 "아니요! 사실 URI는..."이라고 말합니다.

일반적으로 이런 종류의 반응은 여러 가지입니다. 이런 상황에서는 그냥 이 사람이 쪼잔하면 빨리 나가야 한다고 생각하고, 침착하면 어깨를 으쓱하고 동의하고, 화나면 칼을 뽑아서 싸우면 된다.

이 글은 결국 이것에 대한 간단한 요약을 제공하는 것 뿐이니까요.

URI, URL, URN

위 그림에서 볼 수 있듯이 URI, URL, URN 세 가지 개념이 있습니다. 이러한 문제를 논의할 때 가장 좋은 방법은 RFC의 시작점으로 돌아가는 것입니다. 3986: URI(Uniform Resource Identifier): 일반 구문은 다음과 같은 정보를 수집합니다.

"URI(Uniform Resource Identifier)는 추상 또는 물리적 리소스를 식별하는 데 사용되는 압축 문자열입니다."

"URI는 로케이터, 이름 또는 둘 다. "Uniform Resource Locator"(URL)라는 용어는 리소스를 식별하는 것 외에도 해당 리소스(예: 네트워크 "위치")를 찾기 위한 기본 액세스 메커니즘을 제공하는 URI의 하위 집합입니다. "

그럼 우리의 전지적 위키피디아는 이 단락을 아주 잘 소화하고 더 생생하게 설명했습니다.

"URI는 URL, URN 또는 사람 이름과 마찬가지로 로케이터와 이름의 특성을 모두 갖는 것으로 나눌 수 있습니다. URL은 사람의 주소와 같습니다. 즉, URN은 무언가의 신원을 결정하고 URL은 이를 찾는 방법을 제공합니다.

  • 우선, URL은 다음과 같습니다. URI 유형입니다(그림에서 볼 수 있음). 따라서 누군가가 URL이 URI가 아니라고 말한다면 그 사람은 틀린 것입니다. 그러나 모든 URI가 URL인 것은 아닙니다. 나비가 날 수는 있지만 모든 나비가 날 수 있는 것은 아닙니다.

  • URI를 URL로 만드는 것은 물론 "액세스 메커니즘"과 "네트워크 위치"입니다. 예: http:// 또는 ftp://.

    http:// or ftp://.。

  • URN是唯一标识的一部分,就是一个特殊的名字。

  下面就来看看例子吧,当来也是来自权威的RFC:

  • ftp://ftp.is.co.za/rfc/rfc1808.txt (also a URL because of the protocol)

  • http://www.ietf.org/rfc/rfc2396.txt (also a URL because of the protocol)

  • ldap://[2001:db8::7]/c=GB?objectClass?one (also a URL because of the protocol)

  • mailto:John.Doe@example.com (also a URL because of the protocol)

  • news:comp.infosystems.www.servers.unix (also a URL because of the protocol)

  • tel:+1-816-555-1212

  • telnet://192.0.2.16:80/ (also a URL because of the protocol)

  • urn:oasis:names:specification:docbook:dtd:xml:4.1.2

  这些全都是URI, 其中有些事URL. 哪些? 就是那些提供了访问机制的.

 总结

下面到了回答问题的时候了:

当我们替代web地址的时候,URI和URL那个更准确?

基于我读的很多的文章,包括RFC,我想说URI更准确。

别急,我有我的理由:

我们经常使用的URI不是严格技术意义上的URL。例如:你需要的文件在files.hp.com

URN은 특수한 이름인 고유 식별자의 일부입니다.

권위 있는 RFC의 예를 살펴보겠습니다.

🎜🎜ftp://ftp.is.co.za/rfc/rfc1808.txt (프로토콜 때문에 URL이기도 함)🎜🎜🎜🎜http://www.ietf.org/rfc/rfc2396.txt (프로토콜 때문에 URL이기도 함)🎜🎜🎜🎜ldap://[2001:db8::7]/c=GB?objectClass?one (프로토콜 때문에 URL이기도 함)🎜🎜🎜🎜mailto:John.Doe@example. com(프로토콜 때문에 URL이기도 함)🎜🎜🎜🎜news:comp.infosystems.www.servers.unix(프로토콜 때문에 URL이기도 함)🎜🎜🎜🎜tel:+1-816-555-1212🎜🎜🎜🎜telnet://192.0.2.16:80/ (프로토콜 때문에 URL이기도 함)🎜🎜🎜🎜 urn:oasis:names:specation:docbook:dtd:xml:4.1.2🎜🎜🎜  이것들은 모두 URI이며, 그 중 일부는 액세스 메커니즘을 제공하는 것입니다. .🎜🎜 요약🎜🎜이제 질문에 답할 시간입니다.🎜🎜웹 주소를 바꿀 때 URI와 URL 중 어느 것이 더 정확합니까? 🎜🎜RFC를 포함하여 내가 읽은 많은 기사에 따르면 URI가 더 정확하다고 말하고 싶습니다. 🎜🎜걱정하지 마세요. 이유가 있습니다. 🎜🎜우리가 자주 사용하는 URI는 엄밀한 기술적인 의미에서 URL이 아닙니다. 예를 들어, 필요한 파일은 files.hp.com에 있습니다. 이것은 URI이지만 URL은 아닙니다. 시스템은 많은 프로토콜과 포트에 올바르게 응답할 수 있습니다. 🎜🎜##################################3🎜🎜Java Access 주소에서 브라우저 받기 정보 🎜
3 request
    * request对象,tomcat根据http协议的请求的内容,将相应的数据封装到request对象中。
    * request和response必须是成对出现,先有的request,再有的response
    * 接口:javax.servlet.http.HttpServletRequest extends javax.servlet.ServletRequest
    * 实现类:tomcat实现,并在请求时,tomcat创建 。
    * 请求行
        * 入口:http://localhost:8080/day05/demo/pathRequestServlet?username=jack&password=1234
        * 请求方式
            request.getMethod();
        * 路径
            // * 请求资源路径
            // 1 获得servlet路径,web.xml配置的url-pattern【★★★】
            String servletPath = request.getServletPath();
            System.out.println(" 1 servletPath -->" + servletPath);  //--> /demo/pathRequestServlet

            //2 获得发布到tomcat时的项目名称【★★★】
            String contextPath = request.getContextPath();
            System.out.println(" 2 contextPath -->" + contextPath);  //--> /day05

            //3 获得请求行中的资源路径
            String requestURI = request.getRequestURI();
            System.out.println(" 3 requestURI -->" + requestURI);//-->/day05/demo/pathRequestServlet

            //4 获得请求URL(地址栏书写)
            String requestURL = request.getRequestURL().toString();
            System.out.println(" 4 requestURL -->" + requestURL);//-->http://localhost:8080/day05/demo/pathRequestServlet
            // *** 以上都不获得get请求的参数

            //5 获得get请求的参数,获得的是所有参数的一个字符串
            String queryString = request.getQueryString();
            System.out.println(" 5 queryString -->" + queryString); //-->username=jack&password=1234

        * 协议
            request.getProtocol();
    * 请求头
        * java.lang.String getHeader(java.lang.String name) 获得指定名称的头信息(一条)【★★★】
        * long getDateHeader(java.lang.String name) 获得特殊数据,时间
        * int getIntHeader(java.lang.String name) 获得特殊数据,整型
        * java.util.Enumeration getHeaderNames() 获得所有的请求头的名称
        * java.util.Enumeration getHeaders(java.lang.String name) 获得指定名称头的所有内容
        * 实例:防盗链,(不能直接访问 /refererTwoServlet)
    * 请求体
        * ServletInputStream getInputStream() 获得请求体的所有内容。(之后讲,文件上传)

    * 核心API
        * 属性操作
            * xxxAttribute (set / get / remove)  服务器端【★★★】
        * 获得参数
            * 获得浏览器 发送给 服务器端的参数(Parameter)
            * API【★★★】
                * 实例:url?username=jack&username=rose&username=tom&password=1234
                * getParameter(java.lang.String name) 获得指定参数的第一个值,如果数据不存在获得null 。
                    * 例如:getParameter("username") 获得 jack
                * java.lang.String[] getParameterValues(java.lang.String name) 获得指定参数的所有的值。
                    * 例如:getParameterValues("username") ,获得[jack,rose,tom]
                * java.util.Map<String,String[]> getParameterMap() 获得所有的内容,key 参数的名称 ,value 该参数的所有的值
                    * 例如:{username=[jack,rose,tom],password=[1234]}
            * 中文乱码
                * POST请求【★★★】
                    * 设置 setCharacterEncoding(java.lang.String env) ,设置字符编码
                * GET请求
                    * new String(username.getBytes("ISO-8859-1"), "字符集");

위 내용은 URL과 URI의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.