HTTP——URL的组成部分

#################文章全部摘自《HTTP权威指南》###########################

主要是为记录自己学习HTTP的过程!

URL组成部分:方案://主机:端口号/路径名:参数?查询组件#片段

1、  方案

方案实际上是规定如何访问指定资源的主要标识符,它会告诉负责解析URL的应用程序应该使用什么协议。

方案组件必须以一个字母符号开始,由第一个“:”符号将其与URL的其余部分分割开来。方案名是大小写无关的。

 

2、  主机与端口号

要想在因特网上找到资源,应用程序要知道是哪台机器转载了资源,以及在那台计算机上什么地方可以找到能对目标资源进行访问的的服务器。URL的主机和端口组件提供了这两组信息。

主机组件标识了因特网上能够访问资源的的宿主机器。可以用主机名或IP地址来表示主机名。

端口组件标识了服务器正在监听的网络端口。是下层使用的TCP协议的HTTP来说,默认端口为80。

3、用户名和密码

更有趣的组件是用户和密码组件。很多服务器都要输入用户名和密码才会允许用户访问资源。FTP服务器就是这样一个常见的例子:
ftp://ftp.prep.ai.mit.edu/pub/gnu

ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu

ftp://anonymous:passwd@ftp.prep.ai.mit.edu/pub/gnu

http://joe:password@www.joes-hardware.com/sales_info.txt

第一个例子没有用户或密码组件,只有标准的方案、主机和路径。如果某应用程序使用的URL方案要求输入用户名和密码,比如FTP,当用户没有提供,它通常会插入一个默认的用户名和密码。比如如果向浏览器提供一个FTP URL,当没有指定用户名和密码,它就会插入anonymous(匿名用户)作为你的用户名,并发送一个默认的密码(Internet Explorer会发送IEuser,Netcape Navigator则会发送mozila)

第二个例子显示了一个指定为anonymous的用户名。这个用户名和主机组件组合在一起,看起来像Email地址一样。字符“@”将用户和密码组件与URL的其余部分分隔开来。

在第三个例子中,指定了用户名和密码,两者之间使用“:”分隔。

4、路径

URL的路径组件说明了资源位于服务器的什么地方。路径通常很像一个分级的文件系统路径。比如http://www.joes-hardware.com:80/seasonal/index-fall.html

这个URL中的路径/seasonal/index-fall.html,很像Unix文件系统中的文件系统路径。路径是服务器定位资源是所需的信息。可以用字符“/”将HTTP URL的路径组件划分为一些路径段(path segment)(还是与UNIX文件系统中的文件路径类似),每个路径段都有自己的参数(param)组件。

5、参数

对很多方案来说,只有简单的主机名和到达对象的路径是不够的。除了服务器正在监听的端口,以及是否能够通过用户名和密码访问资源外,很多协议都还需要更多的信息才能工作。

负责解析URL的应用程序需要这些协议参数来访问资源。否则,另一端的服务器可能就不会为请求提供服务,或者更糟糕的是,提供错误的服务器。比如,像FTP这样的协议,有两种传输模式,二进制和文本形式。你肯定不希望以文本形式来传送二进制图片,这样的话,二进制图片可能会变得一团糟。

为了向应用程序提供它们说需要的输入参数,以便正确地与服务器进行交互,URL中有一个参数组件,这个组件就是URL中的名值对列表,由字符“;”将其与URL的其余信息(以及各名值对)分隔开来。它们为应用程序提供了访问资源所需的所有附加信息。比如:

ftp://prep.ai.mit.edu/pub/gnu;type=d

在这个例子中,有一个参数type=d,参数名为type,值为d。

如前所述,HTTP URL的路径组件可以分为若干路径段。每段都可以有自己的参数。比如:

http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

这个例子就有两个路径段hammers和index.html。hammers路径段的有参数sale,其值为false。index.html段有参数graphics,其值为ture。

6、查询字符串

很多资源,比如数据库服务,都是可以通过提问题或进行查询来缩小所请求资源类型范围的。假设Joe的五金商店在数据库中维护着一个未售货物的清单,并可以对清单进行查询,以判断产品是否有货,那就可以用下列URL来查询web数据库网关,看看编号为12731的条目是否有货:

http://www.joes-hardware.com/inventory-check?ietm=12731

这个URL的大部分都与我们见过的的其他URL类似。只有问好“?”右边的内容是新出现的。这部分被称为查询(query)组件。URL的查询组件和标识网关资源的URL路径组件一起被发送给网关资源。基本上可以将网关当做访问其他应用程序的访问点。

图2-2中有一个作为Joe的五金商店清单查询应用程序的网关的服务器,在这个例子中向此服务器发送了一个查询组件。查询的目的是检查清单中是否有尺寸为large、颜色为blue的条目12731。

7、片段

有些资源类型,比如HTML,除了资源级之外,还可以做进一步的划分。比如对一个带有章节的大型文本文档来说,资源的URL会指向整个文本文档,但理想的情况是,能够指定资源中的那些章节。

