请求标头字段Access-Control-Allow-Headers在预检响应中不允许访问控制请求方法

问题描述:

我试图从我的网站向我的远程服务器发送POST请求,但是我遇到了一些CORS问题。请求标头字段Access-Control-Allow-Headers在预检响应中不允许访问控制请求方法

我在网上搜索,但没有找到解决我的具体问题。 这是我的AJAX请求参数:

var params = { 
    url: url, 
    method: 'POST', 
    data: JSON.stringify(data), 
    contentType: 'json', 
    headers: { 
     'Access-Control-Request-Origin': '*', 
     'Access-Control-Request-Methods': 'POST' 
    } 

在这个后端侧是我在Python代码:

的XMLHttpRequest不能:

@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' 
    }) 

我我的控制台上得到一个错误加载[http://path-to-my-server]。请求头场 访问控制请求的方法不被 接入控制允许的报头预检响应允许

我也注意到,我还可以添加'Access-Control-Request-Headers'但我不知道这是否必要它会给我带来更多问题,所以我将其删除。

有谁知道如何解决这个问题?

+2

你的Ajax请求不应发送'接入Control'头,只有服务器发送的报头。 – adeneo

+0

谢谢,它工作。发布它作为答案,我会批准 –

您的ajax请求不应发送Access-Control标头,只有服务器发送这些标头以允许服务器描述允许使用Web浏览器读取该信息的一组原点。

同源策略通常不适用于外部浏览器,所以如果浏览器能够获取数据,服务器必须发送CORS头或JSONP数据。

浏览器不会将这些标头发送到服务器,它不需要,它是决定数据是否可用于特定来源的服务器。

取下params对象header选项,它应该工作