【问题标题】:CORS Error in JQuery Ajax SSL POST OPTIONS requestJQuery Ajax SSL POST OPTIONS请求中的CORS错误
【发布时间】:2022-01-21 01:42:12
【问题描述】:

我对预检请求有疑问。 我以这种格式通过 jQuery Ajax 从 JavaScript 调用由 Flask python 提供的 SSL(通过临时自签名证书)API:

WS_URL='https://192.168.2.15:444';
idata=JSON.stringify({ atext: rawtext }) 
$.ajax({
    type: 'post',
    url: WS_URL+'/method1',
    data: idata,
    dataType: "json",
    async:true,
    headers: {  
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Credentials':'*',
                'Access-Control-Allow-Headers':'*',
                'Access-Control-Allow-Methods':'*'
             },
    xhrFields: {
         withCredentials: true
    },
    contentType: "application/json; charset=utf-8",
    crossDoman: true,
    success: function(rsp,request){
        if (rsp.error[0].error_code==0){
            fill_answer_list(rsp.answers);
        }
        else {
            alert("Error: "+rsp.error.error_code)
        }
    },
    error: function(xhr){ //),status,error) {
        console.log(xhr.responseText);            
    }
});

在我的 Flask python API 中我也有:

from flask import Flask, abort, request, make_response, jsonify,Response
from flask_cors import CORS,cross_origin

app = Flask(__name__)
cors=CORS(app,support_credentials=True)
app.config['CORS_HEADERS'] = 'application/json'
app.config['JSON_AS_ASCII'] = False

app.run(ssl_context='adhoc',debug=True)

最后,我通过 Flask 在命令提示符模式下使用以下命令运行此服务:

set FLASK_ENV=development
set FLASK_APP=tapi.py
flask run --host 192.168.2.15 --port 444 --cert=adhoc

使用此配置,我收到以下错误:

跨域请求被阻止:同源策略不允许读取 https://192.168.2.15:444/method1 的远程资源。 (原因:CORS 请求未成功)。状态码:(空)。

根据这个错误,我无法从我的 API 获取任何数据。 如果可能,请帮助我,我应该怎么做才能解决这个问题?

【问题讨论】:

    标签: python jquery flask ssl cors


    【解决方案1】:

    这里有很多问题,建议你使用最低配置让程序运行起来,然后逐步添加组件。 首先解决不能跨域的问题。 JavaScript 像这样删除 seesion、async 和 json: (顺便说一句,跨域处理cookie非常困难,建议你使用token来授权。)

    WS_URL='http://<backend host>:<port>'
    idata=JSON.stringify({ atext: rawtext }) 
    $.ajax({
        type: 'post',
        url: WS_URL+'/method1',
        data: idata,
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function(rsp,request){
            if (rsp.error[0].error_code==0){
                fill_answer_list(rsp.answers);
            }
            else {
                alert("Error: "+rsp.error.error_code)
            }
        },
        error: function(xhr){ //),status,error) {
            console.log(xhr.responseText);            
        }
    });
    

    烧瓶:

    ... # import package
    ...
    app = Flask(__name__)
    cors=CORS(app,support_credentials=True)
    
    app.run(debug=True)
    

    app.runflask run 两者都只能使用。

    【讨论】:

    • 感谢亲爱的朋友的回复,正如我所提到的,SSL 对我来说是必要的,因为我从 https php 应用程序调用后端(Flask-python)。但我认为,问题出在我的自签名证书上,如果可能的话,我想就这个问题寻求帮助。
    • 您能否确定是 SSL 导致了问题?如果不是,我认为您需要删除 SSL 以确保您的应用程序首先正常工作。此代码中有太多地方导致此错误。调试需要时间。
    • 是的,我在没有 SSL 的情况下运行它,但是当我尝试从浏览器运行它时,出现了问题。
    猜你喜欢
    • 2015-03-01
    • 2015-09-01
    • 2012-12-31
    • 2014-05-26
    • 2020-04-09
    • 2018-02-11
    • 2015-12-15
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多