node.js基础
1 Node.js Node.js 简介简介及安装
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
Node.js使用的是CommonJs规范。
Node.js主要应用于服务端,主要用来操作文件和创建http服务及进程操作。
nodejs 的诞生
2009年5月,Ryan Dahl在GitHub上发布了最初版本的部分Node.js包。 2011年7月,在微软的支持下登陆 Windows 平台。Node 的生产环境基本是在 Linux 下。注:是 Node 选择了 JavaScript,不是 JavaScript 发展出来了一个 Node。
01 Node.js国内外的应用情况简介及安装
• Paypal、Godaddy、IBM、雅虎、微软、SAP、Uber、Medium
• LinkedIn 、Twitter、知乎、网易、Groupon、GitHub、NASA、腾讯、 Rakuten、Voxer、Worktile
•阿里、Netflix、Walmart
•各种创业团队主要应用领域
• RESTFul API 基于http协议的API
• 实时多人游戏
•企业级Web服务,如跨域、服务器端的相应请求
• 基于Web的应用
•多客户端通信,即实时通信,如消息推送等
01 Node.jsNodejs安装简介及安装
稳定版本:12.18.3
最新版本号:14.10.0
版本优势:Node.js14版本更新内容,诊断功能确定为稳定功能、V8 的升级、实验性的(异步本地存储API) Async Local Storage API、streams APIs 的强化、国际化支持的加强(部署支持230多种语言环境,并以大约60种语言进行了本地化)、实验模块警告的删除以及一些已过时的 API 的删除。预计十月份将升级为LTS(长期支持版本)。
安装见安装文档
01 Node.js简介及安装
Nodejs运行
node 文件名.js
02 Nodejs 特点
1.单线程:Google V8是单线程的;
好处:一个线程响应多个连接,系统不再有线程创建、销毁的时间开销。
坏处:就是一个用户造成了线程的崩溃,整个服务都会受到部分影响。
02 Node.jsNodejs 特点特征
2. 非阻塞I/O机制:即多任务机制,也称异步机制,其在执行一个任务的时候,不会等待任务执行完毕再继续执行,而是继续执行下一个任务,当任务执行完毕后,以事件的形式通知执行I/O的线程,此时线程会执行这个事件的回调函数。
02 Nodejs 特点
3.事件环机制:又称事件驱动,根据当前出现的事件,调动资源进行相关的处理
02 Node.jsNodejs全局对象特征
Node.js中的全局对象是global,所有全局变量(除了global本身以外)都是global对象的属性。相当于浏览器中的 window对象。注:ES6语法中,通过let和const声明的全局变量不会绑定在global的属性上。
Nodejs全局变量
global 最根本的作用是作为全局变量的宿主。按照ECMAScript的定义,满足以下条件的变量是全局变量:
1) 在最外层定义的变量;
2) 全局对象的属性;
3) 隐式定义的变量(未定义直接赋值的变量)。
注:请不要使用var定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险。
02 __dirname
__dirname表示当前执行脚本所在的目录。
__filename
__filename它将输出当前正在执行文件所在位置的绝对路径及文件名(包括后缀)。
03 Buffer概念 模块
Buffer模块是Node的核心类库,提供了一种原始的数据存储方法(即二进制形式存储数据)。注:虽然Buffer的存储方式为二进制,但其输出的表现形式为十六进制。
Buffer的初始化
● Buffer.alloc(size[, fill[, encoding]]),创建一个指定大小的Buffer,如果没有设置 fill,则默认填满 0;
03 Buffer模块
Buffer缓存区的输出
● buf.toString([encoding[, start[, end]]]) 将缓冲区中的数据以字符串的形式读取
03 Buffer模块常见编码格式:
编码格式 说明
ascii 仅支持 7 位 ASCII 数据。如果设置去掉高位的话,这种编码是非常快的。
utf16le 2 或 4 个字节,小字节序编码的 Unicode 字符。支持代理对(U+10000 至 U+10FFFF)。
ucs2 utf16le 的别名。
base64 Base64 编码。
latin1 一种把 Buffer 编码成一字节编码的字符串的方式。
binary latin1 的别名。
hex 将每个字节编码为两个十六进制字符。
utf8 多字节编码的 Unicode 字符。许多网页和其他文档格式都使用 UTF-8 。中文字使用了三个字节。
03 Buffer模块
04 模块化模块的概念:
为了代码拥有更好的维护性,经常会把多个函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Node.js中,一个js文件就称之为一个模块(Module)。
模块的好处:可以提高代码的维护性和可复用性。避免函数名和变量名的冲突。
模块化的方式:
ES5中没有原生支持模块化,我们只能通过script标签引入js文件来实现模块化。在node中为了对模块管理,引入了
CommonJS规范。
1、定义模块:
在CommonJS规范中,一个单独的JS文件就是一个模块。在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性。
2、抛出模块:模块只有一个出口,module.exports/exports,我们需要把需要输出的内容放入该代码块内。
3、引入模块:
引入模块使用require()方法,该方法读取一个文件并执行,返回文件使用 module.exports/exports抛出的名字。
04 模块化
04 模块化exports与module.exports
module.exports是实体抛出功能方法。exports只是module.exports的引用。模块最终返回 module.exports给调用的函数,而不是exports。exports本质是收集属性,如果module.exports当前没有任何属性,exports会把这些属性赋予module.exports。如果module.exports已经存在属性,那么exports
04 模块化模块的加载机制
模块标识
模块标识指传递给require()方法的参数,它必须是符合小驼峰命名的字符串,或者以.、..开头的相对路径,或者绝对路径。它可以没有文件名后缀.js。
模块的分类
在Node中,模块分为两类:一类是Node提供的模块,称为核心模块;另一类是用户编写的模块,称为文件模块。
核心模块
核心模块部分在Node源代码的编译过程中,编译进了二进制执行文件。在Node进程启动时,部分核心模块就被直接加载进内存中,所以这部分核心模块引入时,文件定位和编译执行这两个步骤可以省略掉,并且在路径分析中优先判断,所以它的加载速度是最快的。
文件模块
文件模块则是在运行时动态加载,需要完整的路径分析、文件定位、编译执行过程,速度比核心模块慢。
05 事件订阅机制EventEmitter
Node.js 核心 API 通常构建于异步事件驱动架构,且某些类型的对象(又称触发器,Emitter)会触发命名事件来调用函数(又称监听器,Listener)。例如,net.Server 会在每次有新连接时触发事件,fs.ReadStream 会在打开文件时触发事件,stream会在数据可读时触发事件。
所有能触发事件的对象都是 EventEmitter 类的实例。EventEmitter类由events模块定义的,其核心就是事件触发与事件监听器功能的封装。这个类中有一个on()方法,用于将一个或多个事件监听器绑定到命名事件上。当事件被触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。
events 模块
events 模块只提供了一个对象:events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能
的封装。EventEmitter类当新增监听器时,会触发 'newListener' 事件;当移除已存在的监听器时,则触发
'removeListener' 事件。
案例 自定义EventEmitter事件监听
05 事件订阅机制EventEmitter
回调函数及参数
EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。
当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。
05 事件订阅机制EventEmitter
EventEmitter 的方法
方法名 描述
addListener(eventName, listener) 为指定事件添加一个监听器到监听器数组的尾部。
on(eventName, listener) 为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
once(eventName, listener) 为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发后立刻解除该监听器。
removeListener(eventName, listener)
removeAllListeners([eventName]) 移除所有事件的所有监听器,如果指定事件,则移除指定事件的所有监听器。
setMaxListeners(n) 默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。
listeners(eventName) 返回指定事件的监听器数组。
emit(eventName[,...args]) 按监听器的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false。
06 包与包的定义NPM
模块的高级包装形式就是包,与核心模块类似,就是将一些预先设计好的功能或API封装到一个文件夹,以目录形式存储,存放在“node_modules”文件夹中,提供给其他开发者使用。,注:包中最终指向还是一个模块。且模块必须遵循CommonJS规范。
包的组成
包是由包结构和包描述文件两个部分组成。
●包结构:用于组织包中的各种文件
●包描述文件(package.json):描述包的相关信息,以供外部读取分析
完全符合CommonJS规范的包目录应该包含如下文件:
● package.json:包描述文件。
● bin:用于存放可执行二进制文件的目录。
● lib:用于存放JavaScript代码的目录。
● README.MD:包的相关说明信息。
06 包与包描述文件NPM
包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件——package.json,位于包的根目录下,是包的重要组成部分。而NPM的所有行为都与包描述文件的字段息息相关。
如何生成一个package.json文件使用npm init可以初始化一个package.json文件。
06 包与NPM
06 包与NPM
06 包的查找流程
06 NPM简介
npm,JavaScript代码的开源社区,网址为:https://www.npmjs.com/,该网站提供了数以万个包模块,这些包模块实现了不同的功能。提供给需要使用的人进行下载并使用。
npm(node package manager),称为“node包管理器”。它本身也是一个命令行工具。主要功能就是管理node包,包括:安装,卸载,发布,更新,查看等。随着node安装成功后,该工具会自动安装。
npm本身是一个二进制包,是基于couchdb的一个数据库,详细记录了每个包的信息(包名,版本,依赖,作者等)。
使用场景
1、 从npm服务器下载其他人编写的第三方包或命令行程序到本地,供本地项目使用。
2、 将自己编写的包或或命令行程序,发布到npm服务器供其他人使用。
网址:
https://www.npmjs.com/ https://www.npmjs.cn/ 查看NPM版本号: npm -v / -version 06 初始化package.json文件
手动创建
npm init
自动创建
06 包与安装NPMNPM服务器上的第三方包
全部安装
npm i / install / add
此命令会据根目录下的配置文件package.json,自动下载所需的模块,如果package.json 不在当前目录下,会自动寻找上级目录中是否有package.json文件,找到package.json文件后,在package.json 文件的同级目录中创建node_modules文件夹,并存入下载的模块。
06 包与NPM
安装NPM服务器上的第三方包
安装产品模式的包
npm i / install 包名 -P / --save-prod
此命令将包信息写入package.json的产品模式,dependencies字段中,是默认设置,即可以省略不写。
安装开发模式的包
06 包与NPM
常用命令
卸载
npm uninstall / rm / remove / r / un / unlink package
06 包与CNPM镜像NPM
地址: https://npm.taobao.org/
cnpm是一个功能和npm一模一样的命令工具,同样可以完成包的管理工作,同步频率目前为10分钟一次以保证尽量与官方服务同步。
不同的是: npm从国外服务器下载包(https://www.npmjs.com/)。 cnpm从国内淘宝服务器下载包,速度快(https://npm.taobao.org/)。
07 FSNode.js模块文件系统(fs模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的
fs.readFile() 和同步的fs.readFileSync()。写文件使用方法fs.writeFile() 和fs.writeFileSync()。在繁忙的进程中,强烈建议使用这些调用的异步版本。这样可以避免阻塞。
07 FS模块
Stat类:
fs.stat(path[, options], callback)
参数:
07 FS写文件方法:模块
fs.writeFile(file,data[, options], callback); fs.writeFileSync(file,data[, options]);
参数:
● file <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符。
● data <string> | <Buffer> | <TypedArray> | <DataView> 需要写入文件的内容
● options <Object> | <string> 可选参数
■ encoding <string> | <null> 编码格式,默认值:’utf8’。
■ mode <integer> 设置文件模式(权限和粘滞位)。默认值: 0o666。
■ flag <string> 文件系统标志。默认值: 'w'。即默认写入为覆盖写入
● callback <Function> 回调函数
■ err <Error>,错误信息
注:异步操作,同一个文件上多次写操作,不等待回调函数不安全。
07 FS读文件方法:模块
fs.readFile(path[, options], callback); fs.readFileSync(path[, options]);
参数:
● path <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符。
● options <Object> | <string> 可选参数
■ encoding <string> | <null> 编码格式,默认值: null。注:目前只有两个读方法的编码格式未空。
■ flag <string> 文件系统标志。默认值: 'r'。
● callback <Function>
■ err <Error>,错误信息
■ data <string> | <Buffer>,读取的文件内容,若未设置编码格式,默认是Buffer类型。注:异步操作,会缓冲整个文件,增大内存成本。
07 FS修改文件名方法:模块
fs.rename(oldPath, newPath, callback); fs.renameSync(oldPath, newPath);
参数:
● oldPath <string> | <Buffer> | <URL> 旧文件路径及文件名。
● newPath <string> | <Buffer> | <URL> 新文件路径及文件名。 ● callback <Function> 回调函数
■ err <Error>,错误信息
注:如果新文件路径下存在该文件,则会被覆盖。
07 FS删除文件方法:模块
fs.unlink(path,callback) fs.unlinkSync(path)
参数:
● path <string> | <Buffer> | <URL>文件名。 ● callback <Function> 回调函数
■ err <Error>,错误信息
注:此方法只能删除文件,不能删除目录。
07 FS创建目录方法:模块
fs.mkdir(path[, options], callback); fs.mkdirSync(path[, options]);
参数:
● path <string> | <Buffer> | <URL>
● options <Object> | <integer>
■ recursive <boolean> 指定是否创建父文件夹。默认值: false。
■ mode <integer> 设置文件模式(权限和粘滞位)。默认值: 0o777。注:Windows 上不支持。
● callback <Function>
■ err <Error>
07 FS读取目录方法:模块
fs.readdir(path[, options], callback); fs.readdirSync(path[, options]);
参数:
● path <string> | <Buffer> | <URL> 路径
● options <string> | <Object>
■ encoding <string> 编码格式。默认值: 'utf8'。
■ withFileTypes <boolean> 设置files 文件名数组中是否包含fs.Dirent对象。 默认值: false。 ● callback <Function>
■ err <Error> 错误信息
■ files <string[]> | <Buffer[]> | <fs.Dirent[]> 目录中的文件名的数组
07 FS删除目录方法:模块
fs.rmdir(path[, options], callback) fs.rmdirSync(path[, options], callback)
参数:
● path <string> | <Buffer> | <URL> ● options <Object>
■ maxRetries <integer> 如果遇到EBUSY, EMFILE, ENFILE, ENOTEMPTY, 或者 EPERM 错误,则
Node.js将会在每次尝试时以 retryDelay设置的毫秒线性回退等待重试该操作。此选项代表重试的次数。如果 recursive选项不为true,则忽略此选项。默认值: 0.
■ recursive <boolean> 如果为 true,则执行递归的目录删除。在递归模式中,如果 path 不存在则不报告错误,并且在失败时重试操作。默认值: false.
■ retryDelay<integer> 重试等待的时间,单位是ms。如果recursive选项不为true,则忽略此选项。
默认值: 100。
● callback <Function>
■ err <Error>
07 FS文件流操作:模块
概念:
流(stream)是Node.js中处理流式数据的抽象接口。stream模块用于构建实现了流接口的对象。Node.js提供了多种流对象。如,HTTP服务器的request和process.stdout都是流的实例。流既可以是可读的、可写的、或可读可写的。所有的流都是EventEmitter的实例。
NodeJs中的四种流类型:
● Readable - 可读操作。
● Writable - 可写操作。
● Duplex - 可读可写操作.
● Transform - 操作被写入数据,然后读出结果。
Stream 对象中的常见事件:
● data - 当有数据可读时触发。
● end - 没有更多的数据可读时触发。
● error - 在接收和写入过程中发生错误时触发。
● finish - 所有数据已被写入到底层系统时触发。
● open- 打开文件时触发。
07
读文件流:
fs.createReadStream(path[,options])
参数:
● path <string> | <Buffer> | <URL> 文件路径。
● options <string> | <Object> 可选参数
■ flags <string> 文件系统标志。默认值: 'r'.
■ encoding <string> 编码格式。默认值: null
■ fd <integer> 文件描述标识。默认值: null
■ mode <integer> 设置文件模式(权限和粘滞位)。默认值: 0o666
■ autoClose <boolean> 指定文件描述符是否自动关闭,默认值: true ■ emitClose <boolean> 设置销毁后是否触发“close”事件。默认值: false ■ start <integer> 指定开始读取的字节位置。
■ end <integer> 指定结束读取的字节位置。默认值: Infinity
■ highWaterMark <integer> 指定返回的流具有64 kb。默认值: 64 * 1024
■ fs <Object> | <null> 设置是否覆写open()、read()和close()事件。默认值: null
案例 流中读取数据
07
写文件流:
fs.createWriteStream(path[,options])
参数:
● path <string> | <Buffer> | <URL> 文件路径。
● options <string> | <Object> 可选参数
■ flags <string> 文件系统标志。默认值: 'w'.
■ encoding <string> 编码格式。默认值: ‘utf8’
■ fd <integer> 文件描述标识。默认值: null
■ mode <integer> 设置文件模式(权限和粘滞位)。默认值: 0o666
■ autoClose <boolean> 指定文件描述符是否自动关闭,默认值: true ■ emitClose <boolean> 设置销毁后是否触发“close”事件。默认值: false ■ start <integer> 指定开始写入的字节位置。
■ fs <Object> | <null> 设置是否覆写open()、write()、writev()和close()事件。默认值: null
案例 流写数据到文件
07
管道流:
管道提供了一个输出流到输入流的机制。即绑定可写流到可读流,将可读流自动切换到流动模式,并将可读流的所有数据推送到绑定的可写流。
08 HTTP模块
Web应用架构:
08 HTTP创建WEB模块服务器:
引入方法:
引入http模块依赖:const http = require("http");
基础方法:
createServer(),创建服务器方法。
listen(端口, IP地址, 启动成功的回调函数),设置端口号,IP地址方法 end(),结束响应并向客户端发送内容方法
writeHeader(200,状态消息, {‘Content-Type’: ‘text/plain; charset=utf-8‘}),设置响应报文头属性Content-Type.
08 HTTPHttp协议模块
HTTP(Hyper Text Transfer Protocol)< 超文本传输协议> 的缩写. 是用于从WWW 服务器传输超文本到本地浏览器的传输协议.HTTP 是一个应用层协议, 由请求和响应构成, 是一个标准的个客户端和服务器模型。通常基于
TCP连接方式特点
1. 支持客户端/ 服务器模型
2. 简单快速
3. 灵活
4. 无连接
5. 无状态
http与https的区别
1) http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
2) 端口号不同http是80,https是443
08 HTTPURL 模块
URL是统一资源定位符,一种特殊类型的URI,,互联网上的每个文件都有一个唯一的URI,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。完整的、带有授权部分的普通统一资源标志符语法看上去如下:
08 HTTPhttp请求信息:模块
当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:
● 请求方法URI协议/版本
● 请求头(Request Header)
● 请求正文
请求方法 空格 URL 空格 协议版本 回车符 换行符
请求行
头部字段名 : 值 回车符 换行符
…
头部字段名 : 值 回车符 换行符
回车符 换行符
08 HTTP模块
http响应:
在接收和解释请求信息后,服务器返回一个 HTTP 响应信息。
HTTP 响应由三部分组成:
●状态行:
●消息报头:响应报头后述
●响应正文:服务器返回的资源内容
08 HTTP模块
http协议通信模型:
请求 -> 处理 -> 响应:
请求:由客户端发起请求;处理:由服务器端处理请求;
08 HTTP常用模块模块----Path模块:
● path.basename() 获取目录的最后一部分
● path.delimiter 提供平台特定的路径定界符。
● path.dirname() 获取目录的目录名 ● path.extname() 获取目录的扩展名
● path.isAbsolute() 检测目录是否为绝对路径
● path.join() 目录拼接
● path.normalize() 方法规范化给定的 path,解析‘..’ 和‘.’ 片段。
● path.parse(path) 返回一个对象,其属性表示 path 的重要元素。
08 HTTP常用模块模块----url模块:
url 模块提供了两套 API 来处理 URL:一个是旧版本遗留的 API,一个是实现了 WHATWG 标准的新API。
遗留API:
08 HTTP常用模块模块---- querystring模块:
●querystring.parse();将URL格式的字符串序列化为Object类型的对象,且自带转码功能
●querystring.stringify();将一个Object类型的对象序列化一个URL格式的字符串,且自带编码功能
●querystring.escape();将字符串进行编码
●querystring.unescape();解码
08 HTTP解析GET模块请求:
req.url: 获取浏览器地址栏URL地址和GET请求参数(注:从端口后面开始获取)。
解析POST请求:
on(‘request’, (req, res)=> { 请求的处理函数 }),绑定监听事件方法:常见事件:
data事件:处理post请求的参数。
end事件:结束请求事件。
08 HTTP模块
认识----URL 互联网URL
定义及路由的匹配路由
08 HTTP常见服务器模块
常见服务器包括Apache、Apache Tomcat、IIS、Node、Nginx、WebLogic、kangle等。
Node.js静态资源
由于Node自身支持构建服务器,因此它可以构建静态服务器,响应静态资源。
mime类型
又称文档类型。MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
注:node的http模块的最底层是C++实现。
08 HTTP模块
常见的MIME类型(通用型):
名称 文件格式 MIME类型
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
PNG图像 .png image/png
Microsoft Word文件 .word application/msword
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
css文件 .css text/css
Json文件 .json application/json
JS文件 .js text/JavaScript
08 http模块
http响应状态码:
分类 分类描述
1** 请求已被接受,需要继续处理
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
08
状态码 英文名称 状态码含义
100 Continue 这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。
101 Switching Protocols 换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议。
102 Processing 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
08
状态码 英文名称 状态码含义
200 OK 请求成功。一般用于GET与POST请求,出现此状态码是表示正常状态。
201 Created 已创建。成功请求并创建了新的资源
202 Accepted 已接受。已经接受请求,但未处理完成
203 Non-
Authoritative
Information 服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。
204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域,以便用户能够轻松地开始另一次输入。
206 Partial Content 部分内容。服务器成功处理了部分GET请求,类似于迅雷这类的 HTTP下载工具是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。
08
状态码 英文名称 状态码含义
300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI。
303 See Other 查看其它地址。对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。这个方法的存在主要是为了允许由脚本激活的
POST请求输出重定向到一个新的资源。这个新的 URI 不是原始资源的替代引用。
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。
305 Use Proxy 使用代理。所请求的资源必须通过代理访问。
306 Switch Proxy 在最新版的规范中,306状态码已经不再被使用。
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向。
08
状态码 英文名称 状态码含义
400 Bad Request 客户端请求的语法错误,服务器无法理解,请求参数有误。
401 Unauthorized 请求要求用户的身份认证。
402 Payment Required 该状态码是为了将来可能的需求而预留的。
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405 Method Not Allowed 客户端请求中的方法被禁止
406 Not Acceptable 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
409 Conflict 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
08
状态码 英文名称 状态码含义
410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置。
411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。
412 Precondition Failed 服务器在验证在请求的头字段中给出先决条件时,先决条件错误
413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理。
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。
416 Requested range not satisfiable 客户端请求的范围无效。
417 Expectation Failed 服务器无法满足Expect的请求头信息。
08
状态码 英文名称 状态码含义
421 too many connections 从当前客户端所在的IP地址到服务器的连接数超过了服务器许可的最大范围。
422 Unprocessable
Entity 请求格式正确,但是由于含有语义错误,无法响应。
423 Locked 当前资源被锁定。
424 Failed
Dependency 由于之前的某个请求发生的错误,导致当前请求失败,例如
PROPPATCH。
08
状态码 英文名称 状态码含义
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。这暗示着服务器不能或不愿使用与客户端相同的版本。响应中应当包含一个描述了为何版本不被支持以及服务器支持哪些协议的实体。
600 Unparseable Response Headers 源站没有返回响应头部,只返回实体内容
浙公网安备 33010602011771号