HTTP入门
protocol(协议、礼节、约定)
李爵士发明的三样东西
www = URL + HTTP + HTML
什么是IP?
IP = Internet protocol
主要约定了两件事:
1. 如何定位一台设备
- 如何封装数据报文,以跟其他设备交流,具体内容不关心
你只要在互联网种,你就有至少一个独特的IP
在命令行输入ipconfig就能看到IP了
IP分为内网和外网
如何获取外网IP?
- 从电信租宽带
- 买一个路由器,然后用电脑和手机分别连接路由器广播出来的无线WiFi,只要路由器连上电信的服务器,那么路由器就会有一个【外网IP】,比如【14.17.32.211】就是一个外网IP。这就是你在互联网中的地址。但是你重启路由器,那么你很有可能被重新分配一个【外网IP】,也就是说你的路由器没有【固定的外网IP】。
但是有个问题,你的路由器的外网IP如果是14.17.32.211那么你的手机和电脑的IP又是什么呢?
答案是:内网IP
内网IP
- 路由器会在你家里创建一个内网,内网中的设备使用内网IP,一般来说这个IP的格式都是192.168.xxx.xxx
- 一般路由器会给每一个内网中的设备分配一个不同的内网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
- 比喻: 去麦当劳点餐提供两个窗口,一号快餐,二号咖啡。
你去快餐窗口点餐会被拒绝,让你去另一个窗口,你去咖啡窗口点快餐结果一样。
一台机器可以提供不同的服务
- 要提供HTTP服务最好使用80端口
- 要提供HTTPS服务最好使用443端口
- 要提高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
- 知识点:
- 一个域名可以对应不同的IP,这个叫作均衡负载,防止一台机器扛不住
- 一个IP可以对应不同的域名,这个叫作共享主机,穷开发者会这么做
域名和IP是怎么对应起来的?
通过DNS(Domain Name System)域名系统
当你输入xiedaimala.com
- 过程:
- 你的浏览器会向电信/联通提供的DNS服务询问xiedaimala.com对应什么IP
询问IP命令:nslookup xxx.com
-
电信/联通会回答一个IP(具体过程很复杂,不研究)
-
然后浏览器才会向对应IP的80/443端口发送请求
-
请求内容是查看xiedaimala.com首页
为什么是80或443端口
-
服务器默认用80提供http服务
-
服务器默认用443提供https服务
-
你可以在开发者工具里看到具体的端口
WWW
- www. xiedaimala.com 和 xiedaimala.com是同一个域名吗?不是
- 他们是什么关系?
- com是顶级域名
- xiedaimala.com是二级域名(俗称一级域名)
- 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面板可以看看区别
同一个页面,不同内容
查询参数可以做到
同一个内容,不同位置
锚点可以做到
例如,以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
规定请求的格式是什么,响应的格式是什么