HTTP定义

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出

HTTP是用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。

HTTP基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

更多内容可参考 菜鸟教程HTTP

URI 和URL定义

URL:(Uniform/Universal Resource Locator 的缩写,统一资源定位符)。
URI:(Uniform Resource Identifier 的缩写,统一资源标识符)(代表一种标准)。

与之相关的还有一种定义:URN = Uniform Resource Name 统一资源名称

关系:
URI 属于 URL 更高层次的抽象,一种字符串文本标准。
就是说,URI 属于父类,而 URL 属于 URI 的子类。URL 是 URI 的一个子集。
二者的区别在于,URI 表示一种标准来定义一个资源。
而 URL 怎么去实现这个标准,同时说明要如何访问这个资源(http://)。

如下图,通过各种协议去访问资源
(图片来自https://www.cnblogs.com/diandianquanquan/p/10606938.html)

浏览器地址栏里访问网站的地址认为是URL就好了,也就是以HTTP/HTTPS开头的URI子集。

知乎高赞回答如此大白话:

URI是抽象的定义,不管用什么方法表示,只要能定位一个资源,就叫URI,本来设想的的使用两种方法定位:
1,URL,用地址定位;
2,URN ,用名称定位。
举个例子:去村子找个具体的人(URI),如果用地址:某村多少号房子第几间房的主人 就是URL, 如果用身份证号+名字去找就是URN了。结果就是 目前WEB上就URL流行开了,平常见的URI 基本都是URL。

URL 标准格式

scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]
scheme //有我们很熟悉的http、https、ftp以及著名的ed2k,迅雷的thunder等。
host   //HTTP服务器的IP地址或者域名
port#  //HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如tomcat的默认端口是8080 http://localhost:8080/
path   //访问资源的路径
url-params  //所带参数
query-string    //发送给http服务器的数据
anchor //锚点定位

Java中的URI和URL

Java里面的注释定义

A URI is a uniform resource identifier while a URL is a uniform
resource locator. Hence every URL is a URI, abstractly speaking, but
not every URI is a URL. This is because there is another subcategory
of URIs, uniform resource names (URNs), which name resources but do
not specify how to locate them. The mailto, news, and isbn URIs shown
above are examples of URNs.

翻译过来就是

URI 是统一资源标识符,而 URL 是统一资源定位符。 因此,抽象地说,每个 URL 都是一个 URI,但并不是每个 URI 都是一个URL。 这是因为有另一个 URI 子类别,统一资源名称(URN),它命名资源但不指定如何定位它们

但是在Java的实现里面并没有URI和URL的继承关系啥的,他们两个都是final类

public final class URI implements Comparable<URI>, Serializable
public final class URL implements java.io.Serializable

URI类中提供了转换到URL的方法

    public URL toURL()throws MalformedURLException {if (!isAbsolute())throw new IllegalArgumentException("URI is not absolute");return new URL(toString());}

URL类同样也提供了转换到URI的方法

    public URI toURI() throws URISyntaxException {URI uri = new URI(toString());if (authority != null && isBuiltinStreamHandler(handler)) {String s = IPAddressUtil.checkAuthority(this);if (s != null) throw new URISyntaxException(authority, s);}return uri;}

Java中对URI和URL的操作

public class UriAndUrl {public static void urlTest(String str) throws Exception{URL url = new URL(str);System.out.println("URL:                  " + url.toString());System.out.println("protocol:        " + url.getProtocol());System.out.println("Authority:      " + url.getAuthority());System.out.println("file name:      " + url.getFile());System.out.println("host:                " + url.getHost());System.out.println("path:                " + url.getPath());System.out.println("port:                " + url.getPort());System.out.println("default port:" + url.getDefaultPort());System.out.println("query:              " + url.getQuery());System.out.println("ref:                  " + url.getRef());}public static void uriTest(String str) throws Exception{URI uri = new URI(str);System.out.println("URI:                  " + uri.toString());System.out.println("scheme             : " + uri.getScheme());System.out.println("SchemeSpecificPart : " + uri.getSchemeSpecificPart());System.out.println("Authority          : " + uri.getAuthority());System.out.println("host               : " + uri.getHost());System.out.println("port               : " + uri.getPort());System.out.println("path               : " + uri.getPath());System.out.println("query              : "  + uri.getQuery());System.out.println("fragment           : " + uri.getFragment());}public static void main(String[] args) throws Exception {String str = "https://blog.csdn.net/qq_37774171/article/details/122539833?spm=1001.2014.3001.5501";System.out.printf("---------------------------------------\n");UriAndUrl.uriTest(str);System.out.printf("---------------------------------------\n");UriAndUrl.urlTest(str);}}

输出结果

References:

  • https://www.cnblogs.com/diandianquanquan/p/10606938.html
  • https://www.zhihu.com/question/21950864
  • https://www.zhihu.com/question/21950864/answer/158161453
  • https://baike.baidu.com/item/HTTP/243074?fr=aladdin
  • https://www.runoob.com/http/http-tutorial.html

(写博客主要是对自己学习的归纳整理,资料大部分来源于书籍、网络资料和自己的实践,整理不易,但是难免有不足之处,如有错误,请大家评论区批评指正。同时感谢广大博主和广大作者辛苦整理出来的资源和分享的知识。)

【网络】HTTP 协议中 URI 和 URL 有什么区别?相关推荐

  1. HTTP协议中URI和URL有什么区别

    目录 1. `URL` 是什么 2. `URI` 是什么 3. `URI` 和 `URL` 之间的区别 1. URL 是什么 URL 即 Universal Resource Locator :称为 ...

  2. URI是什么意思?URI和URL有什么区别?

    URI是什么意思?URI和URL有什么区别? 详解! HTTP = Hyper Text Transfer Protocol URI = Universal Resource Identifier U ...

  3. http协议中,get和post的区别

    http协议中,get和post的区别 1.get的请求的参数是放在url里面的: post是请求的参数是在请求体里面的. 2,get请求是可以被浏览器缓存的: post请求不能被浏览器缓存的. 3, ...

  4. HTTP协议中GET和POST方法的区别

    本文详细对比了HTTP协议中GET和POST方法的区别,部分内容可能有误,读者请自行甄别. 转自博客https://sunshinevvv.coding.me/blog/2017/02/09/Http ...

  5. HTTP协议、URI和URL、报文首部

    一.URI和URL 1.URI的概念 URI就是由某个协议方案表示的资源的定位标识符,协议方案指的是访问资源所用的协议类型名称. 采用HTTP协议时,协议方案就是http.除此之外,还有ftp.mai ...

  6. URI、URL、URN区别

    笔记参考:b站Python小镇 三者关系:URI是一个大的集合,里面包含了URL和URN. URI:全称Uniform Resource Identitfier,也就是统一资源标识符,可以标识互联网上 ...

  7. 解析URI与URL之间的区别与联系

    URI就是一种资源定位机制,它是比较笼统地定位了资源,并不局限于客户端和服务器,而URL就定位了网上的一切资源,只要是网上的资源,都有唯一的URL 今天在看STRUTS配置的时候,发现一个问题,就是在 ...

  8. http中URI与URL关系的理解

    URI 统一资源标识符 URI 在某一规则下能把一个资源独一无二地标识出来,即用字符串标识某一互联网资源. URL 统一资源定位符 URL正是使用 Web 浏览器等访问Web页面时需要输入的网页地址. ...

  9. http协议中get和post的基本区别,tcp/ip协议的三次握手

    1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.(注意对于用户登录来说,g ...

  10. HTTP协议中POST与GET的详细区别总结----------通俗易懂

    GET与POST请求他们的区别主要有以下几点 (一)GET通过地址栏传输,PSOT通过报文传输: (二)GET参数有长度限制(受限于URL长度),而PSOT无限制: (三)GET传输是不安全的,POS ...

最新文章

  1. 监控系统常见的故障及解决方法.
  2. word2vec原理_深入理解Word2Vec底层原理
  3. app爬虫Android 7证书设置
  4. Java中 break continue return 的区别
  5. a*算法matlab代码_NSGAII多目标优化算法讲解(附MATLAB代码)
  6. 关于map的初级应用
  7. char* char [] 区别[zz]
  8. 提示wininet.dll文件找不到的解决
  9. wp10 手机 部署linux,【图片】02-15【吐槽】【转】win10手机端直接安装xap教程!【windowsphone吧】_百度贴吧...
  10. 微信小程序问答论坛+后台管理系统
  11. 一位真正的科学思想家: 纪念人工智能之父Marvin Minsky教授
  12. 使用markdownpad生成目录
  13. Android手机 通过NFC读取二代证
  14. NOI2015 Day1 T2 软件包管理器 树链剖分
  15. Apache启用GZIP压缩网页传输
  16. SOUI总结之盒子模型
  17. 无向图的Depth-first search和Breadth-first Search
  18. 原装ipad手写笔有必要买吗?第三方iPad手写笔推荐
  19. 想知道车牌号码里都有什么秘密吗?
  20. 四大名著红楼梦第三回 贾雨村夤缘复旧职 林黛玉抛父进京都

热门文章

  1. arcgis怎么压缩tif文件_PDF文件怎么压缩到最小?这个方法能最快速压缩!
  2. cad和html5哪个好,天正CAD和AutoCAD有什么区别,哪个好用?
  3. Vue select默认选中第一个
  4. Python语音基础操作--5.4小波分解
  5. 安全运维基础知识梳理
  6. 可复用可扩展的红包后台系统设计方案
  7. 有赞云支付php接口,Erphpdown wordpress插件集成有赞云支付的接口申请方法[已失效]...
  8. 数学建模相关知识梳理
  9. CCNA考试题库中英文翻译版及答案8
  10. 最简单的直播礼物连刷特效制作(带源码)