HTTP (超文本传输协议, 全称 HyperText Transfer Protocol), 是一种用于分布式、协作式和超媒体信息系统的应用层协议. HTTP是万维网的数据通信的基础.

设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法.

通过HTTP或者HTTPS协议请求的资源由URL(统一资源定位符, Uniform Resource Locator)来标识.

1 网络和IP

1.1 概念

(1) IP
IP(英语:Internet Protocol的缩写), 意思是网际协议, 又称互联网协议, 是用于分组交换数据网络的协议.
IP中有一个非常重要的内容, 就是:

  • 给互联网上的每台计算机和其它设备都规定了一个唯一的地址, 叫做“IP地址”.

(2) IP地址

  • IP地址(英语:IP Address), 是IP协议提供的一种统一的地址格式, 它为互联网上的每一个网络和每一台主机分配一个逻辑地址, 用于标识发送或接收数据报.
  • 常见的IP地址分为 IPv4 与 IPv6 两大类,IP地址由一串数字组成。

    1.2 IP的主要内容

  • 约定了如何定位一台设备;

  • 约定了如何封装数据报文, 以跟其他设备交流.

    1.3 IP分为内网和外网

    路由器是内网和外网唯一的连通点, 所以路由器有时也被称为”网关”.
    路由器有两个IP, 即外网IP、内网IP.

    1.4 几个特殊的 IP

  • 127.0.0.1 表示自己.

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

    1.5 ipconfig命令

    在cmder中输入ipconfig的命令,就可以看到自己电脑的IP.

2 端口(port)

一台机器可以提供很多服务, 每个服务有一个对应的号码, 这个号码就叫端口号(port). 维基百科”TCP/UDP端口列表”可以参考.

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

  • 要提供 HTTP 服务最好使用 80 端口;
  • 要提供 HTTPS 服务最好使用 443 端口;
  • 要提供 FTP服务最好使用 21 端口;
  • 一台机器有65535个端口(基本够用).

    2.2 端口的使用规则

  • 0~1023 号端口号是留给系统使用的;

  • 只有拥有管理员权限后, 才能使用0~1023的端口;
  • 其他端口可以给普通用户使用;
  • 比如http-server默认使用8080端口;
  • 一个端口如果被占用, 只能换另外一个端口.

    2.3 IP和端口是缺一不可的

    IP是用来定位一个设备的, 端口是用来定位一个设备提供的服务, 这两者缺一不可.

    2.4 在chrome浏览器里面查看端口号

    打开chrome浏览器开发者工具 > network.
    这里的443是端口.
    443之前的 103.102.166.224是IP.
    URL入门 - 图1

    2.5 hs -c-1 -p 1234 命令

    在cmder中输入hs -c-1 -p 1234, 可以生成端口. 然后打开浏览器, 输入localhost:1234/文件名, 通过端口可以参看本地文件.
    注意: 1234这个数要比1023大.

3 域名及其路径、查询参数、锚点

3.1 域名

(1) 域名的概念

  • 域名(英语:Domain Name,简称:Domain), 是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位.
  • 域名是一个IP地址的代称, 目的是便于记忆.
  • 例如,qq.com, wikipedia.org, 这两个都是域名.

(2) 域名层次
顶级域名: .com, .net, .org, .gov, .edu., .mil, .int
二级域名: wikipedia.org qq.com
三级域名: zh.wikipedia.org news.qq.com
(3) 域名的特点

  1. 一个域名可以对应不同的IP, 这叫做"均衡负载", 防止一台机器扛不住.
  2. 一个IP可以对应不同域名, 这叫做"共享主机", 穷开发者会这样做.

(4) DNS: 使域名和IP相互对应
DNS, 即域名系统(Domain Name System 的缩写)是互联网的一项服务. 它作为将域名和IP地址相互映射的一
个分布式数据库, 能够使人更方便地访问互联网。
域名和IP对应的过程:
当用户在浏览器里输入 wikipedia.org, 然后

  1. 浏览器向电信/联通提供的DNS服务器询问 wikipedia.org 对应的 IP;
  2. 电信/联通会回答一个 IP;
  3. 浏览器向对应的 IP 80443端口发送请求;
  4. 请求内容是查看wikipedia的首页.

(5) nslookup 域名
这个命令的作用是查域名的IP. 比如在cmder中输入命令 nslookup baidu.com, 可以查到baidu.com这个域名的IP.
(6) ping 域名
这个命令的作用是: 查看一个域名有没有正常地工作, 域名解析有没有生效, 或者访问这个域名的速度怎么样.
比如, 在cmder中输入命令 ping baidu.com 得到以下结果:
URL入门 - 图2

3.2 URL

URL, 俗称网址. 全称 Uniform Resource Locator, 意思是统一资源定位符, 它是因特网上标准的资源的地址(Address), 如同在网络上的门牌.

  1. URL = 协议 + 域名或IP + 端口号 + 路径 + 查询字符串 + 锚点
  2. 注意: URL中也可以包含端口, 但是端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口.

URL入门 - 图3
注意:

  1. 锚点是无法在浏览器的network面板看到了. 因为锚点不会传给服务器.
  2. 锚点看起来有中文, 实际上不支持中文.
  3. https://developer.mozilla.org/zh-CN/docs/Web/CSS#教程, 实际上是https://developer.mozilla.org/zh-CN/docs/Web/CSS#%E6%95%99%E7%A8%8B
  4. 也就是说"#教程"变成了"#%E6%95%99%E7%A8%8B".

4 curl命令

HTTP是基于TCP和IP两个协议.
用curl命令可以发送HTTP请求.
注意:

  • URL会被curl工具重写, 先请求DNS获得IP.
  • 先进行TCP连接, TCP连接成功后, 开始发送HTTP请求.

curl -v 命令, 作用是 输出通信的整个过程,用于调试。

4.1 curl -v http://baidu.com 的结果

URL入门 - 图4
第二行(trying), 表示url被curl重写, 先请求DNS获得IP.
第三行, 表示连接到了百度的80端口.

  1. 以大于号开头的五行内容, 是请求的内容, 表示连接到了百度的80端口之后, 我们往百度发的请求.
  2. >GET / HTTP/1.1, 表示获取根路径, 协议是HTTP1.1.
  3. >HOST: baidu.com 表示访问的域名是baidu.com
  4. >User-Agent: curl/7.73.0, 表示我们使用什么来访问.
  5. >Accept: */*, 表示接受所有返回的内容.
  6. > 表示结束了.

<小于号开头的这些行, 就是百度响应给我们的内容. 响应的内容
那行代码的意思是, 你发送的url http://baidu.com被弃用了, cmder要让我们把URL改为meta里面的http://www.baidu.com/.

4.2 curl -v http://www.baidu.com/ 的结果

URL入门 - 图5