python 跨域请求html,python flask 跨域请求 The value of the 'Access-Control-Allow-Origin' header in the respo...

如果写的跟其他人一样,没一点干货,我肯定懒得写。毕竟我不是为了骗赞。

今天用flask写了一个http的server,js在调用的时候, 报了一个错,说是要添加跨域请求。于是我从网上抄了一段解决跨域的代码。@app.route('/rec',method=['POST'])

def getdata():

retdict = {}

retdict['data'] = 'return data'

response = make_response(json.dumps(retdict))

response.headers['Access-Control-Allow-Credentials'] = 'true'

response.headers['Access-Control-Allow-Origin'] = '*'

response.headers['Access-Control-Allow-Methods'] = 'POST'

response.headers['Access-Control-Allow-Headers'] = 'Content-Type, X-Requested-With'

return response

然后js报了一个错:

Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.

百度谷歌了一阵子, 说是'Access-Control-Allow-Origin' 不能使用通配符, 需要指定。 我查看了其他成功的请求, 发现成功的response里边的这个字段的值是 'http://68.174.75.238:8081' , 需要填请求方的地址和IP。 然后我百度了一下,没有发现有怎么获取flask的请求IP地址和端口的。 只查到获取请求地址的。 这让人很尴尬。

后面仔细研究了一下 request的内容, 发现 request.environ 里边包含了请求方的很多消息。  里边就包含了请求方的 origin,于是只要将其拷贝到这个response里边就可以了。 代码如下@app.route('/rec',method=['POST'])

def getdata():

retdict = {}

retdict['data'] = 'return data'

response = make_response(json.dumps(retdict))

response.headers['Access-Control-Allow-Credentials'] = 'true'

response.headers['Access-Control-Allow-Origin'] = request.environ['HTTP_ORIGIN']

response.headers['Access-Control-Allow-Methods'] = 'POST'

response.headers['Access-Control-Allow-Headers'] = 'Content-Type, X-Requested-With'

return response

这个environ里边还有其他内容,大家可以打印出来看看,可能有很多需要的地方。在方法的最前面加上一行打印语句即可print request.environ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值