axios攜帶cookie配置詳解(axios+koa) 原

  話很少說,一個字,幹!
  
  前端配置以下:
  
  axios.defaults.withCredentials = true; //配置爲tru
  
  openid: 'oJ0mVw4QrfS603gFa_uAFDADH2Uc',
  
  date: '2018-11-21'
  
  }).then(function (response) {
  
  console.log(response)
  
  })
  
  前端配置withCredentials = true 後端的跨域也須要配置
  
  app.use(async (ctx, next) => {
  
  ctx.set('Access-Control-Allow-Origin', ctx.request.header.origin);
  
  ctx.set('Access-Control-Allow-Credentials', true);
  
  await next();
  
  });
  
  //防止每次請求都返回Access-Control-Allow-Methods以及Access-Control-Max-Age,
  
  //這兩個響應頭實際上是沒有必要每次都返回的,只是第一次有預檢的時候返回就能夠了。
  
  app.use(async (ctx, next) => {
  
  if (ctx.method === 'OPTIONS') {
  
  ctx.set('Access-Control-Allow-Methods', 'PUT,DELETE,POST,GET');
  
  ctx.set('Access-Control-Max-Age', 3600 * 24);
  
  ctx.body = '';
  
  }
  
  await next();
  
  });
  
  前端全棧學習交流圈:866109386,面向1-3經驗年前端開發人員,幫助突破技術瓶頸,提高思惟能力,羣內有大量PDF可供自取,更有乾貨實戰項目視頻進羣免費領取。
  
  實例展現完了,咱們來說講都是怎麼回事
  
  **withCredentials:**默認狀況下,跨源請求不提供憑據(cookie、HTTP認證及客戶端SSL證實等)。經過將withCredentials屬性設置爲true,能夠指定某個請求應該發送憑據。
  
  默認值爲false。
  
  true:在跨域請求時,會攜帶用戶憑證
  
  false:在跨域請求時,不會攜帶用戶憑證;返回的 response 裏也會忽略 cookie
  
  當配置了 withCredentials = true時,必須在後端增長 response 頭信息Access-Control-Allow-Origin,且必須指定域名,而不能指定爲*!!!
  
  那麼問題就來了,如果多個域名呢? 我配置的是任意域名均可以訪問,可是這樣並不安全。建議作法是建立一個數組,每次去檢測域名是否在數組內,存在則繼續
  
  講到這裏了,那麼延伸一下 post請求下的options
  
  options 它是一種探測性的請求,經過這個方法,客戶端能夠在採起具體資源請求以前,決定對該資源採起何種必要措施,或者瞭解服務器的性能。
  
  前臺跨域post請求,因爲CORS(cross origin resource share)規範的存在,瀏覽器會首先發送一次options嗅探,同時header帶上origin,判斷是否有跨域請求權限,服務器響應access control allow origin的值,供瀏覽器與origin匹配,若是匹配則正式發送post請求。
  
  每一次非簡單請求都會實際上發出兩次請求,一次預檢一次真正請求,這就比較損失性能了。
  
  // 樣式相關的測試用例
  
  it('icon 默認的 order 是 1', () => {
  
  const wrapper = mount(Button, {
  
  propsData: {
  
  icon: 'setting'
  
  }
  
  })
  
  const vm = wrapper.vm
  
  const icon = vm.$el.querySelector('svg')
  
  expect(getComputedStyle(icon).order).to.eq('1')
  
  })
  
  複製代碼
  
  在查看了 Vue Test Utils 的文檔以後。查詢到有一個屬性 attachToDocument: true, 能夠設置,試着把元素放置到 DOM 之中。
  
  複製代碼
  
  // 樣式相關的測試用例 添加 attachToDocument: true 屬性以後
  
  it('icon 默認的 order 是 1', (www.fengshen157.com/) => {
  
  const wrapper = mount(www.gcyl158.com Button, {
  
  attachToDocument: true,
  
  propsData: {
  
  icon: 'setting'
  
  }
  
  })
  
  const vm = wrapper.vm
  
  const icon = vm.$el.querySelector(www.gcyL157.com'svg')
  
  expect(getComputedStyle(www.haitianguo.cn icon).order).to.eq('1')
  
  })
  
  複製代碼
  
  但我添加了以後,仍然沒法經過測試。根本緣由仍舊是沒有使用 Karma 打開瀏覽器進行測試。
  
  解決過程
  
  配置 package.json
  
  在 package.json 中添加依賴配置,以下圖。
  
  安裝依賴
  
  使用以下命令安裝以前 package.json 中添加的依賴。
  
  yarn add -D karma karma-chrome-launcher www.mingrenf178.com karma-mocha karma-sourcemap-loader karma-spec-reporter karma-webpack chai sinon sinon-chai
  
  建立 karma.config.js
  
  在 Vue Cli 3 的官方文檔 webpack 相關章節中,能夠查詢到 Vue Cli 3 將 webpack.config.js 藏到了一個地方,即 /node_modules/@vue/cli-service/webpack.config.js。
  
  因此就有了2圖的中間件。 Access-Control-Max-Age: 86400 設置一個相對時間,在該非簡單請求在服務器端經過檢驗的那一刻起,當流逝的時間的毫秒數不足Access-Control-Max-Age時,就不須要再進行預檢,能夠直接發送一次請求。前端

相關文章
相關標籤/搜索