1
在我的應用程序中,前端(使用axios的ReactJS,如果有的話)會對後端進行一些API調用(Node/Express,如果這很重要)。在所有響應中,服務器確實以Access-Control-Allow-Origin:*
(這是一個測試環境,將進行適當的更改以允許生產中的特定源)進行響應。選項請求過多
在Chrome開發人員工具網絡選項卡中,我觀察到對於每個請求說POST /assets
,POST /filters
, PUT /media
等,一個預檢查的OPTIONS請求被髮送。現在我明白了from here,這是理所當然的。
OPTIONS請求頭
OPTIONS /api/v1/content/bb54fbf52909f78e015f/f91659797e93cba7ae9b/asset/all
HTTP/1.1
Host: XX.X.XX.XXX:5000
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Access-Control-Request-Headers: authorization,content-type
Accept: */*
DNT: 1
Referer: http://localhost:3000/main/93f1ced0f15f35024402/assets
Accept-Encoding: gzip, deflate
Accept-Language: en,en-US;q=0.8,mr;q=0.6
響應頭
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,HEAD,PUT,PATCH,POST,DELETE
Vary: Access-Control-Request-Headers
Access-Control-Allow-Headers: authorization,content-type
Date: Sat, 05 Aug 2017 10:09:16 GMT
Connection: keep-alive
我的看法是,這是出於字面上每個請求發送,重複也就是說,即使相同的請求被髮再次(立即或以其他方式)。
我的問題是
這未必是一件壞事(即會造成任何性能問題,甚至是未成年人)?
爲什麼瀏覽器不記得相同的服務器,相同的請求的頭響應?
有沒有什麼我缺少配置在前端或後端使這個粘滯?
謝謝,完美的作品。我確實有一個後續問題。正如您鏈接的文檔中所述,此設置的超時時間因瀏覽器而異,即FF爲24小時,Chrome爲10分鐘。任何推理呢?我知道我們不想讓這些設置無限期地被緩存,但是有什麼風險可以讓它打開2個小時或者4個小時等等。另外還有一個問題,因爲它在文檔中並不清楚,這個緩存根據獨特的要求制定出來或者是通用的。我的意思是如果服務器發送標題說/媒體資源,它會被視爲/用戶? –
@SubhashDike Re。暫停:由於它們在Fx和Chrome之間非常不同,我認爲這只是供應商認爲是謹慎和性能之間的一個良好平衡的任意切斷點。 [W3C CORS規範](https://www.w3.org/TR/cors/)只是說「項目無法持續不合理的時間」。 –
@SubhashDike Re。粒度:根據[W3C CORS規範](https://www.w3.org/TR/cors/),它是每個URL。但我不確定瀏覽器是否真的遵循這個規範,因爲他們通常與W3C有着溫和的關係。 –