URI定义
URI,通一资源标志符(Universal Resource Identifier, URI),就是由某个协议方案表示的资源的定位标识符,协议方案指的是访问资源所用的协议类型名称。它表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行定位的。
采用HTTP协议时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等。标准的URI协议有30种左右。
URI结构组成
①访问资源的命名机制;
②存放资源的主机名;
③资源自身的名称,由路径表示。
URI格式
表示指定的URI,要使用涵盖全部必要信息的绝对URI、绝对URL以及相对URL。相对URL,是指从浏览器中基本的URI处指定的URL。 我们看一下绝对的URI格式。
使用http:或https:等协议方案名获取访问资源时要指定协议类型,不区分字母大小,最后附一个冒号。 也可使用data:或javascript:这类指定数据或脚本程序的方案名。
字段介绍
(1)登录信息(认证)
指定用户名或密码作为从服务器端获取资源时必要的登录信息,是可选的。
(2)服务器地址
使用绝对的URI必须有需要访问的服务器地址,地址可以是解析的、点分十进制(IPV4)或者是方括号阔起来的IPV6地址名。
(3)服务器端口号
指定服务器连接的网络端口号。是可选的,若用户省略则自动使用默认端口号。
(4)带层次的文件路径
指定服务器上的文件路径来定位指定的资源。
(5)查询字符串
针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数,此项可选。
(6)片段标识符
可以标记出已获取资源中的子资源。是可选项。
URI实例
https://blog.csdn.net/qq_1121028827/article/details/79516787
解释:这是一个可以通过https协议访问的资源,位于主机 blog.csdn.net上,通过路径“/qq_1121028827/article/details/79516787”访问。
android官方定义方式:
URL定义
URL是URI的一个子集。它是Uniform Resource Locator的缩写,译为“统一资源定位符”。通俗地说,URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL语法(组成)
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
①第一部分是协议(或称为服务方式),用“://”符号隔开【1和2部分,不可省略】。
②第二部分是存有该资源的主机IP地址(有时也包括端口号),用“/”符号隔开【2和3部分,可省略】。
③第三部分是主机资源的具体地址,如目录和文件名等。
具体组成如下:
URL提供了一种访问定位因特网上任意资源的手段,但是这些资源可以通过不同的方法(例如HTTP、FTP、SMTP)来访问,不管怎样,他都基本上由9个部分构成:
://:@:/;?#
scheme:获取资源使用的协议,例如http、ftp等,没有默认值
user:password:用户名与密码,这个是一个特殊的存在,一般访问ftp时会用到,他显示的表明了访问资源的用户名与密码。但是这个可以不写,不写的话可能会让你输入用户名密码
host:主机,访问那台主机,有时候可以是IP,有时候是主机名,例如www.baidu.com
port:端口,访问主机时的端口,如果http访问默认80,可以省略。
path:通过host:port我们能找到主机,但是主机上文件很多,通过path则可以定位具体文件。例如www.baidu.com/file/index.html。则path是/file/index.html,表示我们访问/file/index.html这个文件,他很像linux上的路径。
params:这个很少见,主要作用就是像服务器提供额外的参数,用来表示本次请求的一些特性。例如ftp传输模式有两种,二进制和文本,你肯定不希望使用文本形式传输二进制图片,这样你的图片下载下来后可能没法看了。为了向应用程序提供更丰富的信息,URL中有个专门的部分来表示这种参数。例如ftp://file.qiandu.com/pub/guid.pdf;type=d其中的type=d就是params
query:通过get方式请求的参数,例如:www.qiandu.com/index.html?username=dgh&passwd=123
fragment:例如www.qiandu.com/index.html#1。当html页面比较长时,我们通常会将其分为好几段,#1就可以 快速定位到某一段。
URL实例
https://mp.toutiao.com/profile_v3/graphic/publishhttps://www.qiandu.com:8080/goods/index.html?username=dgh&passwd=123#j2sefile://ftp.linkwan.com/pub/files/foobar.txt http://homepage.yesky.com/175/2603675.shtml
android官方定义方式:
URI用字符串标识某一互联网资源,而URL表示资源的地点,即互联网上所处的位置。所以,URL是URI的子集。
1.请求
POST /index.html HTTP/1.1HOST: www.XXX.com User-Agent:Mozilla/5.0(Windows NT 6.1;rv:15.0) Firefox/15.0Username=admin&password=admin
起始行开头的POST表示请求访问服务器的类型,称为方法。随后的/index.html指明了请求访问的资源对象,也叫做请求URI。最后的HTTP/1.1,是HTTP的版本号,用来提示客户端使用的HTTP协议功能。这段请求的内容的意思是:请求访问某台HTTP服务器上的/index.html页面资源。请求报文是由请求方法、请求URL、协议版本、可选的请求首部字段和内容实体构成的。
2.响应
HTTP/1.1 200 OKContent-Encoding: gzip Content-Type: text/html;charset=utf-8Document
this is http response
起始行开头的HTTP/1.1表示服务器对应的HTTP版本。200 OK表示请求的处理结果的状态码和原因短语。响应报文后以一空行分隔,之后的内容是资源实体的主体。
响应报文基本上是由版本协议、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主题构成。
告知服务器意图的HTTP方法
HTTP响应码
HTTP请求报文
HTTP响应报文
1.HTTP首部信息
HTTP首部字段包括客户端和服务器分别处理请求和响应提供所需要的信息,包括报文主体大小、所使用的的语言、认证信息等。对于客户端用户来说,这些信息中的大部分内容都无须亲自查看。
2.HTTP首部字段结构
HTTP首部字段是由首部字段名和字段值构成的。
首部字段名: 字段值
3.HTTP首部字段类型
HTTP首部字段分为4种类型。
通用首部字段
请求报文和响应报文都会用到的首部。
请求首部字段
从客户端向服务器发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容和相关优先级等信息。
响应首部字段
从服务器向客户端返回响应报文使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
实体首部字段
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
HTTP/1.1规范定义了47种首部字段。 下面介绍几个常见的首部字段。
HTTP短链接:
一次请求,一次响应,双方响应一来一回。通常服务器关闭响应。例如:对讲机。
HTTP长链接:
一次性建立连接,然后进行通信。例:打电话的过程。
@Testpublic void uriTest() throws Exception{ URI uri = new URI("https://www.qiandu.com:8080/goods/index.html?username=dgh&passwd=123#j2se"); 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());}
运行上面的代码,然后得到如下的结果:
@Testpublic void urlTest() throws Exception{URL url = new URL("https://www.qiandu.com:8080/goods/index.html?username=dgh&passwd=123#j2se"); 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());}
运行上面的代码,得到以下结果:
其实关于资源定位的时候还有一种写法,就是类似于
sftp://tomcat@www.qiandu.com///app/index.pdf
就是在主机名前面有类似于xxx@的东西,其实这种表示就:用户@主机名或者用户@IP。@前面表示登录主机的用户,也就是UserInfo了。
https://blog.csdn.net/weixin_39765280/article/details/111338745
最新评论: