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# 跨线程访问UI不报错,必须使用Invoke。
代码有时跨线程访问UI,修改按钮Enable属性不报异常.调试发现修改按钮属性的线程是Background,执行不报异常. 在窗体构造中添加 Control.CheckForIllegalCrossT ...
- Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)
Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...
- maven 学习---Maven Web应用
本教程将教你如何管理使用Maven版本控制系统管理一个基于Web项目.在这里,将学习如何创建/构建/部署和运行Web应用程序: 创建Web应用程序 要创建一个简单的java web应用程序,我们将使用 ...
- Tests in error:BlogApplicationTests.initializationError » IllegalState Unable to find a @Spri...【解决】
刚刚写完一个项目,准备打包,却发现无法打包. 然后认真排查了一下问题.发现少引入了一个插件. <plugin> <groupId>org.apache.maven.plugin ...
- testlink 1.9.19安装
环境平台: 系统:Centos 7.6 数据库:mysql 5.7 PHP版本:PHP 5.6 testlink版本:testlink- 链接:https://pan.baidu.com/s/10Pr ...
- Bayesian Optimization使用Hyperopt进行参数调优
超参数优化 Bayesian Optimization使用Hyperopt进行参数调优 1. 前言 本文将介绍一种快速有效的方法用于实现机器学习模型的调参.有两种常用的调参方法:网格搜索和随机搜索.每 ...
- flask中利用session实现用户记住密码
“记住密码”的实质,实际上就是把cookie的有效期设置的长一点,当用户没有选择记住密码时,cookie的有效期为会话结束,选择记住密码后,会根据服务器的设置延长cookie的有效期,默认是31天.在 ...
- No archetypes currently available. The archetype list will refresh when the indexes finish updating
配置方法: 1. 在卡住的而画面点击"config" 2. 点击"Add remote catalog", 然后设置华为云的maven仓库地址, 然后点击&qu ...
- Socket-window通讯
#define _WINSOCK_DEPRECATED_NO_WARNINGS #include<WINSOCK2.H> #include<STDIO.H> #include& ...
- maven settings
maven settings 私有服settigs <?xml version="1.0" encoding="UTF-8"?> <setti ...