python3 tornado api + angular8 + nginx 跨域问题
问题:
上一个博客部署好了api之后,前端开始吊发现了跨域的问题。
接口地址:
http://111.231.201.164/api/houses 服务器上使用的是nginx转发
数据:

前端angular请求
this.http.get('http://111.231.201.164/api/houses').subscribe((res: any) => {
console.log(res);
});
目前测试用的Google 和 Firefox两个。
Google 浏览器
需要注意的事我的Google浏览器已经配置过跨域,就是说服务器的代码无论可不可以跨域我的浏览器都可以访问api。

此时还没在后台或者nginx配置跨域。
Firefox 浏览器
而Firefox还是一如既往跨域问题


解决过程:
1、我先是配置的tornado,虽然没有鸟用
这是网上大部分的教程,都是如此说的,但是却没有起作用。
class BaseHandler(tornado.web.RequestHandler):
# blog.csdn.net/moshowgame 解决跨域问题
def set_default_headers(self):
self.set_header("Access-Control-Allow-Origin", "*") # 这个地方可以写域名
self.set_header("Access-Control-Allow-Headers", "token")
self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
self.set_header('Access-Control-Allow-Credentials', 'true') def write(self, chunk):
self.set_header('Access-Control-Allow-Origin', '*')
super(BaseHandler, self).write(chunk) class MainHandler(BaseHandler):
@decoratore
def get(self):
self.write("Hello, World")
# 访问: http://localhost:8888/story/sishen232 # 显示:U get story id is sishen232 class HouseHandler(BaseHandler):
'''house class''' def __init__(self, application, request):
'''必填参数'''
super().__init__(application, request)
# 预处理
self.data = ByteData(self.request.arguments)
self.params = ['title', 'position', 'size', 'address'] @decoratore
def post(self):
'''提交House接口'''
# # 判断提交参数是否有误
# if(('title' not in raw_data) or ('position' not in raw_data)):
# self.write(json.dumps(
# {"false": {"msg": '参数错误'}}, ensure_ascii=False))
# return
code = paramsCheck(self.data, self.params)
if code == 1:
raw_data = self.data
if('year' not in raw_data):
raw_data['year'] = ''
print(raw_data)
data = self.application.db.execute(
"insert into house(title, position, size, address, year) values('{}', '{}', {}, '{}', '{}')".format(raw_data['title'], raw_data['position'], float(raw_data['size']), raw_data['address'], raw_data['year']))
# self.write(json.dumps({"sum": s}))
self.write(json.dumps(
{"success": {"msg": '添加成功'}}, ensure_ascii=False))
else:
self.write(json.dumps(
{"false": {"msg": '参数错误'}}, ensure_ascii=False)) def get(self, House_id=''):
'''
# 获取House接口
# House_id 存在则获取该条数据,不存在获取所有数据
'''
sql = 'select * from house' if House_id == '' else 'select * from house where id = {id}'.format(
id=House_id)
data = self.application.db.query(sql)
# self.write(json.dumps({"sum": s}))
self.write(json.dumps(
{"success": {"msg": '获取成功', "data": data}}, ensure_ascii=False))
2、nginx配置
方法1没有起作用的话,那多半就是转发出的问题。
location /api/{
allow 111.231.201.164;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_pass http://127.0.0.1:8888/;
## 跨域
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' "GET, POST, PUT, DELETE, PATCH, OPTIONS";
add_header 'Access-Control-Allow-Headers' "token";
return 200;
}
}
修改之后重启nginx。
Google浏览器
还是一样ok


Firefox 浏览器
也请求到了


