2016-11-10 124 views
0

我試圖從我的網站向我的遠程服務器發送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

謝謝,它工作。發佈它作爲答案,我會批准 –

回答

1

您的ajax請求不應發送Access-Control標頭,只有服務器發送這些標頭以允許服務器描述允許使用Web瀏覽器讀取該信息的一組原點。

同源策略通常不適用於外部瀏覽器,所以如果瀏覽器能夠獲取數據,服務器必須發送CORS頭或JSONP數據。

瀏覽器不會將這些標頭髮送到服務器,它不需要,它是決定數據是否可用於特定來源的服務器。

取下params對象header選項,它應該工作

相關問題