跨域资源共享
跨域资源共享是什么 CORS全称为Cross-Origin Resource Sharing,被译为跨域资源共享,新増了一组HTTP首部字段,允许服务器声明哪些源站有权限访问哪些资源。 跨域资源共享标规范要求,对那些可能对服务器数据产生副作用的HTTP请求方法(特别是GET以外的HTTP请求,或者搭配某些MIME类型的POST请求),浏览器必须首先使用OPTIONS方法发起一个预检请求,从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的HTTP请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证。 跨域资源共享机制的工作原理主要应用于三个场景 简单请求 预检请求 认证请求 简单请求 请求方法为:GET、HEAD、POST其中一个 不得人为设置下列集合之外的其他首部字段:Accept、Accept-Language、Content-Language、Content-Type Content-Type的值仅限以下三者之一 text/plain multipart/form-data application/x-www-form-urlenco ...
HTTP缓存机制与Cookie
HTTP的缓存机制 缓存是什么 缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。当Web缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。 缓存需要合理配置,因为并不是所有资源都是永久不変的。重要的是对一个资源的缓存应截止到其下次发生改变(即不能缓存过期的资源)。 缓存服务器端的数据的优点 缓解服务器端的资源消耗和运行压力,提升服务器端的整体性能。 减少服务器端资源加载的延迟,进而成少显示某个资源所用的时间 减少对带宽造成的压力,避免网络阻塞问题的出现 Web站点变得更具有响应性 常见的HTTP缓存只能存储GET响应,对于其他类型的响应则无能为力。 检索请求的成功响应:响应状态码为200,则表示为成功。包含例如HTML文档,图片,或者文件的响应。 不变的重定向:响应状态码为301 错误响应:响应状态码为404的一个页面。 不完全的响应:响应状态码为206,只返回局部的信息。 除了GET请求外,如果匹配到作为ー个已被定义的cache键名的响应。 缓存类型 私有缓存 私有缓存只能用于单独用户。洳览器缓存拥有用户通过HTTP ...
HTTP消息
HTTP报文 HTTP报文是什么 HTTP报文,又称HTTP消息,是服务器和客户端之间交换数据的方式。有两种类型的消息:请求,由客户端发送用来触妓一个服务器上的动作;响应,来自服务器的应答。 HTTP消息由采用ASCII编码的多行文本构成。在HTTP/1.1及早期版本中,这些消息通过连接公开地发送。在HTTP/2中,为了优化和性能方面的改进,曾经可人工阅读的消息被分到多个HTTP帧中。 HTTP请求报文 HTTP响应报文 HTTP消息 HTTP消息结构 start line:一行起始行用于描述要执行的请求,或者是对应的状态,成功或失败。这个起始行总是单行的。 HTTP headers:一个可选的HTTP头集合指明请求或描述消息正文。 empty line:-个空行指示所有美于请求的元数据已经发送完毕。 body:一个可选的包含请求相美数据的正文(比如HTML表单内容)或者响应相美的文档。正文的大小有起始行的HTTP头来指定。 起始行和HTTP消息中的HTTP头统称为“请求头”,而其有效负载被称为“消息正文”。 请求消息与响应消息 请求消息 起始行 起始行包含 ...
HTTP是什么
HTTP是什么? HTP全称为 Hypertext Transfer Protocol,被译为超文本传输协议,是互联网上应用最为广泛的一种网络协议。 HTTP协议是在Web上进行数据交换的基础,是一种“客户端——服务器端”协议。也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等等。 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 HTTP请求与响应消息 客户端和服务端通过交换各自的消息(与数据流正好相反)进行交互。 由像浏览器这样的客户端发出的消息叫做请求(requests) 被服务端回应的消息叫做响应(responses) 基于HTTP的组件系统 请求通过一个实体被发出,实体也就是用户代理。大多数情况下,这个用户代理都是指刘览器。 每一个发送到服务器的请求,都会被服务器处理井返回一个消息,也就是响应。 在这个请求与回应之间,还有许许多多的被称为 Proxies的实体,他们的作用与表现各不同。 客户端 user-agent就是任何能够为用户发起行为的工具。这个角色 ...
四、mongoose的使用
mongoose 核心概念 schema 约束字段/列数据 model模型 对应 集合 后期用它来实现数据增删改查 简介 安装 1npm i mongoose schema 英文网: http://mongoosejs.com 中文网: http://mongoosejs.net/ 作用:用来约束MongoDB文档数据(哪些字段必须,哪些字段可选的) model 一个模型对应一个集合。后面通过模型管理集合中的数据。 使用 基本模型 123456789101112131415161718192021222324// 一、导入模块const mongoose = require("mongoose");// 二、连接数据库const db = mongoose.createConnection( "mongodb://shop2:shop2@localhost:27017/shop", { useNewUrlParser: true, useUnifiedTopology: true }, ...
三、MongoDB高级操作
排序&分页 准备数据 12345678use test3db.c1.insert({_id:1,name:"a",sex:1,age:1})db.c1.insert({_id:2,name:"a",sex:1,age:2})db.c1.insert({_id:3,name:"b",sex:2,age:3})db.c1.insert({_id:4,name:"c",sex:2,age:4})db.c1.insert({_id:5,name:"d",sex:2,age:5})db.c1.find() 排序 1db.集合名.find().sort(JSON数据) Limit与Skip方法 1db.集合名.find().sort().skip(数字).limit(数字) skip跳过指定数量(可选) limit限制查询的数量 使用.count()可以统计数量 实例练习 ...
二、MongoDB基本操作及增删改查
基本操作 登陆数据库 1mongo 查看数据库 语法 1show databases; 选择数据库 1use 数据库名 如果切换到一个没有的数据库,例如use admin2,那么会隐式创建这个数据库。(后期当该数据库有数据时,系统自动创建) 1use admin2 查看集合 1show collections 创建集合 1db.createCollection('集合名') 删除集合 1db.集合名.drop() 删除数据库 通过use语法选择数据 通过db.dropDataBase()删除数据库 增删改查 C增 1db.集合名.insert(JSON数据) 如果集合存在,那么直接插入数据。如果集合不存在,那么会隐式创建。 在test2数据库的c1集合中插入数据(姓名叫webopenfather年龄18岁) 12use test2db.c1.insert({uname:"webopenfather",age:18}) 数据库和集合不存在都隐式创建 对象的键统一不加引号(方便看),但是查看 ...
一、MongoDB的安装
Windows系统 由于二进制包安装了半个小时,还是卡在进度条不动。因此决定使用压缩包进行安装。 下载安装包 下载地址 下载完成后将其解压,例如我解压到了F:\MongoDB文件下。 将bin目录添加到环境变量。 接下来进入该文件创建data与logs文件 以管理员身份启动终端,然后输入如下命令 1mongod --install --dbpath F:\MongoDB\data --logpath F:\MongoDB\logs\mongo.log 开启数据库服务 1net start mongodb 链接数据库 1mongo 其他命令 删除服务 1mongod --remove 关闭服务 1net stop mongodb Linux系统
十、promise的使用
Promise用来做什么 用来解决回调地狱。回调地狱也就是回调函数中嵌套了回调函数,代码阅读性低。 例如如下代码: 123456789101112131415161718192021222324252627const fs = require("fs");// 读A文件fs.readFile(`${__dirname}/etc/a.txt`, "utf-8", (err, data) => { if (err) { console.log(err); } else { console.log(data); // 读B文件 fs.readFile(`${__dirname}/etc/b.txt`, "utf-8", (err, data) => { if (err) { console.log(err); } else { ...