浅析 URL

326 阅读4分钟

什么是URL?

  • URl是缩写,全称是 英 Uniform Resource Locato 中文 统一资源定位符,也是我们熟知的"网页地址"简称:"网址".
  • URL 是有多个部分组成.
  • developer.mozilla.org/zh-CN/docs/…

  • URL包括 协议 , 域名 , 端口号 , 路径 , 查询参数 , 锚点

URL示意图

HTTP协议

  • 它表明了浏览器必须使用何种协议。
  • 常见的协议有 HTTP HTTPS FTP
    • http 超文本传输协议
      • 默认使用端口 80
    • https 安全套接字层超文本传输协议(HTTP的安全版)
      • 默认使用端口 443
    • FTP 文件传输协议
      • 默认使用端口21

域名

  • 它表明正在请求哪个Web服务器。
  • 一个域名可以对应不同的IP
    • 这个叫做均衡负载,防止一台机器扛不住
  • 一个IP对应不同的域名
    • 共享主机
  • 常见的比如:.com 表示商业机构,.org表示非盈利性组织。.gov表示政府机构。.edu表示教育及科研机构等。
  • 域名的类型 :www.baidu.com和baidu.com是不同的域名
    1. .com是顶级域名
    2. baidu.com是二级域名(俗称一级域名)
    3. www.baidu.com 是三级域名(俗称二级域名)
    4. 所以www.baidu.com是baidu.com的子域名
    5. 例如,github.io是github的域名, userid.github.io是每个用户的域名
  • 域名是对IP的别称

域名和IP怎么对应起来?DNS!

  • DNS 是一个解析器,能够把 baidu.com 解析成 220.181.111.188 让机器理解。
  • DNS是用来做域名解析的,它会在你上网输入网址后,把它转换成IP,然后去访问对方服务器,没有它,你想上百度就要记住百度的IP,上163就要记住163的IP,有了DNS的处理,你只需要记住对应网站的域名–也就是网址就可以了。
  • 想知道DNS的记录 可以用 nslooup命令
    • nslookup用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题。
    • nslookup baidu.com
    • 它就默认会用WiFi的网关dns解析这个域名的ip,返回的是域名的ip地址

    IP

    • ip地址是用来定位互联网世界中的一台设备,每个上网的设备都有自己独立的IP地址 IP分为外网IP和内网IP

IP 示意图

  • 怎么查看自己的ip?
    • 在cmd命令上通过输入ipconfig 即可查看自己的IP了
  • 查看服务器IP? ping命令
    • Ping是一个十分好用的TCP/IP工具。它主要的功能是用来检测网络的连通情况和分析网络速度。 通过在命令行上, 比如: ping baicu.com 即可看到QQ服务器当前的IP地址,不过有的服务器可能ping不通,这个要看具体服务器是否开启了ping的权限了。

端口

  • 它表示用于访问Web服务器上的资源的技术“门”。如果Web服务器使用HTTP协议的标准端口(HTTP为80,HTTPS为443)来授予其资源的访问权限,则通常会被忽略。否则是强制性的。
  • 一台服务器可以提供很多服务,每个服务有不同的号码,这个号码就是端口
  • 一台机器有很多端口比如 :80端口:HTTP服务 443端口:HTTPS服务 21端口: FTP服务
  • 端口使用规则
  • 0-1023端口是系统用的,我们一般使用1024以后的端口

路径

查询参数

  • ?key1=value1&key2=value2 是提供给网络服务器的额外参数。 这些参数是用 & 符号分隔的键/值对列表。在返回资源之前,Web服务器可以使用这些参数来执行额外的操作。
  • 请求同一个页面,能得到不同内容
  • www.baidu.com/s?wd=hi

  • www.baidu.com/s?wd=hello

锚点

  • #SomewhereInTheDocument 是资源本身的另一部分的锚点. 锚点表示资源中的一种“书签”,给浏览器显示位于该“加书签”位置的内容的方向。例如,在HTML文档上,浏览器将滚动到定义锚点的位置;在视频或音频文档上,浏览器将尝试转到锚代表的时间。值得注意的是,#后面的部分(也称为片段标识符)从来没有发送到请求的服务器。
  • 同一内容,不同位置
  • 锚点是不支持中文的,会把中文编码
  • 锚点是不经过服务器,应为是本地内容.所以服务器不会阅读"#"之后的内容,也不能传参数

curl 命令

  •      curl -v http://www.baidu.com
    
  • curl 发出HTTP请求
    • 向DNS查询域名对应的IP地址
    • 建立TCP连接,TCP连接建立好之后,开始发送HTTP请求
    • 下图中以大于号开始的
    • > GET / HTTP/1.1到 > Accept: */*是请求头

  • 之后服务器会发送回来一个响应
    • 分为响应头和响应体
    • 以下内容是响应头

  • 响应体就是HTML页面
  • 响应结束后,关闭TCP连接
  • HTTP请求结束