HTTP全解(上)——理论部分

266 阅读3分钟

Hypertext Transfer Protocal, aka "HTTP", 中文译作“超文本传输协定”。在讲HTTP之前,讲一些前提知识。

什么是IP(协议)

Internet Protocal主要约定了两件事:

  1. 如何定位一台设备
  2. 如何封装数据报文,以跟其他设备交流 协议的具体内容我们并不关心。

几个特殊的IP

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

有了IP,还需要什么?端口

一台服务器可以提供很多服务,每个服务一个号码,这个号码就叫端口号(port)。

总结: IP和端口缺一不可。IP负责定位设备,端口负责定位设备提供的某项服务。比如:百度提供的搜索服务,QQ提供的聊天服务,网易邮箱提供的邮件服务,等等等等都是可以通过IP和端口实现精确定位的。

什么是域名?

域名就是对IP的别称。
baidu.com对应什么IP?可以在cmd输入ping baidu.com获悉。其他网站类似方法。(关于ping的来源感兴趣可以看这篇博客, 大概意思就是灵感来源于声纳,发射一个信号ping,必收到一个反馈pong)
知识点:

  1. 一个域名可以对应不同IP,这个叫负载均衡策略,防止服务器扛不住压力
  2. 一个IP可以对应不同域名,这个叫共享主机,资金不足的公司或个人会这么做

域名和IP是怎么对应起来的?

通过DNS(Domain Name System, 域名系统)。
过程如下:

  1. 当你输入bilibili.com,你的chrome浏览器会向电信运营商提供的DNS服务器询问目标网址对应的具体IP
  2. 电信运营商会回答一个IP(本地可以模拟这个过程:在cmd输入nslookup bilibili.com可以获悉服务器IP地址)
  3. 然后chrome才会向对应IP的80/443端口发送请求,请求内容是查看bilibili.com的首页(服务器默认用80提供http服务,443提供https服务,你可以在开发者工具里看到具体的端口)

题外话

  • (www.xiedaimala.com) 和 (xiedaimala.com) 不是同一个域名
  • com是顶级域名,xiedaimala.com是二级域名(俗称一级域名),www.xiedaimala.com 是三级域名(俗称二级)。它们是父子关系。
  • github.io把子域名xxx.github.io免费给用户使用 所以需要知道 www.xiedaimala.com 和 xiedaimala.com 可以不是同一家公司,也可以是
    所以www基本上是多余的

什么是URL?

Uniform Resource Locator,统一资源定位符。
URL = 协议 + 域名或IP + 端口号 + 路径 + 查询字符串 + 锚点
举个栗子
微信图片_20220405124341.png
通过锚点可以做到同一个内容,不同位置,比如:
developer.mozilla.org/zh-CN/docs/…
developer.mozilla.org/zh-CN/docs/…
需要注意:锚点看起来有中文,但实际不支持中文。#参考书会被编码。
此外锚点是无法在Network面板看到的,因为锚点不会传给服务器。锚点是面向用户、方便用户的,并不面向服务器,服务器会把锚点吃掉,传给前端的就是锚点之前的url地址里的内容。

HTTP(协议)

curl命令可以发送http请求。
curl -v http://baidu.com
curl -s -v -- https://www.baidu.com
理解curl命令做了什么:

  1. url会被curl工具重写,先请求DNS获得IP
  2. 先进性TCP连接,TCP连接成功后,开始发送HTTP请求
  3. 请求内容看一眼
  4. 响应内容看一眼
  5. 响应结束后,关闭TCP连接(后台进行,我们看不到)
  6. 真正结束 HTTP规定了请求的格式是什么(图中的五个大于号部分),响应的格式是什么(图中的小于号部分)

微信图片_20220405131305.png