URL地址
- 在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。
- URL的一般语法格式为:(带方括号[]的为可选项):
- protocol :// hostname[:port] / path / ?query #fragment
- 协议 :// 主机地址[:端口号] / [路径] [?参数] [#锚点]
就像生活中的地址一样,URL用于定位网络当中的资源,每个资源都对应着一个独一无二的URL地址
协议
HTTP
- 超文本传输协议,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准
-
HTTPS
HTTPS 是身披 SSL外壳的 HTTP,就是加密版的HTTP,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包
- HTTPS协议默认端口号是 443
主机地址
IP地址
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
本机IP:127.0.0.1
域名
形如 www.xxx.com 这样的就叫做域名,域名需要单独购买。购买后,需要绑定IP地址进行使用。绑定IP地址后,就可以通过域名找到主机电脑了
本机域名:localhost
DNS服务器
- 先检查浏览器缓存,是否记录了这个IP
- 再查看本机的hosts文件,是否记录了这个IP
- 最后去DNS服务器解析,获取域名对应的IP
端口号
客户端可以通过ip地址找到对应的服务器端
但是服务器端是有很多应用程序的,每个应用程序对应一个端口号,通过端口号,客户端才能真正的访问到该服务器上的应用程序。
为了对端口进行区分,将每个端口进行了编号,这就是端口号。
端口号的范围是 0 ~ 65535
如果一个应用程序使用了1234端口号,其他的应用程序就不能再使用1234端口号
客户端请求服务器的步骤
当我们在浏览器地址栏输入 “http://www.xxx.com/api/getbooks”时,客户端是如何找到服务器并发送请求的?
- 先找到服务器
- 检测浏览器缓存有没有缓存该域名对应的IP地址。有则通过IP地址去找服务器
- 检测本地的hosts文件,是否有记录该域名对应的IP地址,有则通过IP地址去找服务器
- 通过DNS服务器解析,找到该域名对应的IP地址,然后通过IP地址去找服务器
- 进行三次握手(建立连接)
- 第一次握手是在建立连接,客户端发送连接请求报文段,把标有SYN的数据包发给服务器端即为接收端。
- 第二次握手是服务器端即接收端收到客户端的SYN的报文段,同时发送标有SYN/ACK的数据包。
- 第三次握手是客户端收到服务器端的SYN/ACK的数据包后,向服务器端发送标有ACK的数据包。
- 发送请求,传输数据
- 服务器处理,并做出响应
- 浏览器接收响应结果。
- 四次挥手(作用是断开连接)
Express
express 介绍
- Express 是一个第三方模块,用于快速搭建服务器(替代http模块)
- Express 是一个基于 Node.js 平台,快速、开放、极简的 web 开发框架。同类型产品 Koa
- Express保留了http模块的基本API,使用express的时候,也能使用http的API
- 使用express的时候,仍然可以使用http模块的方法,比如 res.end()、req.url
- express还额外封装了一些新方法,能让我们更方便的搭建服务器
- express提供了中间件功能,其他很多强大的第三方模块都是基于express开发的
- Express 官网
-
安装
使用
步骤
加载 express 模块
- 创建 express 服务器
- 开启服务器
- 监听浏览器请求并进行处理 ```javascript // 使用express 搭建web服务器 // 1 加载 express 模块 const express = require(‘express’); // 2 创建 express 服务器 const app = express(); // 3 开启服务器 app.listen(3000, () => console.log(‘express服务器开始工作了’)); // 4 监听浏览器请求并进行处理 app.get(‘GET请求的地址’, 处理函数); app.post(‘POST请求的地址’, 处理函数);
const express = require(‘express’) const app = express() const port = 3000
app.get(‘/‘, (req, res) => { res.send(‘hello world!’) })
app.get(‘/api/getbooks’, (req, res) => { res.send( { status: 0, message: ‘获取成功’, data: [‘aaaa’, ‘ssss’] } ) })
app.listen(port, () => {
console.log(Example app listening on port ${port}
)
})
```
全局模块—nodemon
nodemon 是一个全局模块,安装后,可以使用 nodemon 代替 node 运行js文件。
好处是,当代码保存后,nodemon 会检测文件代码是否改变了,如果改变了,就会自动重启服务器
安装
- npm i nodemon -g
mac系统,安装全局模块,比如加 sudo ,例如 sudo npm i nodemon -g
使用
使用nodemon 命令代替node命令,我们就可以专心开发代码了,而不用但是服务有没有重启的问题了。
- 建议不要滥用nodemon,建议只在启动服务时使用nodemon。其他情况继续使用node
跨域请求解决方案
找到以前做过的图书管理案例,修改请求的根路径为 “http://localhost:3000”,表示使用我们自己的接口了。
前端发送Ajax请求,请求接口。会有跨域问题。
这里可以使用CORS方案解决跨域。