Dear wiki user, You have subscribed to a wiki page "Couchdb Wiki" for change notification.
The page "CORS" has been deleted by JoanTouzet: https://wiki.apache.org/couchdb/CORS?action=diff&rev1=7&rev2=8 Comment: See https://docs.couchdb.org/en/stable/config/http.html#cross-origin-resource-sharing - <<Include(EditTheWiki)>> - Note: CORS is supported only in CouchDB 1.3.x branches or releases, and at present is experimental support. This means that: - - * functionality is disabled by default - * support or API may change in subsequent releases - - WARNING!! This page is a temporary gathering spot for CORS documentation while the [[https://git-wip-us.apache.org/repos/asf?p=couchdb.git;a=shortlog;h=refs/heads/431-feature_cors|git branch]] is in development. It will get merged back into the cors branch when sufficiently clean, and will use the sphinx support being worked on in the [[https://git-wip-us.apache.org/repos/asf?p=couchdb.git;a=shortlog;h=refs/heads/docs|docs branch]]. - - <<TableOfContents(2)>> - - = Introducing CORS = - - By supporting CORS functionality, a CouchDB instance can accept direct connections to protected DBs and instances, without the browser functionality being blocked due to the same origin constraint. CORS is [[http://caniuse.com/cors|widely supported]] today on over 90% of browsers. - - * dev list [[http://markmail.org/message/wzdge2nb3xkaqzlk|announcement]] from @benoitc - * JIRA [[https://issues.apache.org/jira/browse/COUCHDB-431]] - - = Features = - - * Simple requests for a couchdb instance - * Preflight requests for a couchdb instance - * Configuration for a specific CouchDB vhost - * All origins are excluded by default - - = Configuration = - - == Enabling CORS == - - To enable CORS support, you need to set the option {{{enable_cors = true}}} in the {{{[httpd]}}} section of {{{local.ini}}}, and {{{[cors]}}} section with {{{origins = *}}}. Note that by default, no origins are accepted, you must either use a wildcard or whitelist. - - {{{ - [httpd] - enable_cors = true - - [cors] - origins = * - - }}} - - == Tightening Access == - - === Restricting by Protocol, Host and optional Port === - - {{{ - [cors] - ; List of origins, separated by a comma (protocol, host, port) - ; refer to http://tools.ietf.org/html/rfc6454 for specification - origins = http://home.muse.net.nz:8000, https://localhost, http://www.number10.gov.uk:80 - }}} - - === Restricting Accepted Methods === - - {{{ - [cors] - ; List of accepted methods, comma-separated - ; refer to http://tools.ietf.org/html/rfc2616, rfc2817, rfc5789 - methods = GET, POST, PUT, DELETE - }}} - - === Restricting Accepted Headers === - - {{{ - [cors] - ; List of accepted headers separated by a comma - headers = TODO - }}} - - == Securing at the VHOST level == - - TODO - - To set the options for a vhost, you will need to create a section with the vhost name prefixed by "cors:" . Ex for the vhost example.com: - - {{{ - ; Configuration for a vhost - ;[cors:example.com] - ; credentials = false - ; List of origins separated by a comma - ;origins = - ; List of accepted headers separated by a comma - ; headers = - ; List of accepted methods - ; methods = - }}} - - == Credentials == - - TODO - - = Testing Your Implementation = - - The following snippet was lifted from [[http://www.html5rocks.com/en/tutorials/cors|html5rocks]] CORS tutorial: - - {{{ - <!DOCTYPE html> - <html lang="en"> - <head> - <title>Testing CORS</title> - <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> - <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> - <meta author="http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server"> - <meta license="Apache 2.0"> - <script> - - // Create the XHR object. - function createCORSRequest(method, url) { - var xhr = new XMLHttpRequest(); - if ("withCredentials" in xhr) { - // XHR for Chrome/Firefox/Opera/Safari. - xhr.open(method, url, true); - } else if (typeof XDomainRequest != "undefined") { - // XDomainRequest for IE. - xhr = new XDomainRequest(); - xhr.open(method, url); - } else { - // CORS not supported. - xhr = null; - } - return xhr; - } - - // Make the actual CORS request. - function makeCorsRequest(uri) { - console.log("got uri: " + uri); - var xhr = createCORSRequest('GET', uri); - if (!xhr) { - alert('CORS not supported'); - return; - } - - // Response handlers. - xhr.onload = function() { - console.log('Response from CORS request to ' + uri + ': ' + xhr.responseText); - }; - - xhr.onerror = function() { - console.log('Woops, there was an error making the request to ' + uri + '.'); - }; - - xhr.send(); - } - - $(document).ready(function() { - makeCorsRequest('http://my.couchdb.org:5984/'); - }); - </script> - </head> - <body> - </body> - </html> - }}} - - = Reference Material = - - This image is from the excellent [[http://www.html5rocks.com/en/tutorials/cors/|html5rocks]] CORS tutorial. - - {{http://www.html5rocks.com/static/images/cors_flow.png}} - - == CORS References == - - * [[http://www.w3.org/TR/cors/]] CORS standard - * [[http://tools.ietf.org/html/rfc6454]] Definition of Origin - * [[https://developer.mozilla.org/en-US/docs/Same-origin_policy_for_file:_URIs]] - * [[http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/]] - * [[https://developer.mozilla.org/En/HTTP_access_control]] - * [[https://developer.mozilla.org/En/Server-Side_Access_Control]] - * [[https://developer.mozilla.org/en-US/docs/Same_origin_policy_for_JavaScript]] - - == Client-side CORS support and usage == - - * [[http://caniuse.com/cors]] covers browser support - * [[http://www.html5rocks.com/en/tutorials/cors/]] has a nice example - * [[http://www.kendoui.com/blogs/teamblog/posts/11-10-03/using_cors_with_all_modern_browsers.aspx]] - - Note that at least IE >= 8 does not support pre-flight. -