Skip to content

Commit

Permalink
--cors Access-Control-Max-Age: 3600, closes #2079
Browse files Browse the repository at this point in the history
  • Loading branch information
simonw committed May 25, 2023
1 parent 9584879 commit b49fa44
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
1 change: 1 addition & 0 deletions datasette/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1141,6 +1141,7 @@ def add_cors_headers(headers):
headers["Access-Control-Allow-Headers"] = "Authorization, Content-Type"
headers["Access-Control-Expose-Headers"] = "Link"
headers["Access-Control-Allow-Methods"] = "GET, POST, HEAD, OPTIONS"
headers["Access-Control-Max-Age"] = "3600"


_TILDE_ENCODING_SAFE = frozenset(
Expand Down
18 changes: 17 additions & 1 deletion docs/json_api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -454,12 +454,28 @@ Enabling CORS
-------------

If you start Datasette with the ``--cors`` option, each JSON endpoint will be
served with the following additional HTTP headers::
served with the following additional HTTP headers:

.. [[[cog
from datasette.utils import add_cors_headers
import textwrap
headers = {}
add_cors_headers(headers)
output = "\n".join("{}: {}".format(k, v) for k, v in headers.items())
cog.out("\n::\n\n")
cog.out(textwrap.indent(output, ' '))
cog.out("\n\n")
.. ]]]
::

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Authorization, Content-Type
Access-Control-Expose-Headers: Link
Access-Control-Allow-Methods: GET, POST, HEAD, OPTIONS
Access-Control-Max-Age: 3600

.. [[[end]]]
This allows JavaScript running on any domain to make cross-origin
requests to interact with the Datasette API.
Expand Down
2 changes: 2 additions & 0 deletions tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -941,6 +941,7 @@ def test_cors(
assert (
response.headers["Access-Control-Allow-Methods"] == "GET, POST, HEAD, OPTIONS"
)
assert response.headers["Access-Control-Max-Age"] == "3600"
# Same request to app_client_two_attached_databases_one_immutable
# should not have those headers - I'm using that fixture because
# regular app_client doesn't have immutable fixtures.db which means
Expand All @@ -951,6 +952,7 @@ def test_cors(
assert "Access-Control-Allow-Headers" not in response.headers
assert "Access-Control-Expose-Headers" not in response.headers
assert "Access-Control-Allow-Methods" not in response.headers
assert "Access-Control-Max-Age" not in response.headers


@pytest.mark.parametrize(
Expand Down

0 comments on commit b49fa44

Please sign in to comment.