一次前端接口報錯net::ERR_HTTP2_PROTOCOL_ERROR的問題記錄

問題描述

4月1日系統部署上線,發現上傳圖片功能跟報錯,報錯的是獲取阿里雲OSS簽名接口,接口中並沒有文件的上傳操作,報錯信息如圖:
image.png
檢查參數傳值正常.於是使用Postman嘗試請求生產環境,發現接口返回正常.檢查日誌並沒有發現錯誤日誌.查找了一些關於此錯誤信息的資料.發現有提到反向代理的問題,然而在嘗試之後並沒有解決問題.最後還是在接口入口處,發現比其他藉口多了一行代碼

header(“Access-Control-Allow-Origin : *”)

將此行代碼註釋後,接口果然正常了.

爲什麼添加了這行代碼會導致Ajax請求報錯?而Postman卻可以正常訪問?
Access-Control-Allow-Origin 是用來設置接口跨域訪問的.設置爲*表示接受任何域的請求.
根據W3C標準,如果支持用戶憑證,設置Access-Control-Allow-Origin爲當前域,並且設置Access-Control-Allow-Credentials爲true;
否則當設置Access-Control-Allow-Origin爲*時,是不允許設置Access-Control-Allow-Credentials爲true的.
參考鏈接:https://www.w3.org/TR/cors/#resource-requests
在這裏插入圖片描述
Access-Control-Allow-Credentials 是用來設置瀏覽器是否需要將服務器返回值暴露給用戶.瀏覽器遵循W3C準則,當請求Response頭的Access-Control-Allow-Origin不是當前域,就不會將返回數據給js . 所以接口設置Access-Control-Allow-Originv爲*時,前端無法獲取到接口返回的數據.
而Postman工具並沒有遵循W3C準則,會忽略http header的設置,所以在postman中接口是正常的.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章