AJAX错误:“对预检请求的响应未通过访问控制检查”

时间:2018-08-05 22:03:33

标签: javascript jquery ajax

我对SendGrid电子邮件API发出POST请求时遇到问题。

提交表单以进行POST请求时,在控制台中出现以下错误:

Failed to load https://api.sendgrid.com/v3/mail/send: Response to preflight 
request doesn't pass access control check: The 'Access-Control-Allow-Origin' 
header has a value 'https://sendgrid.api-docs.io' that is not equal to the 
supplied origin. Origin 'https://example.com/' is therefore not 
allowed access.

这是我的要求:

    $.ajax({
    method: "POST",
    url: 'https://api.sendgrid.com/v3/mail/send',
    headers: {
        'Authorization':'bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
        'Content-Type':'application/json'
    },
    data: {
      "personalizations": [
        {
          "to": [
            {
              "email": "example@email.com"
            }
          ],
          "subject": 'Contact form submission - example.com'
        }
      ],
      "from": {
        "email": sender
      },
      "content": [
        {
          "type": "text/plain",
          "value": content
        }
      ]
    }
  });

当我将以下行添加到数据中时:

dataType: 'jsonp',

错误消息更改为以下内容:

GET https://api.sendgrid.com/alongurl 405 (Method Not Allowed)

我不确定将控制台设置为POST时,为什么控制台发出get请求。我不确定为什么会这样。希望有人能指出我正确的方向。谢谢。

1 个答案:

答案 0 :(得分:1)

由于CORS,您不能通过浏览器向发送网格API发送请求。可能有很多原因,但是SendGrid doc explains exactly why并建议您创建一个Web服务器来代替发送请求

上述链接的一个原因

  

当您有一个仅浏览器的应用程序可以访问API时,必须将API密钥嵌入该应用程序中。有权访问仅浏览器的应用程序的任何人都可以访问所有Javascript源代码,包括您的API密钥。

以及从链接中执行此操作的建议方法

  

您可以创建基于服务器的应用程序,以保护您的API密钥不被发布。可以实现NodeJS,PHP,Ruby,Python,C#,Go和Java等语言,以从锁定的服务器环境的安全性对API进行调用。