nodejs学习--01

HTTP 协议

Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的。HTTP是现代全球因特网中使用的公共语言。

HTTP 协议概述
  • HTTP(HyperText Transfer Protocol) 超文本传输协议
  • HTTP 是一种能够获取如 HTML 这样的网络资源的 protocol (通讯协议)。
  • 是一种 client客户端 - server服务器 同时要遵守的协议
  • 请求通常是由像浏览器这样的接受方发起的
  • HTTP 协议中规定了请求数据和响应数据的格式(报文)
    在这里插入图片描述
请求报文
  • 请求报文
    • 浏览器再向服务器发送请求的时候,会携带的数据
    • 该数据是特定格式的字符串
    • 可以使用 chrome 监视请求并查看请求报文
  • 请求报文格式
    在这里插入图片描述

请求行

  • 请求方法(常见的 GET 和 POST)
  • 请求路径
  • 协议版本
GET / HTTP/1.1
GET /index.html HTTP/1.1

请求头

  • 浏览器在向服务器发送请求的时候携带了附加信息
  • 由键值对组成
  • 如果需要设置请求头,使用setRequestHeader方法来设置
Host请求的主机
Cache-Control控制缓存(例如:max-age=60 缓存 60 秒)
Accept客户端想要接收的文档类型,逗号分隔
User-Agent标识什么客户端帮你发送的这次请求
Referer这次请求的来源
Accept-Encoding可以接受的压缩编码

请求体

  • GET 请求没有请求体
  • POST 请求有请求体,请求体就是发送给服务器的数据
响应报文

在这里插入图片描述
响应报文组成

  • 响应行
    • 协议版本
HTTP/1.1 200 OK
// 需要注意的是200,它表示状态码
// 状态码:
// - 描述了请求过程中所发生的情况
// - 每个状态码的第一位数字都用于描述状态的一般类别("成功"、"出错"等)
// - 常见状态码
//   - 200 - 成功
//   - 404 - 请求的资源部存在
//   - 500 - 服务器内部错误

响应头

  • 服务器返回响应的时候携带了附加信息
  • 由键值对组成
Date响应时间
Server服务器信息
Content-Type响应体的内容类型
Content-Length响应的内容大小

响应体

  • 返回的主体内容,如果请求的是网页返回网页的内容,如果请求的是图片返回图片的内容
Ajax请求遵循 HTTP协议

本质上 XMLHttpRequest 就是 JavaScript 在 Web 平台中发送 HTTP 请求的手段,所以我们发送出去的请求任然是 HTTP 请求,同样符合 HTTP 约定的格式:

// 设置请求报文的请求行
xhr.open('GET', '/Time')
// 设置请求头
xhr.setRequestHeader('Accept', 'text/plain')
// 设置请求体
xhr.send(null)

xhr.onreadystatechange = function () {
  if (this.readyState === 4) {
    // 获取响应状态码
    console.log(this.status)
    // 获取响应状态描述
    console.log(this.statusText)
    // 获取响应头信息
    console.log(this.getResponseHeader('Content-Type')) // 指定响应头
    console.log(this.getAllResponseHeaders()) // 全部响应头
    // 获取响应体
    console.log(this.responseText) // 文本形式
    console.log(this.responseXML) // XML 形式
  }
}

URL

URL(Uniform Resource Locator),统一资源定位符,通俗点来说就是表示网络当中某一个网页的完整访问地址,它具有一定的格式:协议://主机地址[:端口]/路径?查询字符串#锚点

  • 协议
  • http
  • https
  • 主机地址
    • IP地址
    • 域名
  • 端口
    • http请求,默认端口80
    • https请求,默认端口443
    • MySQL默认端口3306
    • 访问一个网页的时候,默认端口可以省略
  • 路径
    • 服务器文件夹上的资源(html/css/images/js/接口)
  • 参数(查询字符串)
    • ? 后面的部分,是键值对的形式(id=1&page=1)

IP 地址

  • 作用就是标识一个网络设备(计算机、手机、电视)在某一个具体的网络当中的地址。
  • 设备在某一个网络中的地址,目前最常见的格式:[0-255].[0-255].[0-255].[0-255] 即为四个 0-255 的数字组成。
  • 在同一个网络中,计算机的IP是不允许相同的,都是唯一的
  • 127.0.0.1 是本地回环地址

单个网络情况
在单个局域网下,结构非常简单,就是我们所连接的网络设备(网关)给我们分配了一个地址,在这个范围之内我们都可以通过这个地址找到我们的这个设备。

如果设备没有连接任何网络情况下,我们会有一个本地回环地址 127.0.0.1
在这里插入图片描述

