请求标头字段Access-Control-Request-Methods在预检响应中不允许使用Access-Control-Request-Methods

时间:2016-11-10 15:48:46

标签: javascript jquery python ajax cross-domain

我正在尝试从我的网站向我的远程服务器发送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-Allow-Headers

我注意到我也可以添加'Access-Control-Request-Headers',但我不确定是否有必要,这会导致我出现更多问题,所以我将其删除了。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

header对象中删除params选项,它应该可以正常工作