【HTTP全解】浅析 URL

451 阅读9分钟

内容提要:

  1. URL 包含哪几部分,每部分分别有什么作用
  2. DNS 的作用是什么,nslookup 命令怎么用
  3. IP 的作用是什么,ping 命令怎么用
  4. 域名是什么,分别哪几类域名

URL的组成部分

传输协议 + 域名或IP + 端口号 +路径 + 查询字符串 + 锚点

eg.

https://www.baidu.com/swd=hello&rsv_spt=1#5

==传输协议== + 域名或IP + 端口号 + ++路径++ + 查询字符串 + 锚点

eg.

==https://==www.baidu.com++/s++wd=hello&rsv_spt=1#5

  • 传输协议( scheme: [protocal] ):httphttpsftp
  • 域名( [//authority] Domain Name ):www.baidu.com
  • 端口( :Port ):通常省略,:80:443:8080等(http 大部分默认80, https默认443)

[//authority] = [userinfo@]host[:port]

  • 路径( Path to the file):/s
  • 查询参数([?query] Parameters ):wd=hello&rsv_spt=1或者?key1=value1&key2=value2
  • 锚点( [#fragment] Anchor ):#5

另一个常见的 URL(URI) 的例子:

zh.wikipedia.org/w/index.php…

  • https:协议
  • zh.wikipedia.org:域名
  • /w/index.php:路径(不同的页面)
  • ?title=Special:随机页面:查询参数(相同页面,不同内容)
  • #5:锚点(相同页面,相同内容,不同位置)

其中若不写端口号,则表示使用 https 对应的默认端口号 443

localhost:8080

DNS(Domain Name System):域名系统

作用:根据域名查出IP地址

即:将域名解析为IP 地址

nslookup可查询IP(DNS)地址

直接使用可以查询到域名的 A 记录

nslookup 命令用于查询 DNS 的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题

# nslookup + 域名
nslookup domain [dns-server]
nslookup xmasuhai.xyz

IP的作用,ping 命令用法

  • 一是定位一台设备
  • 二是封装数据报文跟其他设备交流

ping 命令是常用的网络命令,它通常用来测试与目标主机的连通性。

即:

  • 标识主机,具体地说,标识其网络接口,并且提供主机在网络中的位置,就此提供创建到达该主机的路径的能力。
  • 每个 IP 数据包的标头包含了发送主机的 IP 地址和目的主机的 IP 地址。
# ping [参数][主机名或ip地址]
ping baidu.com

域名(Domain Name)

是互联网的一项服务,主要用于域名与 IP 地址的相互转换

如果要访问一个地址(使用域名),都要先通过DNS查询域名对应的IP地址,才能进行访问

域名分类

域名分顶级域名,二级域名和三级域名

比如对于 www.baidu.com

  1. 顶级域名:com
  2. 二级域名:baidu.com
  3. 三级域名:www.baidu.com

域名的第一级是顶级域,它包括通用顶级域,例如.com、.net 和.org;

以及国家和地区顶级域,例如.us、.cn 和.tk。

完整域名的所有字符加起来不得超过 253 个 ASCII 字符的总长度。

当每一级都使用单个字符时,限制为 127 个级别:127 个字符加上 126 个点的总长度为 253。

但实际上,某些域名可能具有其他限制;也没有只有一个字符的域名后缀。


内容提要卐,后面是视频记录流水账


问:hosts 文件在哪?

答: 在 Windows 系统中,hosts 位于 C:\Windows\System32\drivers\etc\hosts

在 macOS / Linux系统中,hosts 位于 /etc/hosts

网络和 IP

李爵士的发明

WWW=URL+HTTP+HTML

HyperText Transfer Protocol协议

IP: Internet Protocol

IP(Internet Protocol)主要约定

1.如何定位一台设备 2.如何封装数据报文(用来和其他设备交流)

互联网(not WWW),至少一个独特的IP

IP分内网和外网

设备 路由器 电信DNS服务器 其他用户

获取外网IP 买 | 蹭

  • 首先,你需要租用宽带(电信或者联通)
  • 其次,你需要购买一个路由器(有时候也被叫做“网关”)
  • 当路由器连接上电信或者联通的服务器后,路由器就会获得一个外网的IP,所有通过路由器连接的设备,他们的外网IP都是一致的。
  • 注意:如果当你重启路由器之后,可能会被分配一个新的外网IP,也就是说,路由器是没有一个固定的外网IP,除非高价买,企业级需要

内网IP

  • 路由器创建内网,内网中的设备使用内网IP,格式192.168.xxx.xxx192.168.1.1
  • 路由再给每一个内网中的设备(PC、手机)分配一个不同的内网IP
  • 内网的所有设备都有一个相同的外网IP
  • 路由器会为每一个内网中的设备分配一个不同的内网IP

内网IP固定

查看IP

ping xxx.com
ipconfig

查看ip38.com

路由器的功能

  1. 路由器有两个IP,内外各一
  2. 内网中的设备可互相访问,但不可直接访问外网
  3. 内网设备通过路由器中转,访问外网
  4. 外网设备无法访问你的内网,不管直接间接
  5. 外网把内容推送到内网,必须通过路由
  6. 内外隔绝,路由是唯一联通点,即网关

几个特殊的IP

  1. 127.0.0.1表示自己
  2. localhost通过hosts指定为自己
  3. 0.0.0.0不表示任何设备,后端用

端口

一台机子可提供很多服务,每个服务一个号码,即端口号port

不同的服务

  1. 提供HTTP服务,最好使用80端口
  2. 提供HTTPS服务,最好443端口
  3. 一共有65535个端口,FTP是21端口
  4. 该用什么端口:端口对应的服务列表wiki

其他使用规则

  1. 0到1023(2的10次方减1,计1024个)号端口,留给系统使用,自己使用须取得管理权限
  2. http-server默认使用8080端口
  3. 一个端口被占用时,只能换另一个

总之,IP和端口缺一不可

域名、路径、查询参数、锚点

qq.comt.tt

域名:对IP的别称

ping baidu.com

#将得到四个回复(win),mac 需ctrl+c中断

baidu.com对应ping baidu.comqq.com对应ping qq.com

知识点

  • 一个域名可以对应不同IP,即均衡负载,分流,防止一台机子扛不住,或者恶意的D-Dos攻击,网站优化策略
  • 一个IP可对应不同域名,即穷开发者的共享主机

域名和IP,怎么对应起来?

  • 通过DNS

当你输入xiedaimala.com

Chrome开发者工具中,Network面板,xiedaimala.com点击,Headers里,请求根目录https://xiedaimala.com/

得到响应Response 一串HTML代码,请求CSS,请求图片,请求js等

过程

客户端向DNS服务器(DNS服务器有自己的IP地址)发送域名查询请求

DNS服务器告知客户机Web服务器的IP地址

  • 提供DNS的服务器的服务商:电信或联通等
  • 浏览器向提供DNS的服务器询问xiedaimala.com对应什么IP
  • 服务器回答一个IP(具体过程三次握手、四次握手,面试必问)
  • 请求内容是查看这个网址的网页

eg.xiedaimala.com的首页index.html

why 80443端口

  • 服务器默认用80提供http服务
  • 服务器默认用443提供https服务
  • 在开发者工具查看具体端口
  • 不需要写在地址栏里,写了也帮你消掉

nslookup

nslookup -qt=[type] domain [dns-server]

type可以是:

  • A 地址记录
  • AAAA 地址记录(IPv6)
  • CNAME 别名记录
  • HINFO 硬件配置记录,包括 CPU、操作系统信息 等

询问域名,域名ns,寻找lookup

nslookup baidu.com

默认自动设置 电信DNS 114.114.114.114 备用 114.114.115.115

题外话

www

  • A:www.xiedaimala.com和B:xiedaimala.com不是同一个域名
  • com(没有点)是顶级域名
  • xiedaimala.com是二级域名(俗称一级域名)
  • www.xiedaimala.com是三级域名(俗称二级)
  • 祖父子关系
  • github.io把子域名xxx.github.io免费给你使用
  • A和B可以不是同一家公司
  • www是多余的,历史残留,脱x子放*

如何请求不同的页面

用路径
工具

使用Chrome开发者工具Network面板查看区别

同一个页面,不同内容

用查询参数:https://xxx.com/s?wd=hello

同一个内容(页面),不同位置

用锚点

锚点就是文档内部的定位

注意:

  • 锚点看起来有中文,实际不支持中文
  • #参考书会变成#%E5%8F%82%E8%80%83%E4%B9%A6
  • 锚点不会传给服务器,所以是无法在Network面板里看到的

URL

统一资源定位符(Uniform Resource Locator),简称URL,是因特网上标准的资源的地址(Address)

Every HTTP URL conforms to the syntax of a generic URI.

每个有效的 URI 都指向一个独特的资源。这个资源可以是一个 HTML 页面,一个 CSS 文档,一幅图像、视频、邮件、PDF等

The URI generic syntax consists of a hierarchical sequence of five components

  • URI = scheme:[//authority]path[?query][#fragment]
  • -authority = [userinfo@]host[:port]

wiki:URL

组成

传输协议 + 域名或IP + 端口号 +路径 + 查询字符串 + 锚点

eg.

https://www.baidu.com/swd=hello&rsv_spt=1#5

**www.baidu.com**是域名。 表明正在请求哪个 Web 服务器。或者,可以直接使用 IP address, 但因为不便,所以不常使用。

就算没写,也应知道端口,HTTPS默认端口443,通常省略

/path/to/index.html 是网络服务器上资源的路径,路径表示访问哪个网页

ftp://是文件传输协议,不属于www,本地或局域网

wd=hello&rsv_spt=1?key1=value1&key2=value2 是提供给网络服务器的额外参数。 这些参数是用 & 符号分隔的键/值对列表。

wd=hello&rsv_spt=1查询字符串表示页面的展示内容,第几部分,第几章,第几页,或者查询关键词

在返回资源之前,Web服务器可以使用这些参数来执行额外的操作。

#Anchor#SomewhereInTheDocument是资源本身的另一部分的锚点。

锚点表示资源中的一种“书签”,给浏览器显示位于该“加书签”位置的内容的方向。 例如, 在 HTML 文档上,浏览器将滚动到定义锚点的位置

在视频或音频文档上,浏览器将尝试转到锚代表的时间

#后面的部分(也称为片段标识符)[fragment]从来没有发送到请求的服务器

锚点会被浏览器‘吃掉’,锚点只和浏览器有关,没必要发送给服务器

服务器无法接收#之后的内容,参数,不想被扣年终bonus的记住

HTTP协议

基于TCPIP两个协议:也称TCP/IP

curl 命令

curl可以发HTTP请求

  • curl https://xiedaimala.com
  • curl -v http://baidu.com
  • curl -v -- http://baidu.com

-v:verbose 啰嗦模式

理解以下概念

  • url会被curl工具重写,先请求DNS获得IP
  • 先进行TCP连接,TCP连接成功后,开始发送HTTP请求
  • 请求内容看一眼
  • 相应内容看一眼
  • 响应结束后,关闭TCP连接(看不出来)
  • 真正结束

规定请求的格式是什么,响应式格式是什么


·未完待续·

参考文章

相关文章