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#循环结构
一.背景: 因编程的基础差,因此最近开始巩固学习C#基础,后期把自己学习的东西,总结相应文章中,有不足处请大家多多指教. 二.简介 有的时候,可能需要多次执行同一块代码.一般情况下,语句是顺序执行的: ...
- tf.argmax()解析
tf.argmax(input,axis)根据axis取值的不同返回每行或者每列最大值的索引. 代码如下: import tensorflow as tfimport numpy as npsess= ...
- Java基础—内部类
在Java语言中,可以把一个类定义到另一个类的内部,在类里面的这个类就叫作内部类,外面的类叫作外部类.在这种情况下,这个内部类可以被看成外部类的是一个成员(与类的属性和方法类似).还有一种类被称为顶层 ...
- PC端页面适应不同的分辨率的方法
原文链接:https://www.jianshu.com/p/4850a7b22228 一.根据不同的分辨率,加载不同的CSS样式文件 这个方法的思路是,分别针对800.1280.1440.1600. ...
- Redis 使用过程中遇到的具体问题
1.缓存雪崩和缓存穿透问题 1.1缓存雪崩 简介:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉. 解决办法: 事前:尽量保证整个 redis 集 ...
- log4j每天生成一个文件配置
log4j.rootLogger=INFO,CONSOLE,logDailyFile log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlo ...
- Python元组与字符串操作(10)——冒泡法
冒泡法 属于交换排序,元素两两比较大小,交换位置,结果可升序或降序排列 nums = [2,5,1,6,7,9,8,3,4] for i in range(len(nums)): ##计数器0~8 f ...
- ubuntu 16.04下node和pm2安装
一.安装node,这里安装9.0的版本,安装其它版本直接到https://deb.nodesource.com/setup_9.x找相应版本的更改既可 1.sudo apt-get remove no ...
- traceroute在linux中的使用方法
traceroute在linux中的使用方法 一.traceroute的实现原理 二.traceroute命令使用方法 1.命令格式 2.常用命令参数 3.使用实例 一.traceroute的实现原理 ...
- 201871010134-周英杰《面向对象程序设计(java)》第十六周学习总结
项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/ ...