API 调用通过服务器端代码(node.js,php)工作,但不通过使用 fetch() 在浏览器中通过 JS 进行



我正在尝试通过fetch()发出API POST请求。当我在服务器端(PHP或Node.js)执行它时,它可以正常工作。尝试在浏览器中执行它时,出现两个错误: 1) 405 错误 - 方法不允许 2) CORS 策略已阻止从源"null"获取"url"的访问:对预检请求的响应未通过访问控制检查:请求的资源上不存在"访问控制-允许源"标头。如果不透明响应满足您的需求,请将请求的模式设置为"no-cors",以便在禁用 CORS 的情况下获取资源。

我尝试添加:模式:"无可怜"。然后我收到以下错误: "401 未经授权" 具有以下响应: 401 响应

这是我的标准js设置:

const TrailData = {
email: "test@test.com",
first_name: "sample string 5",
last_name: "sample string 6",
phone2: "12121212"
};

// TRAIL POST ( NOT WORKING )
fetch('http://webapi.mymarketing.co.il/api/contacts', {
method: "POST",
mode: 'no-cors',
headers: {
"Authorization": "API CODE //here comes the API CODE",
"Content-Type": "application/json"
},
body: JSON.stringify(TrailData)
})
.then(res => console.log(res) )
.then(data => console.log(data))
.catch(err => console.log(err))

我的节点 js 设置是:

var postData = {
sms_status: "None",
email: "test@test.com",
first_name: "sample string 5",
last_name: "sample string 6", 
};
let axiosConfig = {
headers: {
"Authorization": "API CODE",
'Content-Type': 'application/json;charset=UTF-8',
"Access-Control-Allow-Origin": "*",
}
};

const Trail = async () =>{
try {
const response = await axios.post('http://webapi.mymarketing.co.il/api/contacts', postData, axiosConfig)
console.log(response)
} catch (error) {
throw new Error(error)
}

}
Trail()

节点JS工作。我得到 200 OK 响应。第一个没有!

API 是否有可能阻止从浏览器发出的请求? 我尝试了很多方法,但每次使用浏览器都失败了。

感谢您的任何帮助!

没有 CORS 就无法发送额外的标头(Authorization标头)

由于服务器不响应预检请求,因此不允许发送该请求

如果没有 CORS,您只能发送"简单请求",请参阅 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests

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

和 https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request

欲了解更多信息

最新更新