亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

REST API 調用從 curl 或 python 成功,但在瀏覽器中失敗

REST API 調用從 curl 或 python 成功,但在瀏覽器中失敗

HUWWW 2022-10-27 10:40:25
我正在嘗試建立一個網站,該網站通過 REST API 從公司擁有的 JIRA Board 請求 JIRA 數據,并在不同的圖表中顯示請求的數據。在使用 JavaScript 開發時,我遇到了CORS 標頭“Access-Control-Allow-Origin”缺失錯誤,因此無法訪問數據。這是一些代碼:var url = myUrl;var auth_string = myJira_user + ":" + myJira_password;var encoded_string = btoa(auth_string);var http_headers = {  "Content-Type": "application/json",  Authorization: "Basic " + encoded_string};var headers = new Headers(http_headers);fetch(url, headers)  .then(response => {    return response.json();  })  .then(data => {    console.log(data);  })  .catch(err => {});這個 JS 腳本在我的瀏覽器控制臺中拋出了上述錯誤,而具有相同參數的簡單 python 腳本或 curl 命令可以工作并輸出數據。這怎么可能?
查看完整描述

1 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

現代瀏覽器首先通過 HTTP OPTIONS 調用檢查 API 服務器上的 CORS 策略。這稱為“預檢請求”。

CORS:https ://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

HTTP 選項:https ://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS

實際上,瀏覽器首先檢查 API 服務器是否有權從源(用戶瀏覽的網站,由域、協議和端口標識)調用和使用 API。如果 API 服務器希望從源進行調用,它會向 OPTIONS 調用返回成功響應,然后瀏覽器繼續進行 GET/POST/etc 調用。但是,如果 API 服務器無法識別來自 OPTIONS 調用的來源,它將返回失敗響應,并且瀏覽器將不會繼續 API 調用,而是生成您觀察到的異常。

CORS + HTTP OPTIONS 是保護 API 訪問和減輕跨站點腳本引起的過多安全和隱私問題的武器庫中的一種機制。

但就您而言,CORS 不會影響來自非瀏覽器應用程序的調用。非瀏覽器應用程序(例如 CURL 或您可以用 Python、Node 等編寫的任何代碼)不會進行 OPTIONS 調用,因此 API 服務器的 CORS 策略不適用。

您可以設置一個中間人/代理服務器來接收來自您的 Web 應用程序的 API 請求,調用目標 API 服務器并編組返回響應,從而繞過 CORS 策略。


查看完整回答
反對 回復 2022-10-27
  • 1 回答
  • 0 關注
  • 282 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號