实现异步的四种方法
- 回调函数
回调函数可以看作是把函数分成了两个执行部分,先按照顺序执行第一个部分,然后再return第二部分的函数,执行第二个部分的函数,这样就不会像同步请求一样,阻塞函数执行。 原理是利用定时器把函数第一部分放入事件队列中,因此不阻塞执行 - Promise
虽然回调函数已经够用了,但是遇到多层嵌套的回调函数,可能会发生奇怪的错误,这个时候使用Promise可以解决这个问题,它每一个函数都返回一个Promise对象,该对象有一个then方法,允许执行回调函数,这样嵌套的回调函数就变成链式调用,保证不会出错 - Generator
Generator定义的函数可以被暂停执行,它的执行类似于协程的概念,一个线程A执行,然后执行到某处暂停,去执行线程B,线程B执行完以后交还执行权给线程A。(async是Genetrator的语法糖) - 事件监听
当某个事件发生,就执行某个函数,也实现了异步 - 发布/订阅
也叫做观察者模式,当某个任务执行完毕,就发布一个信号(执行一个函数),然后订阅该信号的函数就执行第二段方法。
JavaScript闭包
闭包的概念:闭包是函数外部和函数内部的沟通桥梁。
Js中变量的作用域有两种,一种是全局,一种是局部,在函数内部的变量作用域是局部的,在函数外部不能直接访问内部的变量,这个时候闭包的出现就可以沟通函数内部外部,因为JavaScript的特性,函数内部的函数对父级变量是可见的,实现闭包只要在函数内部再写一个函数,然后return这个函数,就可以访问函数内部的变量了。
HTTP请求的几种方法
- GET:请求获取资源
- POST:传输主体
- PUT:传输文件
- HEAD:获取报文首部
- DELETE:删除文件
- OPTIONS:询问有几种请求方式
- TRACE:获取上一次通信返回给客户端
- CONNECT:要求隧道协议连接代理
HTTP请求报文中的HTTP信息
- 编码提升传输速率
传输的时候进行编码操作,提升传输速率 - 压缩传输的内容编码
对编码格式原样压缩,内容编码后客户端进行接收并解码 - 分割发送分块传输编码
当发送大量数据的时候,把数据分割成很多块然后每一块都使用十六进制标记块大小,客户端接收到数据进行解码操作 - 多种发送数据的多部份对象集合
多部份对象集合包括:multipart/form-data multipart/byteranges - 获取部分内容的范围请求
请求头中写入Range:0~5000,这样就可以获取范围数据 - 内容协商返回最合适的内容
请求头中会携带Accept,Accept-Language,Accept-Encoding,Connect-Language这些信息告知服务器协商使用最合适的内容。客户端用户可以通过浏览器手动选择内容类型。
HTTP状态码
状态码 | 类型 | 原因 |
---|
1XX | 信息性状态码 | 接收的请求正在处理中 | 2XX | 成功状态码 | 请求正常处理完成 | 3XX | 重定向状态码 | 需要进行附加操作以完成请求 | 4XX | 客户端错误状态码 | 服务器无法处理请求 | 5XX | 服务器错误状态码 | 服务器处理i请求出错 |
200 OK:请求成功处理状态码 204 No Content:请求成功但主体中没有内容 206 Partial Content:客户端进行范围请求,服务器成功处理请求
301 Moved Permanently:永久性重定向,表示请求的资源已经被移动到其他URI 302 Found:临时性重定向,表示请求的资源已经被移动到其他URI,希望用户本地用其他URI访问 303 See Other:和301类似,表示请求的资源存在另一个URI 304 Not Modified:资源已经找到,但是不符合条件 307 Temporary Redirect:临时重定向,与302相似但是请求不能从POST改成GET
400 Bad Request:表示请求报文中存在语法错误,服务器无法接收 401 Unauthorized:说明该请求需要通过HTTP认证,若之前已经请求过一次,表示认证失败 403 Forbidden:表示请求资源被拒绝了 404 Not Found:说明服务器无法找到请求的资源
500 Internal Server Error:服务器执行的时候出现了错误 503 Service Unvaliable:服务器超负载或者停机维护
|