使用 Bottle 服务器处理 Angular HTTP 请求 不允许 CORS
Handling an Angular HTTP Request with a Bottle Server CORS not allowed
我正在尝试将数据从我的 Angular 9 应用程序提交到 Bottle 后端服务器。在客户端,我收到 CORS 错误,缺少 'Access-Control-Allow-Origin' header。它还说 same-origin 规则阻止了请求。在后端,它只打印状态代码 405。但是,当我通过 Postman 执行请求时,一切正常。我必须做哪些更改才能使其正常工作?我希望它也能在生产模式下工作。
这是我的代码:
Angular component.ts:
onSubmit(form) {
console.log(form.value);
this.http.post('http://localhost:8080/contact', form.value).subscribe();
}
我的瓶子后端服务器:
@post('/contact')
def progress_contact():
response.set_header('Content-Type', 'application/json')
response.set_header('Access-Control-Allow-Origin', 'http://localhost:4200')
response.set_header('Access-Control-Allow-Methods', 'PUT, GET, POST, OPTIONS, DELETE')
response.set_header('Access-Control-Allow-Headers', 'Access-Control-Allow-Origin, Content-Type, Accept, Accept-Language, Origin, User-Agent')
print(request)
print(request.POST.moin)
print(request.POST.email)
return 'hello'
正如我提到的,当通过 Postman 执行 POST-Request 时,我在响应 object 中得到 'hello' 并且服务器打印我发送的值。
您需要在后端代码中允许 cors。
由于 angular 中的预检请求和您的后端代码不允许 cors,您遇到了问题。
有多个选项可以允许 cors,这里也可以使用 pypi 上的包。
https://pypi.org/project/bottle-cors/
这段代码帮我解决了:
@route('/contact', method=['POST', 'OPTIONS'])
def progress_contact():
if request.method == 'OPTIONS':
response.set_header('Access-Control-Allow-Origin', '*')
response.set_header('Access-Control-Allow-Methods', 'PUT, GET, POST, OPTIONS, DELETE')
response.set_header('Access-Control-Allow-Headers', 'Access-Control-Allow-Origin, Content-Type, Accept, Accept-Language, Origin, User-Agent')
else:
print(request.json['email'])
return 'hello'
我正在尝试将数据从我的 Angular 9 应用程序提交到 Bottle 后端服务器。在客户端,我收到 CORS 错误,缺少 'Access-Control-Allow-Origin' header。它还说 same-origin 规则阻止了请求。在后端,它只打印状态代码 405。但是,当我通过 Postman 执行请求时,一切正常。我必须做哪些更改才能使其正常工作?我希望它也能在生产模式下工作。 这是我的代码: Angular component.ts:
onSubmit(form) {
console.log(form.value);
this.http.post('http://localhost:8080/contact', form.value).subscribe();
}
我的瓶子后端服务器:
@post('/contact')
def progress_contact():
response.set_header('Content-Type', 'application/json')
response.set_header('Access-Control-Allow-Origin', 'http://localhost:4200')
response.set_header('Access-Control-Allow-Methods', 'PUT, GET, POST, OPTIONS, DELETE')
response.set_header('Access-Control-Allow-Headers', 'Access-Control-Allow-Origin, Content-Type, Accept, Accept-Language, Origin, User-Agent')
print(request)
print(request.POST.moin)
print(request.POST.email)
return 'hello'
正如我提到的,当通过 Postman 执行 POST-Request 时,我在响应 object 中得到 'hello' 并且服务器打印我发送的值。
您需要在后端代码中允许 cors。 由于 angular 中的预检请求和您的后端代码不允许 cors,您遇到了问题。 有多个选项可以允许 cors,这里也可以使用 pypi 上的包。 https://pypi.org/project/bottle-cors/
这段代码帮我解决了:
@route('/contact', method=['POST', 'OPTIONS'])
def progress_contact():
if request.method == 'OPTIONS':
response.set_header('Access-Control-Allow-Origin', '*')
response.set_header('Access-Control-Allow-Methods', 'PUT, GET, POST, OPTIONS, DELETE')
response.set_header('Access-Control-Allow-Headers', 'Access-Control-Allow-Origin, Content-Type, Accept, Accept-Language, Origin, User-Agent')
else:
print(request.json['email'])
return 'hello'