首页 > 解决方案 > CORS 不工作(失败)net::ERR_FAILED)

问题描述

请帮我。这不起作用。调用此方法后,短信发送正确但显示错误(失败)net::ERR_FAILED)

function sendSms(passWord, userName, smsRate, mType, MsgType) {
    var getMessage = $('.composeSMS').val(),
        number = '88'+$('[name="tags-input"]').val();
            var convateMessage = setConvertedMessage(getMessage);
        $.ajax({
            type: 'get',
            url: 'https://api.example.com:8443/sms/sms?',
            headers: {  
                    'Content-Type': 'application/json',
                    'Accept': 'application/json',
                    'Access-Control-Allow-Credentials': true,
                    'Access-Control-Allow-Headers': '*',
                    'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, HEAD, OPTIONS, PATCH',
                    'Access-Control-Allow-Origin': '*',
                    'Access-Control-Expose-Headers': '*',
                    'Allow': 'GET, HEAD, POST, TRACE, OPTIONS',
            },
            data: { source: mType, username: userName, password: passWord, type: 2, destination: number, message: convateMessage,format: "json"
            },
            success: function( data ) {
                conosle.log(data);               

            },
        });
}

错误截图

标签: javascriptjquerycors

解决方案


CORS 不受消费者(客户端浏览器)控制,而是由提供者(您要连接的跨源服务器)控制。出于安全原因引入了 CORS,如果添加一些标头完全禁用服务器的能力,那就没有意义了规避此安全措施。

首先要删除的是Access-Control-*您请求中的标头。这些是响应头,将它们添加到请求中可能会导致正常运行的跨源请求失败 - 不用担心,这是一个新手错误,您至少每天都会在堆栈溢出时看到这一点!

添加大多数标头将触发 OPTIONS 飞行前检查 - 如果服务器不期望这样的请求,它将失败

如果在您提出请求后是正确的并且其中没有额外的(意外的)标头,请求仍然失败,请检查响应标头 - 如果响应标头中没有Access-Control-Allow-Origin,那么您正在访问的服务器没有允许浏览器发出这样的请求

然后解决方案是使用服务器端代码从您自己的服务器发出请求

由于您没有提及有关您的服务器的任何内容,因此让我尝试使用一些伪代码来帮助您

在服务器上你会有类似的东西

handle '/sms'
    incoming parameters: source, username, password, type, destination, message, format
    response = get(url { source, username, password, type, destination, message, format})
    return response to client

推荐阅读