我在Dreamhost上有一个简单的Flask设置,它使用有一条POST路线的Passenger和一个向其发送发布请求的前端应用程序。
应该发生的事情是前端向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'路由
我确定我在这里遗漏了一些基本知识。我敢肯定,这也是愚蠢的。每当我使用同一应用程序提供Flask和前端时,就不会遇到这个问题,因为不涉及CORS,所以我确定这与它有关,我只是不知道< em>什么我不见了。
先谢谢了。