到此跨域问题解决。
python3 tornado api + angular8 + nginx 跨域问题的更多相关文章
- Nginx跨域及Https配置
一.跨域 1. 什么是跨域? 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制(指一个域下的文档或脚本试图去请求另一个域下的资源,这 ...
- Nginx跨域了解及模拟和解决
Nginx跨域 同源策略 何为同源: 1.协议(http/https)相同 2.域名(IP)相同 3.端口相同 详解请看我另一篇文章 https://www.cnblogs.com/you-men/p ...
- nginx跨域设置
nginx跨域问题例子:访问http://10.0.0.10/ 需要能实现跨域 操作:http://10.0.0.10/项目是部署在tomcat里面,tomcat跨域暂时还不会,按照网上的方法操作也没 ...
- Api之Cors跨域以及其他跨域方式
Web Api之Cors跨域以及其他跨域方式(三) 我们知道ajax不能跨域访问,但是有时我们确实需要跨域访问获取数据,所以JSONP就此诞生了,其本质使用的是Script标签,除JSONP以外还 ...
- nginx跨域的简单应用
nginx跨域的简单应用 要求:1.浏览器访问print.qianbaihe.wang/zt 直接调转至 www.flybirdprint.com/zt,浏览器显示域名不变. server { lis ...
- Web Api之Cors跨域(干货)---大家一定要看清我写的内容哦
Web Api之Cors跨域 要想跨域需要准备一下几步骤 1.创建WebAPI(请按照图片先后顺序来) 2.进入NuGet包管理搜 Microsoft.AspNet.WebApi.Cors 进行下载 ...
- nginx跨域解决方案
nginx跨域解决方案Access to Font at 'http://47.104.86.187/yinjiatoupiao2/iconfont/iconfont.woff' from origi ...
- nginx 跨域请求访问
1.nginx跨域请求访问 location ~ .*\.(htm|html)$ { add_header Access-Control-Allow-Origin(请求域名) *(所有域名) http ...
- Nginx跨域问题
Nginx跨域无法访问,通常报错: Failed to load http://172.18.6.30:8086/CityServlet: No 'Access-Control-Allow-Origi ...
随机推荐
- 【nodejs原理&源码赏析(1)】Express中间件系统的基本实现
一直觉得express的中间件系统这种流式处理非常形象,就好像加工流水线一样,每个环节都在针对同一个产品的不同部分完成自己的工作,最后得到一个成品.今天就来实现一个简易的[中间件队列]. 一. API ...
- 实例详解——编译器命令#pragma section作用于函数时作用域是否覆盖到其子函数
在之前的博客[链接脚本(Linker Script)应用实例(一)使用copy table将函数载入到RAM中运行]中,我们第一步使用#pragma section命令将PFlashProgram函数 ...
- 洛谷 题解 P4613 【[COCI2017-2018#5] Olivander】
我又双叒叕被包菜辣! P4613 [COCI2017-2018#5] Olivander 首先,不知道为什么这题无法提交翻译: 所以,我先放个翻译: 哈利波特在与伏地魔的战斗中损坏了他的魔杖.他决定在 ...
- 产品vs程序员:你知道www是怎么来的吗?
精彩回顾: 我是一个explorer的线程 我是一个杀毒软件线程 我是一个IE浏览器线程 比特宇宙-TCP/IP的诞生 Unix.Linux.Windows三大帝国集团发表<关于比特宇宙推进经贸 ...
- redis第一讲【redis的描述,linux和docker下的安装使用】
Redis(REmote DIctionary Server):是什么 redis(远程字典服务器),是完全开源免费的,高性能的k/v分布式内存数据,热门的Nosql数据库 Redis可以干什么: 内 ...
- [状态模式]实现stopwatch
1.模拟传统面向对象语言的状态模式实现 // Stopwatch类 状态机class Stopwatch { constructor() { this.button1 = null ...
- VS编译命令
一.前言 由于公司要求项目需要走CI构建平台,抛弃掉之前的人工编译打包方式,所以需要调研一下项目怎么通过命令行编译出产物. 二.准备工作 在构建机器上安装vs(本文示例为vs2017) 将代码上传版本 ...
- 关于 Kafka 的一些面试题目
上周客串了一下面试官,在这里就简单记录一下期间我问到的一些关于 Kafka 的面试题目,这些都是我平时在学习 Kafka 的一些总结要点. 谈谈你对 kafka 的整体认识? 问这个问题主要是想知道面 ...
- Java_输入整数求阶乘
import java.util.Scanner;public class Work4{ public static void main(String[] args){ // 创建Scanner对象 ...
- scrapy的使用-Pipelines
#------------------简单的对item操作方式----------------------------# import json class QsbkPipeline(object): ...