HTTP之URL的组成部分
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的组成部分的更多相关文章
- url的组成部分
/news/index.asp?boardID=5&ID=24618&page=1#name 协议:http: //为分隔符 域名:www.aspxfans.com :为域名和端口之间 ...
- php parse_url 解析URL并返回其组成部分
[导读] php parse_url 函数教程parse_url ( PHP 4中, PHP 5中) parse_url -解析URL并返回其组成部分 描述 混合parse_url (字符串$网址[摘 ...
- java中文乱码解决之道(八)-----解决URL中文乱码问题
我们主要通过两种形式提交向服务器发送请求:URL.表单.而表单形式一般都不会出现乱码问题,乱码问题主要是在URL上面.通过前面几篇博客的介绍我们知道URL向服务器发送请求编码过程实在是实在太混乱了.不 ...
- 【阮一峰】深入研究URL编码问题及JavaScript相应的解决方案
作者: 阮一峰 日期: 2010年2月11日 一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上 ...
- url编码
url编码 情况1:网址路径中包含汉字 打开IE,输入网址”http://zh.wikipedia.org/wiki/春节”.注意,”春节”这两个字此时是网址路径的一部分. 查看HTTP请求的头信息, ...
- URL编码 utf-8 gb2312的区别
一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址“http://www.abc ...
- URL参数为url,获取不到部分参数问题
url1中的参数含有url2,在页面上获取url时发现url后面跟的参数获取不到,其实是浏览器把url2中&后的参数作为url1的参数来处理了. 如:http://www.ilcng.com/ ...
- 网络编程3-URL编程(URL)
1.URL(Uniform Resource Locatior) 统一资源占位符,表示Intenet上某一资源的地址 2.URL的组成部分 传输协议:主机名:端口号:文件名 例:http://192. ...
- 【转】关于URL编码/javascript/js url 编码/url的三个js编码函数
来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),e ...
随机推荐
- C# - VS2019调用ZXing.NET实现条码、二维码和带有Logo的二维码生成
前言 C# WinFrm程序调用ZXing.NET实现条码.二维码和带有Logo的二维码生成. ZXing.NET导入 GitHub开源库 ZXing.NET开源库githib下载地址:https:/ ...
- 如何down掉IB交换机口
服务器上找到需down的网络:ip a 通过ib命令iblinkinfo找到对应交换机以及在ib交换机上对应端口号 登录IB交换机,并通过命令:config进入配置模式 通过命令:port进入端口配置 ...
- Java自学-集合框架 遍历
遍历ArrayList的三种方法 步骤 1 : 用for循环遍历 通过前面的学习,知道了可以用size()和get()分别得到大小,和获取指定位置的元素,结合for循环就可以遍历出ArrayList的 ...
- swift中文版和网站
http://www.chinaz.com/swift/chapter2/01_The_Basics.html http://www.iphonetrain.com/video_info/290.ht ...
- 用SignApk.jar对APK进行签名
对apk签名需要使用SignApk.jar和签名文件.可以使用Android源码获取,若没有源码,可以在这下载:SignApk.jar.(包含了SignApk.jar和签名文件和批处理文件) 1 Si ...
- 3 测试使用和LogCat日志
测试概念: 1.根据是否知道源代码分: 黑盒测试:功能测试 白盒测试:编写代码进行测试 2.测试力度划分: 方法测试: 单元测试: 集成测试: 系统测试: 3.暴力程度划分: 压力测试: 冒烟测试:压 ...
- Django models 单表查询
从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet 1. 查看Django QuerySet执行的SQL .query.__str__()或 .query属性打印执行的sql语句 ...
- python学习3-python views.py的返回值
2.首先要说明一点是,对于HttpRequest对象来说,是Django自己创建的,但是HttpResponse就必须要我们自己创建.注意每个view方法都必须返回一个HttpResponse对象,H ...
- flask的request如何获取参数
1.request.form.get("key", type=str, default=None) 获取表单数据 2.request.args.get("key" ...
- springcloud注解解释
@SpringBootApplication是springboot启动类,包括三个注解,他们的作用分别是: @Configuration:表示将该类作用springboot配置文件类 @Enabl ...