我看到有CORS奇怪的事情,我試圖確認它是否是一個錯誤或什麼...CORS預檢沒有發生持續
基本上,我有一個網站,www.example.com這使得多個POST請求到log.example.com做日誌記錄。由於log.example.com是一個不同的域,CORS是有效的。
在大多數情況下,我會看到預檢OPTIONS請求,然後是POST請求。然而,在某些情況下,我只看到POST,沒有前面的選項 - 基本上是這樣的:
OPTIONS
POST
...intervening requests to www...
OPTIONS
POST
POST
...intervening requests to www...
POST
...intervening requests to www...
OPTIONS
POST
的OPTIONS請求沒有返回的訪問控制,最大年齡頭(他們也許應該,但這是另一回事),所以OPTIONS響應不應該被瀏覽器緩存。所有的OPTIONS請求返回一個200,所有的POSTS返回一個202.有時會有干預請求,有時候不會。所有OPTIONS請求都傳遞完全相同的標題,並且響應返回完全相同的Access-Control- *響應標頭組合。 POST請求也是如此。我沒有(容易)訪問正在發出POST請求的JS(我的意思是,我可能找到它,但它被混淆了),但我認爲它不應該有任何區別 - 我很確定他們只是基本的'XHR請求。
從fetch spec開始,如果Access-Control-Max-Age未被傳遞,即使條目已添加到預檢緩存中,也應立即將其刪除。或者可能是因爲第二次POST在第一次POST(它跟在OPTIONS請求之後)的一秒鐘內發生,那麼預檢緩存中有一個未到期的條目?
您是否知道這些OPTIONS跳過請求是來自不同的UA /瀏覽器引擎,還是您只從一個UA中看到該模式?因爲它聽起來像它可能只是一個瀏覽器錯誤。 – sideshowbarker
@sideshowbarker,我只在Chrome瀏覽器上看過(51.0.2704.79米) - 我還沒有在其他瀏覽器上測試過。我知道CORS測試套件非常廣泛,所以我懷疑計時錯誤。根據提取規範(5.8):「自存儲條目以來,必須在max-age字段中指定的秒數之後從[CORS預檢緩存]中刪除條目。」它看起來像條目可能總是被添加到緩存(5.7.7.15和5.7.7.17),即使max-age沒有被傳遞。即使他們名義上從緩存中'立即'被驅逐出境,他們可能會在第二次POST後足夠長的時間? – roryhewitt