JuneDeng


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

HTTP & Web Servers Unit 1 Lesson 4 Hostnames and ports

发表于 2017-12-19 | 分类于 技术

Hostnames

一个完整的 HTTP 或 HTTPS URI包含网络服务器的主机名,比如 www.udacity.com 或者 www.un.int 或者 www.cheeseboardcollective.coop 。URI的主机名也可以是一个IP地址。
如果在浏览器键入:http://216.58.194.174/ 会访问Google。

为什么叫做主机名?
在网络术语中,一个主机就是在网络上的一台能够托管服务的电脑。

互联网通过IP地址区分不同的电脑;互联网上每一次的网络通讯,都标记了发送和接收方的IP地址。为了连接到一个网络服务器,比如 www.udacity.com , 客户端需要将其主机名转换为IP地址。我们的操作系统网络配置使用域名服务(Domain Name Service) - 由互联网服务提供商 (isp) 和其他网络用户维护的一组服务器 - 查找主机名,获取IP地址。

在终端,我们可以使用 host 程序在DNS中来查找主机名。
在终端中输入 host www.google.com ,输出如下:
www.google.com has address 66.220.152.28
www.google.com has IPv6 address 2404:6800:4008:800::2004

在终端中输入 host www.baidu.com ,输出如下:
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 61.135.169.121
www.a.shifen.com has address 61.135.169.125

在浏览器地址栏输入百度的IP地址: 61.135.169.125 或 61.135.169.121 会访问百度的主页。

有一些系统没有 host 命令,但有一个类似的命令叫做 nslookup 。这个命令也会展示你给出的主机名的IP地址,它还会显示给出答案的DNS服务器的IP地址。

我的测试结果:
june:~ june$ nslookup www.google.com
Server: 192.168.1.150
Address: 192.168.1.150#53

Non-authoritative answer:
Name: www.google.com
Address: 31.13.71.23

june:~ june$ nslookup www.baidu.com
Server: 192.168.1.150
Address: 192.168.1.150#53

Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 61.135.169.125
Name: www.a.shifen.com
Address: 61.135.169.121

localhost 的 IPv4 地址是什么?
用 host 或者 nslookup 在终端测试一下。
答案:127.0.0.1

有两种不同的IP地址:老的 IPv4 和 新的 IPv6 。
如果你看到一个地址如 127.0.0.1 或者 216.58.194.164 ,这些是IPv4地址。
IPv6地址要长一些,如 2607:f8b0:4005:804::2004 ,但是这些地址可以缩写。

Localhost

IPv4地址 127.0.01 和IPv6地址 ::1 是特定的地址,指这台电脑自己。主机名 localhost 指代的就是这些特定的地址。

当运行示例服务器的时候,会打印出一条消息,正在监听 0.0.0.0 端口。这不是一个常规的IP地址。相反,它是一个特定的编码,指代”这台电脑上的所有IPv4地址”,包含 localhost ,也包含你电脑的常规IP地址。

Ports

当你告知浏览器连接到示例服务器,你在浏览器输入URI http://localhost:8000 。这个URI有一个端口号:8000 。但你在自然环境中看到的大部分网络地址上是没有端口号的。这是因为客户端通常可以通过URI方案知道端口号。

例如,HTTP URIs意味着端口号为 80 ,而HTTPS URIs意味着端口号为 443 。你的python示例服务器运行在8000端口。因为这不是默认的端口号,所以我们需要在URI中指明其端口号。

到底什么是端口号? 为了了解这个,我们需要先知道互联网是如何工作的。电脑发送和接收的所有的网络通信 - 从网络请求到登录回话,再到文件共享等 - 消息都被拆分为数据包。每个包都有发送方和接收方电脑的IP地址。也有发送方和接收方的端口号(某些低级的数据包,比如ping例外)。IP地址区分电脑;端口号区分这些电脑上的程序。

我们说服务器“监听”某个端口,比如 80 或者 8000,“监听”意味着服务器开启了,它告知操作系统它想要在某个特定端口接收客户端的连接。当一个客户端,比如一个网络浏览器,“连接”到这个端口,发送一个请求,操作系统知道将该请求转发到服务器监听的端口。

为什么我们的示例服务器使用 8000 端口而非 80 端口?由于历史原因,操作系统只允许管理员(或者根)账号监听1024之下的端口。这对于生产网络服务器没有问题,但对于学习不太方便。

想了解更多关于地址,端口和互联网的运作,可查看该课程 Web 开发者的网络入门

查看原文

HTTP & Web Servers Unit 1 Lesson 3 Parts of a URI

发表于 2017-12-18 | 分类于 技术

Parts of a URI

网络地址也叫做URI,统一资源标识符。
从网络用户的角度来看,URI就是一段文本你键入到浏览器,告知浏览器你想访问哪个页面。
从网络开发者的角度来看,URI要稍微复杂点.

