Angular cors
Cross-origin resource sharing (CORS) beállítjuk fejlesztési és éles környezethez is. |
|
Amikor a kliens és a backend nem ugyanazon az ip-n van, akkor merül fel ez a probléma. Lehet a böngészőben engedélyezni, hogy ne tiltsa le, de ugye az csak fejlesztéskor működik. Fejlesztéskor lehet egy proxy.config.json fájlt készíteni a gyökérbe pl a package.json mellé, a következő tartalommal: proxy.config.json { "/api/test1": { "target": "http://192.168.1.2:8000/test1", "secure": false, "logLevel": "debug", "changeOrigin": true }, "/api2/test2": { "target": "http://192.168.1.3:8000/test2", "secure": false, "logLevel": "debug", "changeOrigin": true } } Ebben a példában két api-t definiáltunk. Az angular kliens-ben csak /api/test1 néven hivatkozunk rá. A backend-en értelemszerűen http://192.168.1.2:8000/test1 url-en kell lennie a meghívandó api-nak. Angularban hívás példa: this.http.get('/api2/test2/testgetfunction'); Ha készen van a proxy.json akkor így indíthatjuk, hogy a proxy.json-t is beolvassa: # ng serve --proxy-config proxy.config.json --host=0.0.0.0 De ha kiegszítjük a package.json fájlt így az is jó megoldás: "start": "ng serve --proxy-config proxy.config.json --host=0.0.0.0", Akkor az # npm start paranccsal indítva is már használni tudja a beállítást. Élesben viszont szükségünk van más megoldásra, mert a proxy.config.json nem használható. Egy lehetőség pl az apache webszerverben beállítani a proxy-t. A következő modulokra lehet szükség, ezeket kapcsoljuk be így: # a2enmod proxy # a2enmod proxy_http # a2enmod headers Apache2 mappájában a sites-available mappában a vhost-nál aminél használni szeretnénk állítsuk be a <VirtualHost> tag-en belül: # Proxy for BaseServer <LocationMatch "/api"> ProxyPass http://192.168.1.2:8000/api Header add "Access-Control-Allow-Origin" "*" </LocationMatch> <LocationMatch "/api2"> ProxyPass http://192.168.1.3:8000/api2 Header add "Access-Control-Allow-Origin" "*" </LocationMatch> Apache-ot indítsuk újra és kész. Symfony-ban is beállíthatjuk, tegyük fel a következő csomagot: # composer require nelmio/cors-bundle Majd állítsuk be az elérési utakat a config/packages/nelmio_cors.yaml fájlban: nelmio_cors: defaults: origin_regex: true allow_origin: ['%env(CORS_ALLOW_ORIGIN)%'] allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE'] allow_headers: ['Content-Type', 'Authorization'] expose_headers: ['Link'] max_age: 3600 paths: '^/api/': allow_origin: ['*'] allow_headers: ['*'] allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] max_age: 3600 '^/oauth/': allow_origin: ['*'] allow_headers: ['*'] allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] max_age: 3600 Olvasnivaló: https://chriscarey.com/blog/2014/06/13/apache-proxy-with-cors-headers/comment-page-1/ https://stackoverflow.com/questions/38400168/cors-access-control-allow-origin-on-apache-proxy-issue https://github.com/nelmio/NelmioCorsBundle |
2019.02.20. |
Figyelem! Az itt olvasható leírások, nem teljesek és nem biztos, hogy pontosak. Nem
frissülnek folyamatosan, ezért nem mindegyik használható az aktuális verziójú rendszerekben. Mindenki saját
felelősségére használja az itt található ötleteket. Az esetleges károkért nem vállalunk felelősséget.