HTTP入门笔记[1]:URL浅析

208 阅读7分钟

我们是如何“上网”的?
首先我们需要两台设备:一台“上网”的设备和一台提供“网”的设备。之后,我们会在“上网”设备中打开浏览器并输入网址,等待几秒后,网页就会呈现在我们的浏览器中。但其实在我们输入网址之后,我们的浏览器和和“网”那端的服务器,有着一系列的沟通:

  • 如果想要访问输入的网址,浏览器要获得服务器的IP地址
    (上网的过程,就像你开车去别人家,网址是对方住址的地名,而IP地址则是对方住址的实际经纬坐标。)
    ping 命令可以通过域名查询IP地址,我们也可以直接ping IP地址,来测试网络的连通情况。
  • 为了得到服务器的IP,浏览器会先去自己的缓存中查找,但如果缓存中没有对应IP,那么浏览器会去DNS服务器中查找(如果你在记忆中没有想到对方住址的记录,你肯定会在地图上搜索对方住址的信息,DNS就像地图一样)。
    nslookup 命令用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题
    nslookup domain [dns-server]
      //直接查询,如果没有指定dns服务器,就采用系统默认的dns服务器。
    
  • 浏览器获得了目标服务器的IP地址后,会向该地址发送HTTP请求报文。当然,在发送请求前,浏览器和服务器之间还会进行TCP三次握手(嘿,我能连你吗?/完全OjbK啊。/那我连了啊。)建立TCP连接。
  • 服务器接收浏览器的请求,并且做出响应。如果是浏览网站的话,此时服务器就会将浏览器请求的网页代码发给浏览器。我们可以使用curl命令来追踪get请求。
    curl http://www.baidu.com
    //不加任何选项使用 curl 时,默认会发送 GET 请求来获取链接内容到标准输出。
    curl -v www.baidu.com
    //-v 选项,--verbose,指定该选项后,可以跟踪URL的连接信息。
    curl -I http://www.baidu.com
    //只想要显示 HTTP响应头部,而不显示文件内容
    curl -i http://www.baidu.com
    //同时显示 HTTP 响应头部和文件内容
    
  • 浏览器接收服务器的响应,解析收到的HTML文档,并继续请求HTML文档中的js/css/图片等资源。
  • 浏览器对HTML文档进行渲染,将网页呈现给用户。

1. 什么是URL

URL就是我们常说的“网址”,URL的全称是Uniform Resource Locator,中文译为“统一资源定位符”,表示了万维网中某处资源的地址。

Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL地址,这种地址可以是本地磁盘,也可以是局域网上的某一台计算机,更多的是Internet上的站点。简单地说,URL就是Web地址,俗称“网址”。

HTTP使用的统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URI 包含了如何访问 Internet 上的资源的明确指令。URL是一种特殊类型的URI,包含了用于查找万维网上某个资源的全部信息。

URL 是统一的,因为它们采用相同的基本语法,无论寻址哪种特定类型的资源(网页、新闻组)或描述通过哪种机制获取该资源。

Windows 主机不区分 URL 大小写,但是,Unix/Linux 主机区分大小写。

2. URL的结构

我们通常输入浏览器的网址,一般会是这样:www.woshiwangzhi.com
但“www.woshiwangzhi.com”并不是真正的URL,而只是URL中的“服务器域名”,而URL的剩余部分,浏览器会帮我们自动补充。所以“www.woshiwangzhi.com”其实是:www.woshiwangzhi.com

URL一般由六部分构成,一般格式为(带方括号[]的为可选项):

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

而常见的URL为两部分:底层协议(http:/https:)+主机名(www.woshiwangzhi.com)

2.1 底层协议 protocol

URL由底层协议开头,协议(protocol)声明了浏览器与服务器之间的沟通方式。
在“www.woshiwangzhi.com”这样URL中,“http:”声明了浏览器与服务器之间采用HTTP协议。HTTP是一种基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)的协议,也是万维网中最常使用的协议。
底层协议并不限于HTTP,还有很多种其它协议,这说明浏览器除了访问网页,还有很多其它的作用。

最常见的底层协议有:

  • http 通过 HTTP 访问该资源。 格式 HTTP://
  • https 通过安全的 HTTPS 访问该资源。 格式 HTTPS://
  • file 资源是本地计算机上的文件。格式file:///,注意后边应是三个斜杠
  • ftp 通过 FTP访问资源,一般用于文件传输。格式 FTP://

这些协议,下载资源的时候会看到:

  • ed2k 通过 支持ed2k(专用下载链接)协议的P2P软件访问该资源。(代表软件:电驴) 格式 ed2k://
  • Flashget 通过 支持Flashget:(专用下载链接)协议的P2P软件访问该资源。(代表软件:快车) 格式 Flashget://
  • thunder 通过 支持thunder(专用下载链接)协议的P2P软件访问该资源。(代表软件:迅雷) 格式 thunder://

还有一些不怎么常用的:

  • mailto 资源为电子邮件地址,通过 SMTP 访问。 格式 mailto:
  • tencent 通过支持tencent(专用聊天连接) 协议和用户对话。(代表软件:QQ、TM)格式 tencent://message/?uin=号码&Site=&Menu=yes
  • msnim 通过支持msnim(专用聊天连接) 协议和用户对话。(代表软件:MSN、WLM) 格式 msnim:chat?contact=邮箱地址
  • gopher 通过 Gopher 协议访问该资源。
  • MMS 通过 支持MMS(流媒体)协议的播放该资源。(代表软件:Windows Media Player)格式 MMS://
  • news 通过 NNTP 访问该资源。

2.2 主机名 hostname/host

hostname(主机名):是指存放资源的服务器的域名系统 (DNS) 主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password)。 由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。 而我们一般识记的“网址”,就是域名(Domain Name),域名是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
域名不区分大小写。域名一般不能超过5级,从左到右域的级别变高,高的级域包含低的级域。域名在整个Internet中是唯一的,当高级子域名相同时,低级子域名不允许重复。一台服务器只能有一个IP地址,但是却可以有多个域名。

一般常见的域名构成为三级,对于“www.woshiwangzhi.com”来说,顶级域名为:.com,一级域名为woshiwangzhi,二级域名为www。一般中www前缀表明此域名对应着万维网服务。

2.3 端口 port

端口号在URL中属于非必填项,每个端口号对应一种服务。当URL中省略端口号时则使用传输协议默认的端口号,如http的默认端口为80。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项。

2.4 路径 path

由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。

2.5 发送给服务器的数据

这部分属于URL的非必填项,一般有两类:

  • ;parameters(参数):用于指定特殊参数的可选项。
  • ?query(查询):可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。
    比如在百度搜索“dog”时,URL中就会有“?dog”。

2.6 锚 anchor

对应网络资源中具体的一部分片段(fragment),信息片断,字符串。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。