我正试图从我的网站发送POST请求到我的远程服务器,但我遇到一些CORS问题。
我在网上搜索,但没有找到解决我的具体问题的方法。这是我的ajax请求参数:
var params = {
url: url,
method: 'POST',
data: JSON.stringify(data),
contentType: 'json',
headers: {
'Access-Control-Request-Origin': '*',
'Access-Control-Request-Methods': 'POST'
}
后端是我的python代码:
@app.route(SETTINGS_NAMESPACE + '/<string:product_name>', methods=['POST', 'OPTIONS'])
@graphs.time_method()
def get_settings(product_name):
settings_data = helper.param_validate_and_extract(request, None, required=True, type=dict, post_data=True)
settings_data = json.dumps(settings_data)
response = self._get_settings(product_name, settings_data)
return output_json(response, requests.codes.ok, headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST'
})
我在控制台得到一个错误:
XMLHttpRequest无法加载[http://path-to-my-server]。请求报头字段Access-Control-Request-Methods不被允许pre - flight响应中的Access-Control-Allow-Headers
我确实注意到我也可以添加'Access-Control-Request-Headers'
,但我不确定它是否必要,它会给我带来更多的问题,所以我删除了它。
您的ajax请求不应该发送Access-Control
标头,只有服务器发送这些标头,以允许服务器描述允许使用web浏览器读取该信息的源集。
同源策略通常不适用于外部浏览器,因此如果浏览器能够获得数据,服务器必须发送CORS标头或JSONP数据。
浏览器不发送这些头给服务器,它不需要,是服务器决定数据是否对特定来源可用。
从params
对象中移除header
选项,它应该可以工作