[英]React.js + PHP/Apache: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response
[英]Slack incoming webhook: Request header field Content-type is not allowed by Access-Control-Allow-Headers in preflight response
我嘗試通過瀏覽器中的 fetch API 發布一條 slack 消息:
fetch('https://hooks.slack.com/services/xxx/xxx/xx', {
method: 'post',
headers: {
'Accept': 'application/json, text/plain, */*',
'Content-type': 'application/json'
},
body: JSON.stringify({text: 'Hi there'})
})
.then(response => console.log)
.catch(error => console.error);
};
我收到以下錯誤消息:
Fetch API cannot load:
https://hooks.slack.com/services/xxxxxxx/xxxxx.
Request header field Content-type is not allowed by Access-Control-Allow-Headers in preflight response.
怎么辦?
正是疲軟的API端點不幸出現在其處理從前端JavaScript的跨域請求的被打破的代碼,因為它不處理CORS預檢OPTIONS
請求,因為它應該那么唯一的解決辦法似乎是省略Content-Type
標題。
因此,您似乎需要從請求代碼的headers
部分中刪除以下內容:
'Content-type': 'application/json'
'Content-type': 'application/json'
部分會觸發您的瀏覽器執行CORS 預檢OPTIONS
請求。 因此,為了讓您的瀏覽器允許前端 JavaScript 代碼發送您嘗試執行的POST
請求, https://hooks.slack.com/services
API 端點必須返回一個Access-Control-Allow-Headers
響應標頭在其值中包含Content-Type
。
但是該端點不會返回該標頭,因此預檢失敗並且瀏覽器就在那里停止。
通常,當從前端 JavaScript 發布到需要 JSON 的 API 端點時,將Content-Type: application/json
標頭添加到請求正是您需要做的和應該做的。 但在這種情況下不是——因為特定的 API 端點沒有正確處理它。
我正在使用axios
並且遇到了類似的問題。 對我有用的是將Content-Type
標頭設置為application/x-www-form-urlencoded
。 在此線程中找到它: https : //github.com/axios/axios/issues/475看來這會觸發“簡單請求”,因此避免觸發 CORS 預檢。 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests
哈。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.