精华内容
下载资源
问答
  • 计算机领域中的token的意思

    千次阅读 2019-09-23 08:19:16
    这里转载两篇文章,解释了什么是token,他有多个意思。 原文一出处:token是什么 原文一内容如下: token是什么Token (计算机术语)在计算机身份认证中是令牌(临时)的意思, 在词法分析中是标记的意思。 ...

    这里转载两篇文章,解释了什么是token,他有多个意思。

    原文一出处:token是什么

    原文一内容如下:

    token是什么Token (计算机术语)在计算机身份认证中是令牌(临时)的意思,

    在词法分析中是标记的意思。

     

    令牌(信息安全术语)Token, 令牌,代表执行某些操作的权利的对象访问令牌(Access token)表示访问控制操作主体的系统对象邀请码,在邀请系统中使用Token, Petri 网(Petri net)理论中的Token密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做认证令牌或者加密令牌,一种计算机身份校验的物理设备会话令牌(Session token),交互会话中唯一身份标识符令牌化技术 (Tokenization), 取代敏感信息条目的处理过程。

     

    标记(编译原理术语)词法分析是计算机科学中将字符序列转换为标记(token)序列的过程。从输入字符流中生成标记的过程叫作标记化(tokenization),在这个过程中,词法分析器还会对标记进行分类。 [1-2] 数据处理token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。

     

    原文二出处:此博主转载自原文

    原文二内容为:

    对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么要用他?更不知道其原理,今天我就带大家一起分析分析这东西。

        一、我们先解释一下他的含义:

        1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

        2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

        3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

        了解了Token的意义后,我们就更明确的知道为什么要用他了。

        二、如何使用Token?

        这是本文的重点,在这里我就介绍常用的两种方式。

        1、用设备号/设备mac地址作为Token(推荐)

        客户端:客户端在登录的时候获取设备的设备号/mac地址,并将其作为参数传递到服务端。

        服务端:服务端接收到该参数后,便用一个变量来接收同时将其作为Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,如果相同则放行,不同则拒绝。

        分析:此刻客户端和服务器端就统一了一个唯一的标识Token,而且保证了每一个设备拥有了一个唯一的会话。该方法的缺点是客户端需要带设备号/mac地址作为参数传递,而且服务器端还需要保存;优点是客户端不需重新登录,只要登录一次以后一直可以使用,至于超时的问题是有服务器这边来处理,如何处理?若服务器的Token超时后,服务器只需将客户端传递的Token向数据库中查询,同时并赋值给变量Token,如此,Token的超时又重新计时。

        2、用session值作为Token

        客户端:客户端只需携带用户名和密码登陆即可。

        客户端:客户端接收到用户名和密码后并判断,如果正确了就将本地获取sessionID作为Token返回给客户端,客户端以后只需带上请求数据即可。

        分析:这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。

        三、使用过程中出现的问题以及解决方案?

        刚才我们轻松介绍了Token的两种使用方式,但是在使用过程中我们还出现各种问题,Token第一种方法中我们隐藏了一个在网络不好或者并发请求时会导致多次重复提交数据的问题。

        该问题的解决方案:将session和Token套用,如此便可解决,如何套用呢?请看这段解释:

     

         这就是解决重复提交的方案。

         总结:以上是个人对开发中使用Token和session的一点总结,如有叙述不当之处请指正,我将及时改正并感谢,我知道还有更多更好的使用方式,我在这里只是抛砖引玉,希望大家将您的使用方式提出来,我们一起讨论,学习,一起进步,同时也为像我一样对这方面理解薄弱的朋友提供点帮助,谢谢。

    展开全文
  • 就是说之前的attention大多使用在seq2seq任务中,例如在机器翻译中,attention作用在源句子tokentoken就指的是单词或词语)和目标句子token之间,但是transformer的self-attention作用在源句子的token之间。...

    token包含:class token、patch token,在NLP叫每一个单词为token,然后有一个标注句子语义的标注是CLS,在CV中就是把图像切割成不重叠的patch序列(其实就是token)

    就是说之前的attention大多使用在seq2seq任务中,例如在机器翻译中,attention作用在源句子token(token就指的是单词或词语)和目标句子token之间,但是transformer的self-attention作用在源句子的token之间。

    将图像解释为一系列类似于自然语言中的单词的标记(token),把图像切割成不重叠的patch序列比较直观

    transformer是什么 | TiuVe

     例如上述图对应的代码,从下向上,首先是Token2Img对应的就是2(将1D转为2D),整好对应了Token(单词或词语1D的)==》Img(是2D/3D的)

    展开全文
  • token

    2018-11-15 23:06:55
    Token中文有人翻译成 “令牌”,意思就是,你拿着这个令牌,才能过一些关卡.一般用来做登录校验或则身份验证. 二.传统的身份验证(session的方法) HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。...

    一.什么是token

    Token 的中文有人翻译成 “令牌”,意思就是,你拿着这个令牌,才能过一些关卡.一般用来做登录校验或则身份验证.

    二.传统的身份验证(session的方法)

    HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。

    解决的方法就是,当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 Cookie 里,下次这个用户再向服务端发送请求的时候,可以带着这个 Cookie ,这样服务端会验证一个这个 Cookie 里的信息,看看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。

    上面说的就是 Session,我们需要在服务端存储为登录的用户生成的 Session ,这些 Session 可能会存储在内存,磁盘,或者数据库里。我们可能需要在服务端定期的去清理过期的 Session 。
    在这里插入图片描述

    三 基于 Token 的身份验证方法

    使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

    在这里插入图片描述

    1.客户端使用用户名跟密码请求登录

    2.服务端收到请求,去验证用户名与密码

    3.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端

    4.客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里

    5.客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

    6.服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

    三. token与session的区别

    3.1 为什么要用token

    首先,session的存储是需要空间的,其次,session的传递一般都是通过cookie来传递的,或者url重写的方式;而token在服务器是可以不需要存储用户的信息的,而token的传递方式也不限于cookie传递,当然,token也是可以保存起来的;

    3.2 怎么生成token

    浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的HMAC-SHA256算法,然后加一个密钥,生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端;客户端将token保存起来,下次请求时,带着token,服务器收到请求后,然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息;

    3.3 两者的区别

    token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;
    session服务器会保存一份,可能保存到缓存,文件,数据库;同样,session和token都是有过期时间一说,都需要去管理过期时间;
    其实token与session的问题是一种时间与空间的博弈问题,session是空间换时间,而token是时间换空间。两者的选择要看具体情况而定。

    虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,也就是说,后端不需要记录什么东西,每次一个无状态请求,每次解密验证,每次当场得出合法 /非法的结论。这一切判断依据,除了固化在 CS 两端的一些逻辑之外,整个信息是自包含的。这才是真正的无状态。
    而 sessionid ,一般都是一段随机字符串,需要到后端去检索 id 的有效性。万一服务器重启导致内存里的 session 没了呢?万一 redis 服务器挂了呢?

    方案 A :我发给你一张身份证,但只是一张写着身份证号码的纸片。你每次来办事,我去后台查一下你的 id 是不是有效。
    方案 B :我发给你一张加密的身份证,以后你只要出示这张卡片,我就知道你一定是自己人。
    就这么个差别。

    四 案例实现

    前端实现的时候用axios来拦截到所有请求与响应来进行操作

    4.1 axios拦截器的使用

    拦截所有请求实现转菊花的动作

    //拦截所有的请求
    axios.interceptors.request.use(config => {
        // 在发送请求之前,做一个转动菊花的图
        alert("正在发送请求")
        return config;
      }, error => {
        // 对请求错误做些什么
        return Promise.reject(error);
    })
    

    拦截到所有响应:

    // 添加响应拦截器
    axios.interceptors.response.use(function (response) {
        // 对响应数据做点什么
        return response;
      }, function (error) {
        // 对响应错误做点什么
        return Promise.reject(error);
      });
    

    关于axios学习的链接: https://www.kancloud.cn/yunye/axios/234845

    4.2 axios结合token的技术实现

    import axios from 'axios' // axios引用
    import store from '../../store' // store引用
    const serivce = axios.create({ // 创建服务
      baseURL: 'http://test.api.rujiaowang.net', // 基础路径
      timeout: 5000 // 请求延时
    })
    serivce.interceptors.request.use( // 请求拦截
      config => {
        if (store.getters.userToken) {
          config.headers['X-Token'] = store.getters.userToken
          config.headers['User-Type'] = store.getters.userType ? store.getters.userType : '' // 请求头中存放用户信息
          config.onUploadProgress = (progressEvent) => {
            var complete = (progressEvent.loaded / progressEvent.total * 100 | 0) + '%'
            store.dispatch('setupLoadPercent', complete)
          }
        }
        return config
      },
      error => {
        return Promise.reject(error)
      }
    )
    serivce.interceptors.response.use( // 回复拦截,主要针对部分回掉数据状态码进行处理
      response => {
        return response
      },
      error => {
        return Promise.reject(error)
      }
    )
    export default serivce
    

    Vue刷新token,判断token是否过期、失效,进行登录判断跟token值存储

    刷新token和token是否过期的操作都是由后端实现,前端只负责根据code的不同状态来做不同的操作:可以跟后端讨论不同的状态对应不同的情况来进行处理

    具体实现:

    /**
    * 全局变量 和 设置 、配置等。。。
    */
     
    import axios from 'axios' // 引入axios
     
    import Storage from '@/assets/js/util/storage.js' // storage工具类,简单的封装
     
     
     
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
     
     
     
    /* 请求拦截器 */
     
    axios.interceptors.request.use(function (config) { // 每次请求时会从localStorage中获取token
     
        let token = Storage.localGet('token')
     
        if (token) {
        
            token = 'bearer' + ' ' + token.replace(/'|"/g, '') // 把token加入到默认请求参数中
     
            config.headers.common['Authorization'] = token
     
        }
     
        return config
     
    }, function (error) {
     
        return Promise.reject(error)
     
    })
     
    /* 响应拦截器 */
     
    axios.interceptors.response.use(function (response) { // ①10010 token过期(30天) ②10011 token无效
     
    if (response.data.code === 10010 || response.data.code === 10011) {
     
        Storage.localRemove('token') // 删除已经失效或过期的token(不删除也可以,因为登录后覆盖)
     
        router.replace({
     
            path: '/login' // 到登录页重新获取token
     
        })
     
    } else if (response.data.token) { // 判断token是否存在,如果存在说明需要更新token
     
        Storage.localSet('token', response.data.token) // 覆盖原来的token(默认一天刷新一次)
     
    }
     
        return response
     
    }, function (error) {
     
        return Promise.reject(error)
     
    })
    
    展开全文
  • 正在用react写一些项目,但是很多需要用到的知识,没有合适的中文文档可以查看和学习。 于是就有了自己翻译官方文档的想法。 我英语水平一般,很多单词不认识,都是靠百度和搜集相关资料查到的。如有错误,欢迎在...

    axios 文档翻译

    大家好,我是梅巴哥~

    正在用react写一些项目,但是很多需要用到的知识,没有合适的中文文档可以查看和学习。

    于是就有了自己翻译官方文档的想法。

    我英语水平一般,很多单词不认识,都是靠百度和搜集相关资料查到的。如有错误,欢迎在评论里批评指正。希望这篇文档对大家在axios方面的学习,能有所帮助。

    补充: 我翻译都发在博客了,竟然在搜react-axios时,又找到了一个中文文档。大家也可以直接看这个。

    1,概述

    基于Promise的http库,适用于浏览器和node.js。

    特点:

    • 从浏览器中创建 XMLHttpRequests
    • 从 node.js 创建 http请求
    • 支持promise API
    • 拦截请求和响应
    • 转换请求和响应数据
    • 取消请求
    • 自动转换json数据
    • 客户端支持抵御XSRF(跨站请求伪造)

    2,安装

    用npm:

    npm install axios

    用bower:

    bower install axios

    用cdn:

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

    用ES6的import引入:

    import axios from 'axios'

    3,示例

    • 执行一个GET请求:
    const axios = require('axios')
    
    // 给用户创建一个带有id的请求
    axios.get('/user?ID=12345')
    	.then(function (res) {
              // 处理成功
              console.log(res)
              })
         .catch(function (err) {
                // 处理出错
                console.log(err)
                })
    

    上面的代码还可以这样写,这种写法是带有配置属性的:

    axios.get('/user', {
        params: {
            ID: 12345
        }
    })
    .then(function (res) {
          console.log(res)
          })
    .catch(function (err) {
           console.log(err)
           })
    
    • 执行一个POST请求:
    axios.post('/user', {
        firstName: '迪丽',
        lastName: '热巴'
    })
    .then(function (res) {
          console.log(res)
          })
    .catch(function (err) {
           console.log(err)
           })
    
    • 同时执行多个请求:
    function getUserAccount() {
        return axios.get('/user/12345')
    }
    function getUserPermissions() {
        return axios.get('/user/12345/permissions')
    }
    
    axios.all([getUserAccount(), getUserPermissions()])
    .then(axios.spread(function (acct, perms) {
        // 两个请求都完成了
    }))
    

    4, axios API

    可以通过向 axios 传递相关配置来创建请求

    axios(config)

    // 发送一个POST请求
    axios({
        method: 'post',
        url: '/user/12345',
        data: {
            firstName: '迪丽',
            lastName: '热巴'
        }
    })
    
    // 发送GET请求获取远程图片
    const axios = require('axios');
    const fs = require('fs')
    
    axios({
        method: 'get',
        // 图片的url
        url:  'https://bkimg.cdn.bcebos.com/pic/aec379310a55b319aea21ada4aa98226cefc17c1?x-bce-process=image/resize,m_lfit,h_452,limit_1',
        responseType: 'stream'
    })
    .then(function (res) {
        // 获取响应结果,并生成一个jpg文件
          res.data.pipe(fs.createWriteStream('dilireba.jpg'))
          })
    
    

    在代码目录下生成一个dilireba.jpg照片文件:

    在这里插入图片描述

    双击打开就可以看到图片内容:

    在这里插入图片描述

    axios(url [, config])

    // 发送一个GET请求 (默认方法)
    // 为啥是默认的?可以查看第9条的请求配置
    axios('/user/12345')
    

    5,请求方法的别名

    为方便起见,为所有支持的请求方法提供了别名:

    • axios.request(config)
    • axios.get(url [, config])
    • axios.delete(url [, config])
    • axios.head(url [, config])
    • axios.options(url [, config])
    • axios.post(url [, config])
    • axios.put(url [, config])
    • axios.patch(url [, data [, config]])

    *注意:

    在使用这些别名方法时,url , method, 和 data 属性不需要在配置中专门指定。

    6, Concurrency 并发

    处理并发的助手函数:

    axios.all(iterable)

    axios.spread(callback)

    提示:回看第三点给出的并发的例子里,有这两个助手函数的应用示例。

    7,创建axios实例

    创建一个新的带有自定义配置的axios:

    axios.create([config])

    const instance = axios.create({
        baseURL: 'https://some-domain.com/api/',
        timeout: 1000,
        headers: {'X-Custom-Header': 'foobar'}
    })
    

    8,实例方法

    可用的实例方法展示如下,指定的配置将与实例配置合并:

    axios#request(config)
    axios#get(url[, config])
    axios#delete(url[, config])
    axios#head(url[, config])
    axios#options(url[, config])
    axios#post(url[, data[, config]])
    axios#put(url[, data[, config]])
    axios#patch(url[, data[, config]])
    axios#getUri([config])

    9,请求配置

    以下示例里 ,都是发送请求时可用的配置选项。

    这里 只有url是必须要写的。如果没有指定的方法,请求将会默认以GET形式发送。

    (在第4条的最后有默认get方法举例.)

    {
        	// url 是用于请求的服务器URL
        url: '/user',
            // method 是用于创建请求时的请求方法
        method: 'get', //默认是get
            // baseURL将会被加在url前面,除非url是绝对的或者完整的地址
            //它可以很方便的为一个传递相对路径给axios实例的方法设置一个baseURL
        baseURL: 'https://some-domain.com/api/',
            //transformRequest允许在它发送给服务端前,修改请求数据
            //但是仅适用于 'PUT', 'POST', 和 'PATCH'请求方法
            //数组中的最后一个函数返回一个字符串,Buffer实例,或者ArrayBuffer,
            //FormData 或者 Stream
            //你可以跳转headers对象。
        transformRequest: [function (data, headers) {
            // 做你想做的任何数据转换
                           return data
        }],
            // transformResponse允许在传递给then或catch之前,修改响应数据 
    	transformResponse: [function (data) {
            // 做你想做的任何数据转换
            return data
        }],
            // headers是即将被发送的自定义请求头
        headers: {'X-Requested-With': 'XMLHttpRequest'},
            // params是与请求一起发送的URL参数
            // 它必须是一个无参数对象或者一个URLSearchParams对象
        params: {
            ID: 12345
        },
            // paramsSerializer是一个管理序列化参数的可选函数
        paramsSerializer: function (params) {
            return Qs.stringify(params, {arrayFormat: 'brackets'})
        },
            // data是作为请求体发送的数据
            // 仅适用于'PUT', 'POST', 和 'PATCH'的请求方法中
            // 在没有设置 `transformRequest` 时,必须是以下类型之一:
      		// - string, plain object, ArrayBuffer, ArrayBufferView, 
            // URLSearchParams
      		// - 浏览器专属:FormData, File, Blob
      		// - Node 专属: Stream
        data: {
            firstName: '迪丽热巴'
        },
            // timeout用于指定请求超时的毫秒数
            // 如果请求时间超过了指定的毫秒数,就会终止请求
        timeout: 1000, //默认是0(没有请求超时的时间)
            // withCredentials表示跨域请求时是否需要凭证
        withCredentials: false, //默认不需要
            // adapter允许自定义处理可以让测试更简单的请求
            // 返回一个promise并提供一个有效的响应
        adapter: function (config) {
            
        },
            // auth表示需要使用HTTP基础验证,并提供证明,比如账户密码
            // 这将设置一个Authorization请求头,重写现有的任意使用 `headers` 设置
            // 的自定义 `Authorization`头
        auth: {
            username: '小明',
            password: 'hahh123'
        },
            // responseType表示服务端将会以'arraybuffer', 'blob', 'document',
            // 'json', 'text', 'stream'中的哪种数据类型来响应
        responseType: 'json', // 默认是json
            // responseEncoding表示响应的编码形式
            // 注意:已忽略stream响应类型或客户端请求
        responseEncoding: 'utf8',
            // xsrfCookieName是用作xsrf值的cookie名称
        xsrfCookieName:  'XSRF-TOKEN', //默认的
            // xsrfHeaderName是用作xsrf值的请求头名称
        xsrfHeaderName: 'X-XSRF-TOKEN', // 默认的
            // onUploadProgress允许处理上传进度事件
        onUploadProgress: function (progressEvent) {
            // 对原生进度事件进行处理
        },
            // onDownloadProgress允许处理下载进度事件
        onDownloadProgress: function (progressEvent) {
            // 对原生下载事件进行处理
        },
            // maxContentLength定义了http响应内容的最大字节数
        maxContentLength: 2000,
            // validateStatus定义了对于一个给定的HTTP响应状态码,是resolve还是reject
            // 如果validateStatus返回true或null或undefined,就会
            // 显示resolve。 反之,就会显示reject。
        validateStatus: function (status) {
        	return status >= 200 && status < 300; // 默认的
      	},
            // maxRedirects定义了follow的最大重定向数量。
        maxRedirects: 5, //默认是5
            // socketPath定义了在node.js中使用的UNIX接口
        socketPath: null, // 默认为null
            // httpAgent和httpsAgent定义了在node.js中,用http和https请求时各自的
            // 自定义代理。
        httpAgent: new http.Agent({ keepAlive: true }),
        httpsAgent: new https.Agent({ keepAlive: true }),
            // proxy定义代理服务器的主机名称和端口
            // auth表示 HTTP 基础验证应当用于连接代理,并提供凭据
        proxy: {
        	host: '127.0.0.1',
        	port: 9000,
        	auth: {
         		username: 'mikeymike',
          		password: 'rapunz3l'
        	}
      	},
            // cancelToken 定义了可以用来取消请求的cancel token
        cancelToken: new CancelToken(function (cancel) {
      	})
    }
    

    10, Response Schema 响应模式

    对于一个包含如下信息的请求给出响应:

    {
        	// data是服务端提供的响应数据
        data: {},
            // status是从服务端响应中得到的HTTP状态码
        status: 200,
            // statusText是从服务端响应中得到的HTTP状态信息
        statusText: 'OK',
            // headers是服务器响应的头
        headers: {},
            // config是为请求提供给axios的配置
        config: {},
            // request就是引起这次响应的请求
        request: {}
    }
    

    当使用then时,你就会收到如下响应:

    axios.get('/user/12345')
      .then(function (response) {
        console.log(response.data);
        console.log(response.status);
        console.log(response.statusText);
        console.log(response.headers);
        console.log(response.config);
      });
    

    如果使用了catch,或者通过一个拒绝服务的回调函数,你就会收到一个抛出错误的对象,来解释错误出现在哪里。

    11,Config Defaults 默认配置

    你给每个用到的请求设置指定的默认配置。

    • Global axios defaults 全局默认配置

      axios.defaults.baseURL = 'https://api.example.com';
      axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
      axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
      
      
    • Custom instance defaults自定义实例的默认配置

      // 创建实例时,设置默认配置
      const instance = axios.create({
        baseURL: 'https://api.example.com'
      });
      
      // 创建实例后,修改默认配置
      instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
      
      
    • Config order of precedence配置的优先级顺序

      配置会以一个优先顺序进行合并。这个顺序是:在 lib/defaults.js 找到的库的默认值,然后是实例的 defaults 属性,最后是请求的 config 参数。后者将优先于前者。示例如下:

      // 使用由库提供的配置的默认值来创建实例
      // 此时超时配置的默认值是 `0`
      var instance = axios.create();
      
      // 覆写库的超时默认值
      // 现在,在超时前,所有请求都会等待 2.5 秒
      instance.defaults.timeout = 2500;
      
      // 为已知需要花费很长时间的请求覆写超时设置
      instance.get('/longRequest', {
        timeout: 5000
      });
      

    12,Interceptors 拦截器

    在请求或响应被thencatch处理前,你可以拦截这些请求或响应。

    // 添加一个请求拦截器
    axios.interceptors.request.use(function (config) {
       // 在发送请求前做一些事情
       return config
     }, function (err) {
        return Promise.reject(err)
    })
    
    // 添加一个响应拦截器
    axios.interceptors.response.use(function (res) {
        return res
    }, function (err) {
        return Promise.reject(err)
    })
    

    如果你需要移除一个拦截器,

    const myInterceptor = axios.interceptors.request.use(function () {...})
    axios.interceptors.request.eject(myInterceptor)
    

    你可以给一个自定义axios实例添加拦截器,

    const instance = axios.create()
    instance.interceptors.request.use(function() {...})
    

    13,Handling Errors处理错误

    axios.get('/user/12345')
      .catch(function (error) {
        if (error.response) {
          // 创造请求并且服务器给出一个带状态码的响应
          console.log(error.response.data);
          console.log(error.response.status);
          console.log(error.response.headers);
        } else if (error.request) {
          // 创造了请求但是没有收到响应
          // `error.request` 是在浏览器中XMLHttpRequest和在node.js中
          //  的http.ClientRequest的一个实例
          console.log(error.request);
        } else {
          //设立请求时触发了错误提示
          console.log('Error', error.message);
        }
        console.log(error.config);
      });
    

    你可以用alidateStatus配置项定义一个自定义的HTTP状态码错误范围:

    axios.get('/user/12345', {
        validateStatus: function (status) {
            return status < 500
        }
    })
    

    14,Cancellation 取消

    你可以用一个cancel token 取消请求

    The axios cancel token API is based on the withdrawn cancelable promises proposal.

    • **创建方法一:**你可以用CancelToken.source创建一个cancel token ,示例如下:
    const CancelToken = axios.CancelToken;
    const source = CancelToken.source();
    
    axios.get('/user/12345', {
      cancelToken: source.token
    }).catch(function (thrown) {
      if (axios.isCancel(thrown)) {
        console.log('Request canceled', thrown.message);
      } else {
        //处理错误信息
      }
    });
    
    axios.post('/user/12345', {
      name: 'new name'
    }, {
      cancelToken: source.token
    })
    
    // 取消该请求 (信息参数是可选的)
    source.cancel('Operation canceled by the user.');
    
    • 创建方法二:你也可以通过CancelToken构造函数来创建cancel token

      const CancelToken = axios.CancelToken;
      let cancel;
      
      axios.get('/user/12345', {
        cancelToken: new CancelToken(function executor(c) {
          // 执行函数executor接收一个取消函数作为参数
          cancel = c;
        })
      });
      
      // 取消请求
      cancel();
      

    **提示:**你可以用同样的cancel token取消多个服务器请求

    15,用application/x-www-form-urlencoded格式

    axios自动的把JS对象序列化到JSON。你可以用下列选项中的一个,来发送在application/x-www-form-urlencoded格式中的数据

    • Browser

      在浏览器中,你可以像如下这样用URLSearchParams API

      const params = new URLSearchParams();
      params.append('param1', 'value1');
      params.append('param2', 'value2');
      axios.post('/foo', params);
      
    • Node.js

      在node.js中,你可以像下面这样用querystring模块:

      const querystring = require('querystring');
      axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));
      
      

    oken`取消多个服务器请求

    15,用application/x-www-form-urlencoded格式

    axios自动的把JS对象序列化到JSON。你可以用下列选项中的一个,来发送在application/x-www-form-urlencoded格式中的数据

    • Browser

      在浏览器中,你可以像如下这样用URLSearchParams API

      const params = new URLSearchParams();
      params.append('param1', 'value1');
      params.append('param2', 'value2');
      axios.post('/foo', params);
      
    • Node.js

      在node.js中,你可以像下面这样用querystring模块:

      const querystring = require('querystring');
      axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));
      
      

    补充说明

    了解ajax和axios的关系,可以参考如下资料:


    ajax的一些知识点也放这里吧
    Ajax使用
    
    var xhr = new XMLHttpResponse()
    
    xhr.open('get', url)
    
    xhr.send()
    
    xhr.onreadystatechange = function() {
    
    ​	console.log(xhr.responseText)
    
    }
    
    还有一种写法:
    
    xhr.onload = function() {
    
    ​	console.log(responseText)
    
    }
    
    
    
    xhr.onload和xhr.onreadystatechange方法的区别
    
    前者不兼容低版本ie,不需要判断状态码,只被调用一次
    
    后者兼容低版本ie,需要判断状态码,会被调用多次(每次状态码变化都会调用)
    
    
    
    json字符串data转换为json对象:
    
    JSON.parse(data)
    
    json对象转换为json字符串:
    
    JSON.stringify(data)
    
    
    
    get请求:
    
    xhr.open('get', url?name=dilireba&age=18)
    
    post请求:
    
    xhr.open('post', url)
    
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    
    xhr.send('name=dilireba&age=18')
    
    
    
    ajax状态码xhr.readyState
    
    0:请求未初始化(还没调用open())
    
    1:请求已建立,但是还没有发送(还没调用send())
    
    2:请求已经发送
    
    3:请求正在处理,通常响应中已经有部分数据可以用了
    
    4:响应已经完成,可以获取并使用服务器的响应了
    
    
    
    低版本ie缓存问题
    
    请求地址不发生变化的情况下,只有第一次请求会真正发送到服务端,后续的请求都会从浏览器的缓存中获取结果。即使服务器数据更新了,前端拿到的数据一九i是缓存中的旧数据。
    
    解决方法
    
    在请求地址后面加随机数字
    
    xhr.open('get', 'http://www.something.com?t=' + Math.random())
    
    或者在请求地址后面加时间戳
    
    xhr.open('get', 'http://www.something.com?t=' + Date.now())
    
    

    以上。

    展开全文
  • Token

    2018-07-12 10:32:17
    一、我们先解释一下Token的含义1、Token的引入: ...2、Token的定义: Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户...
  • 这两个c语言中的基本概念,翻译成什么中文比较好?
  • 该模型实现的是英文到中文翻译,下图为了更好展示模型架构用的大佬的图: 整体由encoder和decoder两大部分组成,每部分都有一个LSTM网络,其中encoder输入原始的句子,decoder输入的是含有开始符号的翻译后的...
  • JWT产生和验证Token

    万次阅读 多人点赞 2019-07-31 19:15:33
    Token验证  最近了解下基于 Token 的身份验证,跟大伙分享下。很多大型网站也都在用,...Token中文有人翻译成 “令牌”,我觉得挺好,意思就是,你拿着这个令牌,才能过一些关卡。 传统的Token验证 ...
  • token的理解

    2018-11-06 00:01:26
    Token中文有人翻译成 “令牌”,我觉得挺好,意思就是,你拿着这个令牌,才能过一些关卡   传统身份验证 HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端...
  • Token的简单解释

    2019-05-14 17:40:05
    最近了解下基于 Token 的身份...很多大型网站也都在用,比如Facebook,Twitter,Google+,Github 等等,比起传统的身份验证方法,Token 扩展性更强,也更安全点,非常适合用在 Web 应用或者移动应用上。Token 的中...
  • 今天上传图片时,用户id报 Invalid or unexpected ...翻译成中文是: 无效或意外令牌 经过上网查询,发现都是说数据格式有问题,或者是数据有特殊字符 转载于:https://www.cnblogs.com/monengji/p/10528763.html...
  • 基于 Token 的身份验证和安全问题

    万次阅读 多人点赞 2017-02-13 16:15:41
    1 前言最近了解下基于 Token 的身份验证,跟大伙分享下。很多大型网站也都在用,...Token中文有人翻译成 “令牌”,我觉得挺好,意思就是,你拿着这个令牌,才能过一些关卡。2 基于 Token 的身份验证方法使用基于
  • 深度学习中的token和tokenization

    千次阅读 2021-07-22 16:58:39
    (我阅读的是英文文献,将其完全翻译成中文,并不能很好的帮助阅读,甚至能限制它的意思。所以,用英文解释英文是最好的!) Tokenization is a way of separating a piece pf text into smaller units called ...
  • token详解以及应用原理

    万次阅读 多人点赞 2018-01-11 12:10:16
    一、我们先解释一下Token的含义1、Token的引入: Token...2、Token的定义: Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户
  • 数据库中的Token

    千次阅读 2019-11-27 21:15:53
    一、我们先解释一下Token的含义 1、Token的引入: Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便...
  • 因此提出了使用token,首先说什么是token翻译成中文就是“令牌”的意思。 在Javaweb中servlet、Struts、sping都有token机制(令牌验证机制),但是在web项目中token的作用是用来防止表单重复提交,一般不是用来...
  • token的应用场景

    千次阅读 2018-07-20 10:25:37
    1.基于Token的身份验证 之前Web就是文档的浏览,不需要记录谁浏览了什么文档,随着交互式Web应用的兴起,像电子商城等网站,就需要知道那些人登录了系统。...session的中文翻译是“会话”,当用户打开某个...
  • 简述: 需要一个secret(随机数) 后端利用secret和加密算法(如:HMAC-SHA256)对payload(如...token是一种身份验证的机制,初始时用户提交账号数据给服务端,服务端采用一定的策略生成一个字符串(token),token
  • 例如,“New York City”和“De Blasio”之间存在“mayor”关系,因此Token对(“New”和“De”)被分配为红色标记 ST-OT 主体尾到客体尾: 蓝色标记表示两个位置分别是对的主体和客体的结束标记。例如,“New York ...
  • Token验证介绍

    千次阅读 2017-04-21 19:23:49
    什么是TokenToken中文有人翻译成 “令牌”,我觉得挺好,意思就是,你拿着这个令牌,才能过一些关卡。Token是一个用户自定义的任意字符串。在成功提交了开发者自定义的这个字符串之后,Token的值会保存到服务器...
  • token详解

    2019-09-04 11:46:14
    一、我们先解释一下Token的含义 1、Token的引入: Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便...
  • C#使用Google翻译实现在线翻译

    千次阅读 2020-08-25 18:01:19
    } /// /// 谷歌翻译 /// /// 待翻译文本 /// 自动检测:auto /// 中文:zh-CN,英文:en /// 翻译后文本 public static string Translate(string text, string fromLanguage, string toLanguage) { CookieContainer...
  • 本期介绍的是在oauth2.0中 , 通过调用oauth/token接口 , 框架是如何给我们申请到JWT令牌的 , 内部做了些什么事情 ? 在分析源码之前 , 我们首先需要知道的是我们需要具备哪些调试条件 , 不然会发现许多奇奇怪怪的错误...
  • Invalid or unexpected token(数据格式错误) ...翻译成中文是: 无效或意外的标记。 代码逻辑没问题,那么就是数据问题了 这个错误提示主要是告诉我们:数据中含有特殊字符【碰到这种问题请认真检查数据】 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,480
精华内容 2,992
关键字:

token翻译成中文