pywps icon indicating copy to clipboard operation
pywps copied to clipboard

Add support of CORS protocol

Open gschwind opened this issue 3 years ago • 1 comments

Description

The CORS protocol [1] is needed to support request from web browser from cross-origin fetch, i.e. fetch from different domain name. As instance a javascript from domain1.com that want to fetch a WPS from domain2.com. The protocol need to answer to some HTTP OPTIONS requests.

In my case I override the wsgi application when OPTIONS request is perfomed to allow any cross-origin request as follow:

from werkzeug.wrappers import Request, Response
from pywps.app.Service import Service


_servive = Service(processes, ['PWD/pywps.cfg'])

@Request.application
def application(http_request):
    # Allow request from any sources to avoid cross-origin issue.
    if http_request.method == 'OPTIONS':
        return Response(headers={
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Headers": "origin, content-type, x-requested-with",
            "Access-Control-Allow-Methods": "PUT, GET, POST, DELETE, OPTIONS"
        })

    # Default case
    r = _servive.call(http_request)
    return r

[1] https://fetch.spec.whatwg.org/#cors-protocol

Environment

  • operating system: Any

  • Python version: Any

  • PyWPS version: Any

  • source/distribution

  • [x] git clone

  • [x] Debian

  • [x] PyPI

  • [x] zip/tar.gz

  • [x] other (please specify): Any

  • web server

  • [x] Apache/mod_wsgi

  • [x] CGI

  • [x] other (please specify): Any

Steps to Reproduce

Additional Information

gschwind avatar Feb 11 '22 10:02 gschwind

Just adding a link to ogcapi docs about CORS: https://docs.ogc.org/is/18-062r2/18-062r2.html#toc27

cehbrecht avatar Mar 15 '22 16:03 cehbrecht