Corsica is a plug and a DSL for handling CORS requests. Documentation can be found online.
(I had to include a nice pic because, let's be honest, CORS requests aren't the most fun thing in the world, are they?)
- Is compliant with the W3C CORS specification
- Provides both low-level CORS utilities as well as high-level facilities (like a built-in plug and a CORS-focused router)
- Handles preflight requests like a breeze
- Never sends any CORS headers if the CORS request is not valid (smaller requests, yay!)
Just add the :corsica
dependency to your project's mix.exs
:
defp dependencies do
[{:plug, "~> 1.0"},
{:corsica, "~> 0.4"}]
end
and then run $ mix deps.get
. Corsica is a plug and thus depends on
Plug too, but you have to explicitly list Plug as a dependency of your
project (since the dependency is optional: true
in Corsica).
You can use Corsica both as a plug as well as a router generator. To use it as a plug, just plug it into your plug pipeline:
defmodule MyApp.Endpoint do
plug Logger
plug Corsica, origins: "http://foo.com"
plug MyApp.Router
end
To gain finer control over which resources are CORS-enabled and with what
options, you can use the Corsica.Router
module:
defmodule MyApp.CORS do
use Corsica.Router,
origins: ["http://foo.com", "http://bar.com"],
allow_credentials: true,
max_age: 600,
resource "/public/*", origins: "*"
resource "/*"
end
defmodule MyApp.Endpoint do
plug Logger
plug MyApp.CORS
plug MyApp.Router
end
This is only a brief overview of what Corsica can do. To find out more, head to the online documentation.
If you find a bug, something unclear (including in the documentation!) or a behaviour that is not compliant with the latest revision of the official CORS specification, please open an issue on GitHub.
If you want to contribute to code or documentation, fork the repository and then
open a Pull Request
(how-to). Before
opening a Pull Request, make sure all the tests passes by running $ mix test
in your shell. If you're contributing to documentation, you can preview the
generated documentation locally by running:
$ MIX_ENV=docs mix do deps.get, docs
Documentation will be generated in the doc/
directory.
MIT © 2015 Andrea Leopardi, see the license file.