geopython / pywps

PyWPS is an implementation of the Web Processing Service standard from the Open Geospatial Consortium. PyWPS is written in Python.
https://pywps.org
MIT License
178 stars 117 forks source link

Add support of CORS protocol #644

Open gschwind opened 2 years ago

gschwind commented 2 years ago

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

Steps to Reproduce

Additional Information

cehbrecht commented 2 years ago

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