在向外部服务器发送 ajax 调用时,Access-Control-Allow-Headers 在预检响应中不允许请求标头字段授权 [重复]

Posted

技术标签:

【中文标题】在向外部服务器发送 ajax 调用时,Access-Control-Allow-Headers 在预检响应中不允许请求标头字段授权 [重复]【英文标题】:Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response while sending a ajax call to a outside server [duplicate] 【发布时间】:2018-11-03 14:05:43 【问题描述】:

我正在尝试发出 ajax 请求以从 IBM Watson 获取聊天响应。

<html>
<head>
<title>ChatBox</title>
</head>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
var dataText;
function testfunction()
	var username = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
	var password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

	$.ajax(
	    url: "https://gateway.watsonplatform.net/assistant/api/v1/workspaces/b8120041-5XXXXXXXXXXXXXXXXXXXXXXXXXXb250/message?version=2018-02-16",
	    beforeSend: function(xhr) 
	    	xhr.setRequestHeader("Authorization", "Basic" + btoa(username + ":" + password)); 
	    ,
	    type: 'POST',
	    dataType: "json",
	    contentType: 'application/json',
	    processData: false,
	    data: "\"input\": \"text\": \"Hello\"",
	    success: function (data) 
	    	dataText = data['output']['text'];
	    	console.log(dataText);
	    ,
	    error: function()
	      alert("Cannot get data");
	    
	);

</script>
<button type ="radio" onclick = "testfunction();"> Generate json</button>
<br/>
<br/>
<button type="button" onclick="document.getElementById('pid').innerHTML = dataText">Get Json</button>                                       
<p id="pid">Hello i am inside p</p>
</body>
</html>

我收到以下错误-

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权。

但是,如果我使用了 CORS chrome 扩展程序,那么我会得到正确的响应。

我见过很多类似问题的解决方案,他们要求在服务器端添加一些标题。但在这里我无法控制 Watson 服务器。

请向我建议任何解决方案,以便在不使用扩展程序的情况下获得对 ajax 请求的正确响应。

总而言之,我想要解决方案

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权。

【问题讨论】:

这是您的真实用户名和密码吗...? 我已经删除了真实凭据 【参考方案1】:

创建一个页面/控件,它将向目标站点发送请求并将响应输出为您需要的页面。这样你会看到显示的页面,但是你需要修复scriptlinkimga标签的路径。

【讨论】:

你能详细说明吗? @ANKITKUMAR 你使用服务器端语言吗? 我已经在问题中发布了整个代码。它只是 HTML 和 jquery。 @ANKITKUMAR 我重复我的问题:您使用服务器端语言吗?我看过你的代码,但我的问题不同。 不,我没有使用任何服务器端语言。

以上是关于在向外部服务器发送 ajax 调用时,Access-Control-Allow-Headers 在预检响应中不允许请求标头字段授权 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

AJAX-DOM事件

Django CSRFToken 中间件附加到 URL 并在向服务器发出“PUT”请求后显示。 (AJAX 问题)

access的一些问题,等待高手解决

socket io发出失败的回调

如何在向服务器发送请求时添加设备信息?

在向服务器发送请求时发生传输级错误。