feat(api-server): add Access-Control-Max-Age to CORS preflight responses (#3580)
Adds Access-Control-Max-Age: 600 to CORS preflight responses, telling browsers to cache the preflight for 10 minutes. Reduces redundant OPTIONS requests and improves perceived latency for browser-based API clients. Salvaged from PR #3514 by aydnOktay. Co-authored-by: aydnOktay <xaydinoktay@gmail.com>
This commit is contained in:
@@ -307,6 +307,7 @@ class APIServerAdapter(BasePlatformAdapter):
|
|||||||
if "*" in self._cors_origins:
|
if "*" in self._cors_origins:
|
||||||
headers = dict(_CORS_HEADERS)
|
headers = dict(_CORS_HEADERS)
|
||||||
headers["Access-Control-Allow-Origin"] = "*"
|
headers["Access-Control-Allow-Origin"] = "*"
|
||||||
|
headers["Access-Control-Max-Age"] = "600"
|
||||||
return headers
|
return headers
|
||||||
|
|
||||||
if origin not in self._cors_origins:
|
if origin not in self._cors_origins:
|
||||||
@@ -315,6 +316,7 @@ class APIServerAdapter(BasePlatformAdapter):
|
|||||||
headers = dict(_CORS_HEADERS)
|
headers = dict(_CORS_HEADERS)
|
||||||
headers["Access-Control-Allow-Origin"] = origin
|
headers["Access-Control-Allow-Origin"] = origin
|
||||||
headers["Vary"] = "Origin"
|
headers["Vary"] = "Origin"
|
||||||
|
headers["Access-Control-Max-Age"] = "600"
|
||||||
return headers
|
return headers
|
||||||
|
|
||||||
def _origin_allowed(self, origin: str) -> bool:
|
def _origin_allowed(self, origin: str) -> bool:
|
||||||
|
|||||||
@@ -1356,6 +1356,21 @@ class TestCORS:
|
|||||||
assert "Authorization" in resp.headers.get("Access-Control-Allow-Headers", "")
|
assert "Authorization" in resp.headers.get("Access-Control-Allow-Headers", "")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_cors_preflight_sets_max_age(self):
|
||||||
|
adapter = _make_adapter(cors_origins=["http://localhost:3000"])
|
||||||
|
app = _create_app(adapter)
|
||||||
|
async with TestClient(TestServer(app)) as cli:
|
||||||
|
resp = await cli.options(
|
||||||
|
"/v1/chat/completions",
|
||||||
|
headers={
|
||||||
|
"Origin": "http://localhost:3000",
|
||||||
|
"Access-Control-Request-Method": "POST",
|
||||||
|
"Access-Control-Request-Headers": "Authorization, Content-Type",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert resp.status == 200
|
||||||
|
assert resp.headers.get("Access-Control-Max-Age") == "600"
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Conversation parameter
|
# Conversation parameter
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user