HTTP入门

114 阅读6分钟

HTTP入门

protocol(协议、礼节、约定)

李爵士发明的三样东西

www = URL + HTTP + HTML

什么是IP?

IP = Internet protocol

主要约定了两件事:

1. 如何定位一台设备

  1. 如何封装数据报文,以跟其他设备交流,具体内容不关心

你只要在互联网种,你就有至少一个独特的IP

在命令行输入ipconfig就能看到IP了

IP分为内网和外网

如何获取外网IP?

  1. 从电信租宽带
  2. 买一个路由器,然后用电脑和手机分别连接路由器广播出来的无线WiFi,只要路由器连上电信的服务器,那么路由器就会有一个【外网IP】,比如【14.17.32.211】就是一个外网IP。这就是你在互联网中的地址。但是你重启路由器,那么你很有可能被重新分配一个【外网IP】,也就是说你的路由器没有【固定的外网IP】。

但是有个问题,你的路由器的外网IP如果是14.17.32.211那么你的手机和电脑的IP又是什么呢?

答案是:内网IP

内网IP

  1. 路由器会在你家里创建一个内网,内网中的设备使用内网IP,一般来说这个IP的格式都是192.168.xxx.xxx
  2. 一般路由器会给每一个内网中的设备分配一个不同的内网IP,如电脑是192.168.1.2,手机是192.168.1.3以此类推...

路由器的功能:

现在的路由器有两个IP,一个外网IP和一个内网IP。

内网中的设备可以互相访问,但是不能直接访问外网

内网设备想要访问外网,就必须经过路由器中转

外网中的设备可以互相访问,但是无法访问你的内网。

外网设备向要吧内容推送到内网,也必须通过路由器。

也就是说内网和外网就像两个隔绝的空间,无法互通,唯一的联通点就是路由器。

所以,路由器 有时候也被叫作 【网关】

几个特殊的IP

分别是:

127.0.0.1表示自己 ———— //桌面新建一个html文件,网页输入127.0.0.1:8080

localhost通过host指定为自己 ———— //输localhost:8080也一样,直接跟路径就可以访问html

0.0.0.0不表示任何设备

hosts文件存在于 C:< windows < system32 < drivers < etc

hosts可以让任意字符串变成一个对应的IP

以管理员身份运行记事本(或任意编辑器),就可以编辑hosts文件

hosts文件里头自带127.0.0.1指定为localhosts

比如:我们可以在记事本里加一行 127.0.0.1_frank 就能直接用frank:8080访问html

IP有了,还需要端口

一台机器可以提供很多服务。

每个服务一个号码,这个号码就叫端口号port

端口port

  • 比喻: 去麦当劳点餐提供两个窗口,一号快餐,二号咖啡。

你去快餐窗口点餐会被拒绝,让你去另一个窗口,你去咖啡窗口点快餐结果一样。

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

  1. 要提供HTTP服务最好使用80端口
  2. 要提供HTTPS服务最好使用443端口
  3. 要提高FTP服务最好使用21端口

一共有65535个端口(基本够用)

端口使用的规则

  • 规则: 0到1023(2的10次方减1)号端口是留给系统使用的 你只有拥有管理员权限后,才能使用这1024个端口,其他端口可以给普通用户使用,比如:http-server默认使用8080端口

一个端口如果被占用,那你就只能换一个端口

总而言之。IP和端口缺一不可

IP用于定位一个设备,端口用于定位一个设备的服务

有了IP和端口就能定位一个设备提供的服务

比如:腾讯设备提供的聊天服务。。。等等、、、

域名是什么?

比如: qq.com

域名就是对IP的别称

baidu.com对应什么IP

ping baidu.com

qq.com对应什么IP

ping qq.com

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

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

通过DNS(Domain Name System)域名系统

当你输入xiedaimala.com

  • 过程:
  1. 你的浏览器会向电信/联通提供的DNS服务询问xiedaimala.com对应什么IP

询问IP命令:nslookup xxx.com

  1. 电信/联通会回答一个IP(具体过程很复杂,不研究)

  2. 然后浏览器才会向对应IP的80/443端口发送请求

  3. 请求内容是查看xiedaimala.com首页

为什么是80或443端口

  1. 服务器默认用80提供http服务

  2. 服务器默认用443提供https服务

  3. 你可以在开发者工具里看到具体的端口

WWW

  • www. xiedaimala.com 和 xiedaimala.com是同一个域名吗?不是
  • 他们是什么关系?
  1. com是顶级域名
  2. xiedaimala.com是二级域名(俗称一级域名)
  3. www. xiedaimala.com 是三级域名(俗称二级域名) 他们是父子关系

github.io把子域名xxx.github.io (某个人的github首页) 免费给你使用,它们只是共用一个父域名而已

所以,www. xiedaimala.com和xiedaimala.com可以不是同一家公司,也可以是

www是多余的吗?是的,非常多余

如何请求不同的页面?

路径可以做到

比如:

developer.mozilla.org/zh-CN/docs/…

developer.mozilla.org/zh-CN/docs/…

工具:使用开发者工具Network面板可以看看区别

同一个页面,不同内容

查询参数可以做到

www.baidu.com/s?wd=hi

www.baidu.com/s?wd=hello

同一个内容,不同位置

锚点可以做到

例如,以MDN文档页面为例

developer.mozilla.org/zh-CN/docs/… (跳转到参考书锚点)

developer.mozilla.org/zh-CN/docs/…

  • 注意!

锚点看起来有中文,实际不支持中文

#参考书会变成 #%E5%8F%82%E8%80%83%E4%B9%A6

锚点是无法在Network面板看到的

因为锚点不会传给服务器

URL (uniform resource locator)统一资源定位系统

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

  • URL举例 就算没写,也应该知道端口

HTTPS默认端口443

  • HTTP(协议) 基于TCP和IP两个协议

    curl命令

用curl可以发HTTP请求

curl -v baidu.com

curl -s -v -- www.baidu.com

理解以下概念:

url会被curl工具重写,先请求DNS获得IP

先进行TCP连接,TCP连接成功后,开始发送HTTP请求

请求内容看一眼

响应内容看一眼

响应结束后,关闭TCP连接(看不出来)

HTTP

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