Python Flask发布请求不适用于https

时间:2018-07-23 20:59:07

标签: python api flask cors

你好

我在Dreamhost上有一个简单的Flask设置,它使用有一条POST路线的Passenger和一个向其发送发布请求的前端应用程序。

  • api所在的后端是api.example.ca
  • 前端只是example.ca

应该发生的事情是前端向api上的端点发送请求,api发送电子邮件(或不发送电子邮件)并返回响应。

在http上一切正常,但在https上一切正常

两个站点(API和网站)都具有“让我们加密”证书。 如果我在api.example.com上设置了GET路由,则可以在https上正常运行。张贴路由将无法在https上运行。不是来自我的前端,不是来自邮递员。

我不想回退到http:/

**前端:** 从“ axios”导入axios;

// Axios instance, different file
const instance = axios.create({
  baseURL: 'http://api.example.ca'
});

export default instance;

// import axios from '../axios-instance.js'
axios.post('/devmailer', payload)
.then(res => {
  const resetState = cloneDeep(initialState);
  this.setState({...resetState, sent: true});
})
.catch(err => {
  this.setState({sent: false, isloading: false});
});

烧瓶后端:

from flask import Flask, redirect, request, jsonify
from flask_cors import CORS
from .Mailer import Mailer
from .config import DevConfig, ProdConfig

CONFIGS = {'dev': DevConfig, 'prod': ProdConfig}

def create_app(env):
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_object(CONFIGS[env])

    CORS(app)

    @app.route('/devmailer', methods=['POST'])
    def send_contact_mail():
        mail = Mailer(app)
        mail.prepare_envelope(request.json)
        result = mail.send_mail()
        if result['success']:
            return jsonify(result['message'])
        return jsonify(result['message']), 500

    return app

邮递员响应:(我们最终改为发送某种GET请求??)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>

浏览器响应:(301重定向)我什至没有...

Failed to load https://api.example.ca/devmailer: Response for preflight is invalid (redirect)

我尝试过的东西

对flask_cors更具体

CORS(app, resources={r'/*': {'origins': '*'}}, headers='Content-Type')

在'/ devmailer'上允许'GET'路由

  • 这会导致我的应用程序崩溃,因为它通过send_contact_mail()进行操作而没有来自主体的任何request.json。我们收到500错误的回复

我确定我在这里遗漏了一些基本知识。我敢肯定,这也是愚蠢的。每当我使用同一应用程序提供Flask和前端时,就不会遇到这个问题,因为不涉及CORS,所以我确定这与它有关,我只是不知道< em>什么我不见了。

先谢谢了。

0 个答案:

没有答案