最近所在技術團隊在開發webapp項目,前端angularjs+後端.Net MVC API,API登錄介面定義為PUT提交方式,在做相容測試時發現UC、safari、微信瀏覽器下都可以登錄,但在華為自帶瀏覽器下登錄介面總是報錯,抓包發現PUT提交請求體為空,用Inisomnia模擬提交空值得到和華
最近所在技術團隊在開發webapp項目,前端angularjs+後端.Net MVC API,API登錄介面定義為PUT提交方式,在做相容測試時發現UC、safari、微信瀏覽器下都可以登錄,但在華為自帶瀏覽器下登錄介面總是報錯,抓包發現PUT提交請求體為空,用Inisomnia模擬提交空值得到和華為瀏覽器一樣的介面返回信息,初步判斷為瀏覽器提交了空值,Google了一下確實存在部分手機瀏覽器不支持PUT提交的情況,後在華為官網上了看下了,已有人遇到過來類似的情況,看來該瀏覽器確實不支持PUT提交。
最終解決方案如下:
查找資料得知PUT和POST差別僅在於Method標識不一樣,遂決定前端加入判斷,若為華為瀏覽器且為PUT提交時,則將此次提交Method改為POST,同時加入Head信息欄位為"Real-Method",表明此次提交所需要的真實方法;後端用MVC自帶過濾器判斷,若Request中頭信息包含"Real-Method"欄位,則將本次請求Method修改為Real-Method的值。
這樣的好處在於,不用修改原有的PUT介面,依然可以支持POST請求,以此來相容那些不支持PUT的手機瀏覽器,且由於介面還要公共給移動端APP,這樣移動端APP端之前已完成的邏輯就不需要做任何修改了。
(我們僅發現在華為6 PLUS、4A上有這樣的問題,P8沒有)
附上代碼如下:
後端: