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. Json序列化与反序列化(对象与Json字符串的转换)--C#

    public class JsonHelper { #region Json序列化与反序列化 /// <summary> /// 将json转化为对象 /// (需要提前构造好结构一致的M ...

  2. Asp.Net后台弹出确认提示窗Confirm

    前端js代码: function MyConfirm(message, guid) { if (confirm(message) == true) { document.getElementById( ...

  3. 最新版windows安装支持输入shell命令的工具cygwin教程

    首先去官网下载自己对应系统32位或64位系统版本安装包:https://cygwin.com/install.html 下载好后按提示一步一步安装,直到这一步: 初次安装,这里是空的,没有下载的镜像链 ...

  4. 替换 Docker 或 Laradock 中 Debian 系统镜像源解决软件安装问题

    Docker Debian 镜像源替换 因多数默认的 Docker 镜像为国外的,而采用的镜像源也是国外的,故访问很慢,所以我们需要替换为国内的(比如阿里云或163等). 163 - Debian A ...

  5. java 反射基本认识

    java 反射基本认识 最近重新复习java反射的知识,有了新的理解. class类? 在面向对象中,万事万物皆对象.类也是个对象,是java.lang.class类的实例对象. public cla ...

  6. 获得用户的真实ip HTTP_X_FORWARDED_FOR

    工作中经常会有有获得用户真实ip的情况,HTTP_X_FORWARDED_FOR总是忘记,所以我这里记录下来吧. 在PHP 中使用 [“REMOTE_ADDR”] 来取得客户端的 IP 地址,但如果客 ...

  7. 白话SCRUM之一:SCRUM 的三个角色

    在SCRUM方法中将项目的利益相关者分成两大类:Pigs角色与chickens角色,pigs即为项目组的实际参与人员,chickens为项目组的外部人员,包括经理.最终用户等等.Pigs在scrum中 ...

  8. python中property简单使用与实现

    property简单使用 class P: """ property简单使用 """ def __init__(self,name): se ...

  9. 渗透技巧——Windows系统的帐户隐藏

    渗透技巧——Windows系统的帐户隐藏 2017-11-28-00:08:55  0x01 帐户隐藏的方法 该方法在网上已有相关资料,本节只做简单复现 测试系统:·Win7 x86/WinXP 1. ...

  10. LOJ 510: 「LibreOJ NOI Round #1」北校门外的回忆

    题目传送门:LOJ #510. 题意简述: 给出一个在 \(K\) 进制下的树状数组,但是它的实现有问题. 形式化地说,令 \(\mathrm{lowbit}(x)\) 为在 \(K\) 进制下的 \ ...