简单的 POST 请求在 Postman 中有效,但在浏览器中无效

Posted

技术标签:

【中文标题】简单的 POST 请求在 Postman 中有效,但在浏览器中无效【英文标题】:Simple POST request works in Postman but not in browser 【发布时间】:2020-07-31 00:16:36 【问题描述】:

我遇到了一个问题,POST 端点在 Postman 中运行时返回响应,但在浏览器中运行时却没有。

我已经通过无服务器在 AWS 上设置了一个 API 端点。这是 .yml 的配置:

service: tableau-export-rest

provider:
  name: aws
  runtime: nodejs10.x
  region: eu-west-1
  stage: $opt:stage, 'dev'
  timeout: 900
  memorySize: 3008

functions:
  storeExportFiters:
    handler: index.storeExportFiters  
    events:
      - http: 
          path: /store-export-filters
          method: post
          cors: true 

端点解析器storeExportFiters(它是一个 lambda)现在只返回一条成功消息:

module.exports = (event, ctx, cb) => 
  return cb(null, 
    statusCode: 200,
    body: JSON.stringify(
      worked: true
    )
  );

当我将它部署到 AWS 并尝试通过 POST 请求从 Postman 访问端点时,没有正文或任何内容,它会向我发送响应。当我尝试在浏览器中执行此操作时,我收到 cors 错误:

访问 XMLHttpRequest 在 'https://myapi.com/store-export-filters' 来自原点 'http://localhost:9003' 已被 CORS 阻止 政策:没有“Access-Control-Allow-Origin”标头出现在 请求的资源。

这是用于尝试从端点获取响应的浏览器代码。我使用Axios 进行http 请求:

  axios.post('https://myapi.com/store-export-filters')
    .then(function (response) 
      console.log(response);
    )
    .catch(function (error) 
      console.log(error);
    );

我不明白为什么我会在这里收到 CORS 错误,尤其是当它在我的机器上的 Postman 中工作时。

【问题讨论】:

【参考方案1】:

您的 API 未针对跨源请求进行配置。您需要配置您的服务器以允许这些请求。

Access-Control-Allow-Origin: *

这将允许您的 API 接收来自任何来源的请求,however can be a major security issue.

将您的 API 配置为仅接受来自特定来源的请求可解决此问题。

Access-Control-Allow-Origin: hostname:port

【讨论】:

那为什么它可以在 Postman 中工作呢?此外,我在无服务器中启用了 cors,所以不会这样做吗?我使用 lambda 作为解析器,所以没有服务器 但是拒绝来自 API,而不是客户端 - 不是吗? 没有。浏览器正在阻止请求,因为出于安全原因,它只允许来自同一来源的请求。 好的,Postman 解决了这个问题,因为它没有来源? @Nostromo 它“绕过它”,因为邮递员不是网络浏览器,也不关心 CORS。这是一个很好的 *** 帖子***.com/a/36486188/7800355

以上是关于简单的 POST 请求在 Postman 中有效,但在浏览器中无效的主要内容,如果未能解决你的问题,请参考以下文章

HTTP POST 请求在 Postman 中有效,但在代码中无效

Http POST 在 Postman 中有效,但在 Flutter 中无效

MAXIMO API 7.6.1 POST 以编程方式创建服务请求创建空记录,但在 POSTMAN 中同样有效

postman post请求 header 和body怎么用

postman使用动态token发post请求小结

postman---post请求数据类型