Axios 執行post發送兩次請求的小坑

來源:互聯網
上載者:User

標籤:lan   web服務   https   view   首部   方法   tar   憑證   apt   

vue-resource2.0已經不再更新,所以vue2.0官方推薦使用axios來代替。
實際項目也是應用上了vue+axios,然後就有了這麼一段填坑的經曆。

 

問題:axios使用post請求時,發送了兩次,而get則正常。
第一次請求不是正確的post請求,第二次才是正確的

 

調出Google開發人員工具


image.png

 

“Request Method: OPTIONS”
什麼鬼,post請求時,這裡的“Request Method”居然不是post,而是這個OPTIONS。注意:它還是額外發送的。

 

項目中採用前後端分離的開發方式,前端通過調用後端API實現資料轉送。
後端同學則通過反向 Proxy解決了前端跨域的問題。(前端調介面跟在同域下使用時一樣,該怎麼用怎麼用)

 

找到原因:其實這個情況並非bug,而是當項目中有用到跨域請求時,除了get方式的http請求,都會發送一個預檢請求。

跨域資源共用標準新增了一組 HTTP 首部欄位,允許伺服器聲明哪些來源站點有許可權訪問哪些資源。另外,規範要求,對那些可能對伺服器資料產生副作用的 HTTP 要求方法(特別是 GET 以外的 HTTP 要求,或者搭配某些 MIME 類型的 POST 請求),瀏覽器必須首先使用 OPTIONS 方法發起一個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求。伺服器確認允許之後,才發起實際的 HTTP 要求。在預檢請求的返回中,伺服器端也可以通知用戶端,是否需要攜帶身份憑證(包括 Cookies 和 HTTP 認證相關資料)。
相關資料https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_C

 

解決方案:只能麻煩後端同學幫忙處理下

header("Access-Control-Allow-Origin:*");header("Access-Control-Allow-Headers:content-type");header("Access-Control-Request-Method:GET,POST");if(strtoupper($_SERVER[‘REQUEST_METHOD‘])== ‘OPTIONS‘){  exit;}

 

後端遇到請求方式是“Request Method: OPTIONS” 時,直接返回或退出即可,不再往下執行程式。
上述header的設定用的是PHP的設定方法,在Web伺服器端,如nginx, apache也可以對header進行設定。

Axios 執行post發送兩次請求的小坑

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.