URL 包含哪几部分

统一资源定位符 英语:Uniform Resource Locator,缩写:URL;
URL包含协议、域名或IP、路径、查询参数、锚点几个部分
image.png

协议

  • 对于前端而言,暂时只有HTTP和HTTPS两种协议,HTTPS默认端口443
  • HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准

    IP

    网际协议(英语:Internet Protocol,缩写:IP;也称互联网协议)是用于分组交换数据网络的一种协议。

IP主要约定了两件事:

  1. 如何定位一台设备
  2. 如何封装数据报文,以跟其他设备交流

    IP分为内网IP和外网IP

  • 现在路由器有两个IP,一个内网IP和一个内网IP
  • 内网中的设备可以互相访问,但是不能直接访问外网
  • 如果内网设备想要访问外网,就必须经过路由器中转
  • 外网中的设备可以互相访问,但是无法访问你的内网
  • 内网和外网就像两个隔绝的空间,无法互通,唯一的联通就是路由器
  • 所以路由器有时候也会被叫做网关

    几个特殊的IP

  • 127.0.0.1表示自己

  • 0.0.0.0不表示任何设备
  • localhost通过hosts指定为自己

    hosts 文件

  • 在 Windows 系统中,hosts 位于 C:\Windows\System32\drivers\etc\hosts 。在 macOS / Linux系统中,hosts 位于 /etc/hosts

  • 可以看到 localhost 就是指定127.0.0.1
  • hosts 一般需要用管理员权限才能编辑
  • hosts 文件中以 # 开头的表示注释
  • hosts 中可以添加一行 127.0.0.1 XXX,让 XXX成为 127.0.0.1 的别称
  • 在浏览器中输入XXX:8080/index.html ,即可打开本地的index.html文件

    端口

    一台机器可以提供很多服务,每个服务一个号码,这个号码就叫端口号port 不同的服务对应不同的端口

一台机器可以提供不同的服务

  • HTTP服务最好使用80端口
  • HTTPS服务最好使用443端口
  • FTP服务最好使用21端口
  • 一台机器最多有65535个端口

    规则

  • 0到1023(2的10次方减1)号端口是留给系统使用的

  • 你只有拥有了管理员权限后,才能使用这1024个端口
  • 其他端口可以给普通用户使用
  • 比如http-server默认使用8080端口
  • 一个端口如果被占用,就只能换一个端口

    IP和端口缺一不可

    IP是定位一个设备的,端口是定位一个设备的服务的,有了IP和端口就可以定位一个设备提供的服务。

    域名

    域名是对IP的别称

    ping baidu.com或 ping qq.com可以查到他们对应什么IP

  • 一个域名可以对应不同的IP,叫做负载均衡,防止一台机器扛不住

  • 一个IP可以对应不同域名,叫做共享主机,穷开发者就会这么做

    域名和IP是通过DNS对应起来的

    当你输入XXXXXX.com时会经历什么

    过程

  • 浏览器会向电信/联通提供的DNS服务器询问XXXXXX.com对应什么IP

  • 电信/联通会回答一个IP
  • 然后浏览器才会想对应IP的80/443端口发送请求
  • 请求内容是查看XXXXXX.com的首页

为什么是80或443端口

  • 服务器默认用80提供http服务
  • 服务器默认用443提供https服务
  • 可以在开发者工具里看到具体的端口

注意
www.XXXXXX.com和XXXXXX.com不是同一个域名

  • com是顶级域名,XXXXXX.com是二级域名(俗称一级域名),www.XXXXXX.com是三级域名(俗称二级域名)
  • 他们是父子关系
  • github.io把子域名xxx.github.io免费给用户使用,所以www.XXXXXX.com和XXXXXX.com可以不是同一家公司也可以是
  • www是多余的

    路径

    在同一个服务器上面使用不同的路径就可以得到不同的页面 注意路径没有必要有后缀

使用Chrome开发者工具Network面板可以看到区别,他们的区别主要在
image.png
image.png

同一个页面不同的内容

注意

  • 锚点看起来有中文,但是实际上并不支持中文
  • 参考书会变成#%E5%8F%82%E8%80%83%E4%B9%A6

  • 锚点无法在Network面板看到,因为锚点不会传给服务器

curl命令

用curl可以发HTTP请求

向百度发的五行内容

GET / HTTP/1.1 获取根路径,协议是HTTP/1.1
> Host: baidu.com 刚刚有讲过一个IP可能对应多个域名,所以要告诉你,访问这个IP的时候你访问的是什么域名
> User-Agent: curl/7.65.3 用curl/7.65.3访问的
> Accept: / 期待返回什么内容,/表示返回什么内容都可以
> 空白的>表示结束了

百度返回的内容


www.baidu.com被弃用了,只用www.baidu.com

需要理解的概念

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

HTTP就是规定请求格式、以及响应格式的一个文件