你或许见过术语URL,或者统一资源定位符。两者非常接近。具体来说,url是网络资源的URI。
a URL is a URI for a resource on the network.
因为URI稍微更精确一点,我们在课程中会使用该术语。
不必太担心二者之间的区别。

一个URI即一个资源的名字 - 就比如眼前这个页面,一个维基百科的文章,一个数据资源比如Google地图的api。
URI由几个部分组成,每个部分都有自己对语法。
有些部分是可选的,这就是为什么不同服务的URI不同于彼此。

这是一个URI的例子:https://en.wikipedia.org/wiki/Fish

这个URI有三个可见的部分,由一些标点符号分开:

  • https is the scheme;(方案)
  • en.wikipedia.org is the hostname;(主机名)
  • and /wiki/Fish is the path;(路径)

Scheme

URI的第一部分是方案(scheme),告诉客户端如何获取资源。
常见的URI方案有:http,https,file。
文件URI方案告诉客户端在本地文件系统获取文件。
http和https URI指向网络服务器提供的资源。

http和https URIs看起来基本一样。区别在于,当一个客户端通过https URI去获取一个资源,会使用加密的连接。
加密的网络连接最初用于保护密码和信用卡交易,但现在,很多的网站会使用它们保护用户的隐私。

还有很多其他的URI方案。可在http://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml 查看。

Hostname

在http URI中,方案之后就是主机名(hostname):比如www.udacity.com或者localhost。这告知客户端连接到哪个服务器。

我们经常看到网络地址写得和主机名一样。但在html代码中,我们不能这样写
<a href="www.google.com">this</a>就连接到Google。
主机名只能出现在它支持的URI方案之后,比如 http 或者 https 。在这些URIs之后,必须还有 :// 分开方案和主机名。
不是所有的URIs都有主机名。比如 mailto URI只需要一个邮箱地址: malito:spamexample.net 就是一个符合语法规范的 mailto URI。这也稍微更多地展现了URI中的标点符号用法: : 在方案之后,// 在主机名之前。mailto 没有主机名部分,所以没有 // 部分。

Path

在http URI(和很多其他),下一个出现的就是路径,指明了服务器上的一个特定的资源。
一个服务器可以有很多资源在上面 - 比如不提的网页,视频或者api。路径告知服务器客户端要查找的是哪一个资源。

在之前的示例服务器上,你看到的路径与你的文件系统上的文件相对应。
真实世界中,URI路径并不一定与特定的文件名相同。比如,如果你Google搜索,你会看到一个类似
/search?q=ponies 的URI路径。这并不意味着Google服务器上有一个名为 /search?q=ponies 的文件。
服务器解析路径,确定发送什么资源。
在搜索请求的例子中,服务器会发送回之前可能从未存在过的搜索结果页面。

如果写一个没有路径的URI,比如http://udacity.com,浏览器会自动填充默认路径,即一个斜杠。
http://udacity.com和http://udacity.com/ (单斜杆结尾) 是一样的。

一个斜杠的路径也叫做根(root)。
示例服务器的根URI - http://localhost:8000/ -就是你电脑的整个文件系统的根,即网络服务器提供的资源的根。示例服务器不会让浏览器获取不是它运行的目录下的文件。

Relative URI references

查看示例服务器根页面的html源码。看到其中的一个<a>标签链接到一个文件。
比如:<a href="cliffsofinsanity.png">cliffsofinsanity.png</a>
像这样的URIs没有方案或者主机名,只有一个路径。这就是相对URI引用(relative URI reference)。
这是相对于上下文 - 具体来说,即它出现的页面。
这个URI并不包含主机名或它所在服务器的端口,但浏览器能够从上下文弄清楚。
如果你点击其中的一个链接,浏览器根据上下文知道它需要从原始页面的同一个服务器去拿资源。

Other URI parts

一个URI中可能出现其他的部分。看看下面2个维基百科URIs的区别:

  • https://en.wikipedia.org/wiki/Oxygen
  • https://en.wikipedia.org/wiki/Oxygen#Discovery
    在浏览器中输入上面的链接,会访问维基百科网络服务器上的同一个页面。但第二个会展示页面滚动到氧气的发现这部分内容。
    # 符号之后的URI部分叫做 fragment (片段)。 浏览器不会将这部分发送到网络服务器。它只是让一个链接指向某个资源的一个具体的部分;在HTML页面中,它会通过 id 链接到某个元素。

相比之下,看看google搜索的URI:

  • https://www.google.com/search?q=fish
    ?q=fish 是URI的查询部分。这部分会发送到服务器。

URI可能还有其他的部分,可以在下面的维基百科页面查看更多详情:

  • https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax

查看原文

1…121314…32
June Deng

June Deng

make the world a better place

63 日志
2 分类
24 标签
GitHub
© 2018 June Deng
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4