向Tomcat发送POST请求时如何解决浏览器中的Javascript fetch API错误?

Posted

技术标签:

【中文标题】向Tomcat发送POST请求时如何解决浏览器中的Javascript fetch API错误?【英文标题】:How to resolve Javascript fetch API error in browser when sending POST request to Tomcat? 【发布时间】:2021-10-02 23:30:13 【问题描述】:

我在 Spring Boot 中有一个 RESTful API,并实现了一些端点。 Tomcat 在 8080 端口上运行良好,Postman 请求得到响应,但尝试从浏览器获取时出错。

脚本:

  let candy = 
    id: id, //previously declared id variable being passed
    flavor: 0
  ;
  fetch('localhost:8080/api/candy', 
    method: "POST",
    headers: 
      'Content-Type': 'application/json;charset=utf-8'
    ,
    body: JSON.stringify(candy)
  )
  .then(response => response.json())
  .then((response) => 
    console.log(response.message);
  );

Postman 中的 POST 请求到:

localhost:8080/api/candy

与身体:


    "id": 243,
    "flavor": 2

返回:


    "id": 243,
    "flavor": 2

这是我所期望的。

当我访问localhost:8080 时,Tomcat 的欢迎页面打开得很好,但我不知道为什么它不能发送 POST 请求。 Chrome 和 Opera 中的错误是:

GET http://localhost:8080/favicon.ico 404 //this one only under Chrome
Fetch API cannot load localhost:8080/api/candy. URL scheme "localhost" is not supported.
Uncaught (in promise) TypeError: Failed to fetch
    at htmlButtonElement.<anonymous>

有什么想法吗?

编辑:在 Opera 下我得到 Fetch API cannot load localhost:8080/api/candy. URL scheme must be "http" or "https" for CORS request. 错误,但可能是同一回事。

【问题讨论】:

错误信息不言自明:您需要使用完整的 URL http://localhost:8080/api/candy,而不是它的一部分 localhost:8080/api/candy。尽管现在的浏览器倾向于隐藏 URL 的方案部分,但它仍然是必需的。 是的@PiotrP.Karwasz,谢谢,我添加了 http 协议,它确实解决了问题,但我不明白为什么 Postman 不需要它。 Postman 会自动追加吗? 是的,它必须对您输入的字符串应用一些启发式方法,浏览器也是如此。 谢谢您,您介意将其作为答案以便我接受吗? @PiotrP.Karwasz 【参考方案1】:

fetch()的第一个参数应该是请求资源的URL。您只使用localhost:8080/api/candy,缺少该方案。

用途:

http://localhost:8080/api/candy

改为。

现在大多数工具(浏览器、邮递员)不显示当前页面的方案,但它仍然是必需的。

【讨论】:

以上是关于向Tomcat发送POST请求时如何解决浏览器中的Javascript fetch API错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 AFHTTPSessionManager 发送 POST 请求时向参数发送空白数据

如何防止用户向 php 文件发送如此多的 post 请求

JavaWebHttp get请求乱码post请求乱码,html页面乱码jsp页面乱码,控制台tomcat日志乱码原因分析和解决方案参考:

通过Angular App和NodeJS向快递服务器发送GET / POST请求时如何修复404 Not Found

如何把tomcat的日志实时输出到web页面上

如何使用 Ktor 服务器向其他服务器发送 POST 请求?