多个网络情况
但是当一个设备同时处于多个网络下(比如同时连接了有线网卡和无线网卡),就会变得稍微复杂一点:
在这里插入图片描述

域名

由于 IP 地址都是没有规律的一些数字组成的,很难被人记住,不利于广泛传播,所以就有人想出来要给 IP 起名字(别名)。

域名是需要花钱注册的
购买到域名需要解析到你的web服务器,即让他和服务器IP对应上

顶级域名

.com: 商业机构
.cn: 中国国家、地区域名 .hk,
.gov: 政府网站。
.org: 机构。
.edu: 教育网站。
.net: 网络服务商。
.mil: 军事。

特殊的域名

localhost含义为本地主机,对应127.0.0.1 。这是一个保留域名,主要用于本地测试。

端口

计算机本身是一个封闭的环境,就像是一个大楼,如果需要有数据通信往来,必须有门,这个门在术语中就叫端口,每一个端口都有一个编号,每台计算机只有 65536 个端口(0-65535)

一般我们把“占门”的过程叫做监听
端口号的作用,是标示计算机内的某个软件

可以通过在命令行中运行: netstat -an命令监视本机端口使用情况
在请求网络资源时,默认端口可以省略

DNS

DNS: Domain Name System 域名系统。在DNS服务器中保存了域名和IP的映射关系。主要工作是将域名转换为IP地址,因为我们通过浏览器访问网站时,实际上是去找对应的IP地址。
比如:

域名IP
baidu.com202.22.35.66
sina.com45.22.45.45

通过宽带运营商提供的服务器解析一个域名背后对应的 IP,这个过程叫做 DNS 寻址,帮你完成 DNS 寻址过程的服务器叫做 DNS 服务器。

通俗的将,DNS服务器能够通过你输入的域名返回该域名对应的IP。然后我们通过IP去访问网络上的资源。

浏览器DNS缓存

当我们在浏览器输入域名后,浏览器首先并不是向DNS服务器发起请求,解析其对应的IP的,而是先看浏览器缓存中是否有缓存,如果有,则使用缓存中保存的IP去请求网络资源的。

  • windows下查看dns缓存:
    • ipconfig /displaydns
    • ipconfig /displaydns > c:/dnscache.txt 将dns缓存导入到c:/dnscache.txt文件
  • windows下清除dns缓存
    • ipconfig /flushdns
  • 清除谷歌浏览器缓存
    • chrome://net-internals/#dns
hosts 文件

操作系统在发起对 DNS 服务器的查询请求之前,会优先检查本机的 hosts 文件。如果这个文件中包含了对当前需要解析的域名的配置,则不再发起对 DNS 服务器的请求,直接使用 hosts 文件中的配置。
文件所在路径:

  • Windows:C:\Windows\System32\drivers\etc\hosts
  • macOS:/etc/hosts

注意:

  • 本机的 hosts 文件配置只能到影响本机的 DNS 寻址
  • 只有以管理员权限运行的编辑器才有权利修改 hosts 文件
发起TCP请求

在这里插入图片描述
客户端在向服务器发请求之前,会先向服务器发送TCP请求,过程可以理解为:

  1. 客户端:hello,你在吗?
  2. 服务器:嗯,我在
  3. 客户端:好的,我知道了

此过程又称之为客户端和服务器三次握手。

访问网站时请求响应流程

我们在浏览器输入一个网址后,按下回车,最后看到一个页面,这个过程是怎样的?
在这里插入图片描述

  1. 用户打开浏览器
  2. 地址栏输入我们需要访问的网站网址(URL)
  3. 检测浏览器DNS缓存,看是否有域名和IP的对应关系
  4. 检查本机的 hosts 文件,看是否有域名和IP的对应关系
  5. 浏览器通过 DNS 服务器 获取即将访问的网站 IP 地址
  6. 浏览器发起一个对这个 IP地址的 请求
  7. 服务端监听指定的 端口 的服务器软件接收到这个请求,进行相应的处理
  8. 服务端将处理完的结果返回给客户端浏览器(响应)
  9. 浏览器将服务端返回的结果呈现到界面上
静态网站和动态网站

静态网站

  • Apache 实现的功能,浏览器请求对应的文件 → Apache 负责读取文件 → 将文件内容响应给客户端浏览器
  • Apache 将网页文件(纯文本)原封不动的返回给浏览器
  • 无法满足让网页内容动起来(随着数据动态变化)的需求

动态网站

  • 不再将 HTML 固定写死,每次用户请求时,动态执行一段代码,临时生成一个用户想要的 HTML 页面。
  • 动态网站指的也就是每次请求时服务端动态生成 HTML 返回给用户的这种网站。
  • 实现动态网站的技术有很多,例如:JSP、ASP.NET、PHP、Node.js 等等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值