2013-12-09 41 views
14

我剛剛瞭解到Access-Control-Allow-Methods標題,例如,Access-Control-Allow-Methods的默認值

Access-Control-Allow-Methods: OPTIONS, HEAD, GET 

我從來沒有使用過這個頭(只Access-Control-Allow-Origin),但我已經得到了CORS在過去的工作。

是默認允許所有方法,還是我得到了未定義行爲的幸運?

+0

這似乎是一個非常好的事情,讓_browser_停止不必要的請求,以免打擾您的Web服務器。 –

回答

17

只是爲了澄清,Access-Control-Request-Method是由瀏覽器在CORS預檢請求中設置的請求標頭,它只能有一個值。 Access-Control-Allow-Methods標題是一個CORS響應標題,它可以有多個值。我假設你問的是Access-Control-Allow-Methods,因爲這是服務器指定的值。

Access-Control-Allow-Methods標頭指示在特定端點上允許哪些HTTP方法用於跨源請求。如果你允許所有的HTTP方法,那麼它可以將值設置爲Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD。但是,如果您想將端點限制爲僅有幾種方法,則應該只包含這些方法。

至於爲什麼你以前沒有看到這個,這個頭只用於CORS預檢請求。這可能是因爲您的應用程序沒有使用CORS預檢,然後更改了一些內容以觸發預檢。您的應用程序是否使用除GET/POST之外的任何HTTP方法或任何自定義HTTP標頭?

您可以瞭解更多關於此CORS預檢要求:http://www.html5rocks.com/en/tutorials/cors/

+0

感謝您的更正。並且爲了澄清,CORS仍然*工作。我想知道我是否需要它,在某些情況下我沒有測試。 –

+0

回答了我的問題:「此標題僅用於CORS預檢請求」。 –

+0

我們可以看到這些標題的值?在我的情況下,我需要在標題中發送一個標記,但我可以看到只有名稱沒有值 – Taran

1

Access-Control-Allow-Methods默認爲允許通過所有簡單方法,甚至在預檢要求。作爲上https://www.w3.org/TR/cors/#preflight-request流動說(成功預檢請求的步驟7):

如果請求方法沒有在方法任何方法區分大小寫匹配,而不是一個簡單的方法,應用該緩存和網絡錯誤步驟。

,簡便的方法的定義是:

的方法被認爲是一種簡單的方法,如果它是爲下列中的一個的情況下,敏感的匹配:GET HEAD POST

因此,如果您有預檢POST請求(由於自定義HTTP標頭,說),並且不發送一個Access-Control-Allow-Methods響應標頭,請求仍然可以繼續。