【问题标题】:REST API Post request on single HTML page [duplicate]单个 HTML 页面上的 REST API 发布请求 [重复]
【发布时间】:2020-11-05 16:45:35
【问题描述】:

我正在尝试使用端点 URL 提交发布请求。我将内容类型作为应用程序/json 以及用户名和密码的两个标头值发送。当我尝试通过 Postman 访问它时,我得到 200 响应代码以及 tokenId 和 successUrl 但是当通过下面的 JavaScript 代码完成同样的操作时,我得到 401。当我尝试通过 JSP 和爪哇。我不是 Javascript 专家,无法找出原因。我阅读了 CORS 文章,但不确定为什么跨域不是 Java/JSP 代码的问题,而是发生在 JavaScript 中。 下面是代码:

<!DOCTYPE html>
<html>
<body>

<h2>REST</h2>

<button type="button" onclick="myFunc()">Request data</button>

<p id="demo"></p>
 
<script>
function myFunc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("demo").innerHTML = this.responseText;
    }
  };
  xhttp.open("POST", "Endpoint URL entered here", true);
  xhttp.setRequestHeader("Content-type", "application/json");
  xhttp.setRequestHeader("X-OpenAM-Username", "username entered here");
  xhttp.setRequestHeader("X-OpenAM-Password", "password entered here");
  xhttp.send();
}
</script>

</body>
</html> 

Chrome浏览器报错如下:

CORS 策略已阻止从源“null”访问“端点 URL”处的 XMLHttpRequest:对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头出现在请求的资源上。

a.html:23 POST '端点 URL' net::ERR_FAILED

编辑1: 火狐浏览器出现的错误如下:

XHROPTIONS '端点 URL' [HTTP/1.1 401 未授权 2025ms]

跨域请求被阻止:同源策略不允许读取“端点 URL”处的远程资源。 (原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。

跨域请求被阻止:同源策略不允许读取“端点 URL”处的远程资源。 (原因:CORS 请求未成功)。

请让我知道我到底做错了什么。

【问题讨论】:

    标签: javascript html rest xmlhttprequest


    【解决方案1】:
    Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
    

    作为 CORS 的一部分,您的浏览器会将所谓的“预检请求”发送到服务器,以查看它是否会接受您的请求。它正在检查一些事情——在这种情况下,服务器没有回复带有“Acess-Control-Allow-Origin”标头的预检,因此您的浏览器知道您尝试发送的请求将失败并阻止它从被发送。

    这不会发生在浏览器环境之外——Postman 并不关心服务器是否会以适当的标头响应。

    如果您有权访问服务器,则需要配置允许来自特定来源(网站)的请求的 CORS 策略。如果您能提供更多关于您的设置的信息,我们很乐意为您提供帮助。

    【讨论】:

    • 所以,我要访问的端点是 ForgeRock SSO URL,用于对用户进行身份验证。用户名和密码通过标头传递。我试图直接从我的系统运行它,因为它是一个简单的 HTML 页面。此外,尝试从 localhost 运行它,但在这两种情况下都出现相同的错误。我不确定为什么尝试通过 JavaScript 方法运行它时会出现此错误,因为 Java 和 JSP 代码工作正常,没有任何 CORS 或其他错误。
    • Firefox 错误也给出了 401,这让我觉得我正在使用的代码有问题。
    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 2021-04-14
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2011-10-25
    相关资源
    最近更新 更多