为了引用部分资源或资源的一个片段,URL支持使用片段(frag)组件来表示一个资源内部的片段。比如:URL可以指向HTML文档中一个特定的图片或小节。

片段挂在URL的的右手边,最前面有一个字符“#”。比如:

http://www.joes-hardware.com/tools.html#drills

在上述的例子中,片段drills引用了Joe的五金商店Web服务器上页面/tools.html中的一个部分。这部分的名字叫做drills。

HTTP服务器通常只处理整个对象,而不是对象的片段,客户端不能将片段传送给服务器(见下图)浏览器从服务器获得了整个资源之后,会根据片段来显示你感兴趣的的那部分资源。如下图所示

HTTP之URL的组成部分的更多相关文章

  1. url的组成部分

    /news/index.asp?boardID=5&ID=24618&page=1#name 协议:http: //为分隔符 域名:www.aspxfans.com :为域名和端口之间 ...

  2. php parse_url 解析URL并返回其组成部分

    [导读] php parse_url 函数教程parse_url ( PHP 4中, PHP 5中) parse_url -解析URL并返回其组成部分 描述 混合parse_url (字符串$网址[摘 ...

  3. java中文乱码解决之道(八)-----解决URL中文乱码问题

    我们主要通过两种形式提交向服务器发送请求:URL.表单.而表单形式一般都不会出现乱码问题,乱码问题主要是在URL上面.通过前面几篇博客的介绍我们知道URL向服务器发送请求编码过程实在是实在太混乱了.不 ...

  4. 【阮一峰】深入研究URL编码问题及JavaScript相应的解决方案

    作者: 阮一峰 日期: 2010年2月11日 一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上 ...

  5. url编码

    url编码 情况1:网址路径中包含汉字 打开IE,输入网址”http://zh.wikipedia.org/wiki/春节”.注意,”春节”这两个字此时是网址路径的一部分. 查看HTTP请求的头信息, ...

  6. URL编码 utf-8 gb2312的区别

    一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址“http://www.abc ...

  7. URL参数为url,获取不到部分参数问题

    url1中的参数含有url2,在页面上获取url时发现url后面跟的参数获取不到,其实是浏览器把url2中&后的参数作为url1的参数来处理了. 如:http://www.ilcng.com/ ...

  8. 网络编程3-URL编程(URL)

    1.URL(Uniform Resource Locatior) 统一资源占位符,表示Intenet上某一资源的地址 2.URL的组成部分 传输协议:主机名:端口号:文件名 例:http://192. ...

  9. 【转】关于URL编码/javascript/js url 编码/url的三个js编码函数

    来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),e ...

随机推荐

  1. 基于直接缓冲区和非直接缓冲区的javaIO文件操作

    基本概念: 1. 非直接缓冲区:  指的是通过jvm来缓存数据的,应用程序要读取本地数据要经历从本地磁盘到物理内存,然后copy到jvm中,然后再通过流的方式读取到应用程序中,写的操作正好与之相反. ...

  2. v-model绑定一个对象,组件内部分别负责不同字段的场景实现

    我们知道v-model对于单个property双向数据绑定非常有用,保持父子组件之间的数据传递和同步,但也有很多场景下希望一个组件能够处理多个数据字段,这时就有一些小小技巧了. https://sim ...

  3. 2019 奥买家java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.奥买家等公司offer,岗位是Java后端开发,因为发展原因最终选择去了奥买家,入职一年时间了,也成为了面试官 ...

  4. 高精度gcd

    #include<iostream> #include<cstdio> #include<cstring> #define inf 1000000000 using ...

  5. DRF简易了解

    Drf框架 一丶API接口 # 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本. ...

  6. Android View篇之自定义验证码输入框

    首先,我们来看看实现的是怎么样的效果: 如果我们拿到这样的UI,想到的布局应该是用4个EditText包在横向的LinearLayout里面,但今天要讲的View,所以我们决定用一个自定义的EditT ...

  7. Centos7 安装 zabbix 4.0

    参考文档: https://www.zabbix.com/download?zabbix=4.0&os_distribution=centos&os_version=7&db= ...

  8. 3-1 Pandas-概述

    Pandas章节应用的数据可以在以下链接下载: https://files.cnblogs.com/files/AI-robort/Titanic_Data-master.zip Pandas:数据分 ...

  9. Python 大佬 的经典设计格言 ---- 铭记于心

    美丽优于丑陋.清楚优于含糊.简单优于复杂.复杂优于繁琐.平坦优于曲折.宽松优于密集.重要的是可读性.特殊的案例不足以特殊到破坏规则.尽管实践可以打破真理.错误却不可置之不理.除非另有明确要求.面对模棱 ...

  10. c# 第19节 Arraylist数组

    本节内容: 1:ArrayList是什么 2:ArrayList数组的添加 3:ArrayList的方法 4:ArrayList 的删除 4:ArrayList 的遍历与查找 1:ArrayList是 ...