【HTTP】入门

292 阅读7分钟

HTTP

  • HyperText Transfer Protocol(超文本传输协议)
  • HTTP是一个简单的请求-响应协议
  • HTTP是个文件,它里面的内容规定请求的格式是什么,响应的格式是什么。
  • 它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应
  • 它通常运行在TCP之上。

HTTPS

  • HyperText Transfer Protocol over SecureSocket Layer(超文本传输安全协议)
  • 在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。
  • HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。

IP--定位设备

(一)Internet Protocol(网际互连协议)

没有IP无法上网 因特网=互联网

(二)主要约定了两件事:

  1. 如何定位一台设备。比如电脑、手机、路由器、摄像头等
  2. 如何封装数据报文,以跟其他设备交流。具体内容我们不关心

(三) IP分为内网和外网。

路由器是内网和外网的唯一联通路口。

q从键盘传到路由器,路由器通过电信的服务器传到QQ的游戏服务器,再发给对手

(四)如何获取外网IP

  1. 你从电信租用带宽,一年一千多。
  2. 光猫把光信号变成路由器能理解的信号
  3. 你买了一个路由器,然后用电脑和手机分别连接路由器 广播出来的无线WIFI(无线比有线慢)
  4. 只要路由器通过光猫连上电信的服务器,那么路由器就会有一个 「外网IP」,比如「14.17.32.211」 就是一个外网IP。你所有设备在互联网中就是这个外网IP了。这就是你在互联网中的地址。
  5. 但是如果你重启路由器,那么你很有「可能」 被重新分配一个「外网IP」 ,也就是说你的路由器没有「固定的 外网IP」
  6. 你可以花重金买一个固定的外网IP 但是有个问题,你的路由器的外网IP如果是 14.17.32.211,那么你的手机和电脑的IP又是什么呢?答 案是「内网IP」

查看自己的外网IP:

  • ipconfig内外网
  • ip138.com

(五)内网IP

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

(六)路由器的功能

  1. 现在路由器有两个IP,一个外网IP(电信分给他的)和一个内网IP(自己分给自己的)
  2. 内网中的设备可以互相访问,但是不能直接访问外网————内网设备想要访问外网,就必须经过路由器中转
  3. 外网中的设备可以互相访问,但是无法访问你的内网————外网设备想要把内容送到内网,也必须通过路由器
  4. 也就是说内网和外网就像两个隔绝的空间,无法互通,唯一的联通点就是路由器 所以路由器有时候也被叫做「网关」

(七)几个特殊的IP

  1. 127.0.0.1表示自己
  2. localhost通过hosts指定为自己
  • hosts可以让任何字符串变成一个自己的IP
  • 右击记事本→以管理员身份运行→打开文件C:\Windows\System32\drivers\etc\hosts
  • “127.0.0.1 localhost” 表示localhost通过hosts指定为自己
  • 我们可以加上“127.0.0.1 yy”表示yy通过hosts指定为自己
  1. 0.0.0.0不表示任何设备

注:

  • http-server . -c-1会出现两个IP地址,其中一个就是http://127.0.0.1:8080

  • 通过这个网址加上更详细的路径http://127.0.0.1:8080/index.html我们就可以访问桌面上的index.html

三、端口--定位服务

  1. 一台机器可以提供很多服务,每个服务一个号码,这个号码就叫端口号port。
  • 要提供HTTP服务最好使用80端口
  • 要提供HTTPS服务最好使用443端口
  • 要提供FTP服务最好使用21端口
  • 一共有65535个端口(基本够用)
  1. 不同端口号对应什么服务:维基百科
  2. 端口使用还有什么规则
  • 0到1023 (2的10次方减1)号端是留给系统使用的
  • 你只有拥有了管理员权限后,才能使用这1024个端口
  • 其他端口可以给普通用户使用
  • 比如http-server默认使用8080端口
  • 一个端口如果被占用,你就只能换一个端口
  • http-server . -c-1 -p 1234 在本机的1234端口上起了服务
  1. 总结:有了IP和端口,我们可以定位一个设备的服务。比如百度设备的HTTP服务,淘宝设备的支付服务,百度设备的搜索服务,腾讯设备的聊天服务。

四、域名DN

  1. 域名就是对IP的别称

  2. ping baidu.com可以查看baidu.com对应什么IP

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

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

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

  6. DNS:Domain Name System(域名系统(服务)协议)

  7. 域名分类

  • www是废话,多余
  • com、org是顶级域名(company,organization)
  • xiedaimala.com是二级域名(俗称一级域名)
  • www.xiedaimala.com是三级域名(俗称二级)
  • www.xiedaimala.com和xiedaimala.com不是同一个域名,可以分属不同的公司。他们是儿子和父亲的关系。只是www.xiedaimala.com的父域名是xiedaimala.com而已。
  • github.io把子域名xxx.github.io免费给你使用

五、URL

1、当你输入xiedaimala.com这个域名的过程--发HTTP/HTTPS请求--根目录

①你的Chrome浏览器会向电信/联通提供的DNS服务器询问xiedaimala.com这个域名对应什么IP ----我们可以nslookup baidu.com 查看百度的IP

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

③ 然后Chrome才会向对应IP的80/443端口发送HTTP服务/HTTPS服务的请求(url会自动变为根目录

④ 请求内容是查看xiedaimala.com这个域名的首页

⑤ 写代码啦的IP(服务器)收到请求,把HTML代码给我,之后请求CSS、JS。

  • 为什么是80或443端口

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

  • 用开发者工具查看

    开发者工具 → ①Network面板 → ②可以看见第一个请求就是xiedaimala.com→③点进去看见Header里面显示了请求网址和远端地址 → ④点开Response可以看到一串HTML,浏览器就会根据这串HTML渲染网页 → ⑤渲染到后面遇到相关内容,就会再请求CSS和JS

2、如何请求不同的页面--路径

之前输入域名我们请求的是域名的根目录,现在想要访问这个域名(服务器)下不同的页面,路径可以做到。

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

注:

①路径无后缀

②工具:使用Chrome开发者工具Network面板Header里面看见Request URL不一样,其他的比如Remote Address还是一样的

3、如何请求同一个页面,不同内容--查询参数

查询参数可以做到

比如 www.baidu.com/s?wd=hi

www.baidu.com/s?wd=hello 都是搜索页面s,只是查询的内容不一样

4、同一个内容,不同位置--锚点

锚点可以做到

注意

  • 锚点看起来有中文,实际不支持中文。比如 #参考书会变成 #%E5%8F%82%E8%80%83%E4%B9%A6 V
  • 锚点是无法在Network面板看到的,因为锚点不会传给服务器

5、URL统一资源定位符(Uniform Resource Locator)

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

协议

  • HTTP协议--默认80端口,所以不用写端口
  • HTTPS协议--默认443端口

域名或IP

  • 指定机器

路径

  • 这台机器的哪个页面

查询参数

  • 这个页面的什么内容

锚点

  • 这个内容的哪一块

注意

  • URL中后缀没有任何用。文件类型由Content-Type唯一决定了。

六、curl 命令

  1. 用curl可以发HTTP请求

curl -v http://baidu.com curl -s -v -- https://www.baidu.com

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