请求标头字段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'
但我不知道这是否必要它会给我带来更多问题,所以我将其删除。
有谁知道如何解决这个问题?
答
您的ajax请求不应发送Access-Control
标头,只有服务器发送这些标头以允许服务器描述允许使用Web浏览器读取该信息的一组原点。
同源策略通常不适用于外部浏览器,所以如果浏览器能够获取数据,服务器必须发送CORS头或JSONP数据。
浏览器不会将这些标头发送到服务器,它不需要,它是决定数据是否可用于特定来源的服务器。
取下params
对象header
选项,它应该工作
你的Ajax请求不应发送'接入Control'头,只有服务器发送的报头。 – adeneo
谢谢,它工作。发布它作为答案,我会批准 –