Hi,
Al een geruime tijd loop ik tegen een CORS issue aan, die ik telkens (wanneer ik mijn moed weer terug heb gevonden) probeer op te lossen, maar ik loop echt gigantisch tegen de muur omdat het inmiddels onlogisch is geworden voor me.
Ik hoop met deze vraag dat iemand me op een andere gedachte kan krijgen waardoor ik wellicht meer inzicht krijg in het probleem.
Here goes...
(ik gebruik even aliassen voor mijn domeinen. Ik wil deze best in een DM delen btw)
Ik heb een backend draaien (Wordpress) op wordpress-domein.nl
Ik heb een frontend draaien (Vue.js) op sub.wordpress-domein.nl
Ik heb een development (backend) draaien op wordpress.dev-domein.nl
Ik heb een development (frontend) draaien op localhost:8080
Mijn Vue.js project maakt gebruik van Axios om te connecten met Woocommerce (REST API).
Voor mijn lokale omgeving heb ik een proxy ingesteld.
Nu wil ik graag voor productie kunnen deployen naar Firebase.
Deze staat ingesteld en kan ik aan via sub.wordpress-domein.nl, maar krijg dan de foutmelding.
Plaats ik mijn /dist map handmatig op mijn server (wordpress-domein.nl) in de map /apps/dashboard/ geeft het geen problemen.
Mijn inziens logisch omdat de aanvraag dan ook vanuit het trusted domein komt.
Ik heb geprobeerd om Headers toe te voegen. In dit geval via
Voorheen nog netjes een check voor whitelisting eromheen gebouwd, maar gezien mijn hopeloosheid staat het nu even direct geset
Zegt bovenstaande jullie iets van wat ik verkeerd doe?
Wat mij nog vreemd blijft zijn de volgende dingen:
p.s: erg bedankt voor je tijd!

Oplossing
In de meest voorkomende gevallen is een CORS vaak op te lossen door een wijziging van de Request of Response Headers. Zie hiervoor de reactie reacties.
Voor mijn probleem lag de oorzaak echter net iets dieper en had het ook te maken met het blokkeren van de Preflight requests vanuit mijn server.
Voor de volledigheid heb ik een samenvatting gemaakt, hopende hiermee iemand met dezelfde struggle hiermee gigantisch tijd te besparen.
Al een geruime tijd loop ik tegen een CORS issue aan, die ik telkens (wanneer ik mijn moed weer terug heb gevonden) probeer op te lossen, maar ik loop echt gigantisch tegen de muur omdat het inmiddels onlogisch is geworden voor me.
Ik hoop met deze vraag dat iemand me op een andere gedachte kan krijgen waardoor ik wellicht meer inzicht krijg in het probleem.
Here goes...
(ik gebruik even aliassen voor mijn domeinen. Ik wil deze best in een DM delen btw)
Ik heb een backend draaien (Wordpress) op wordpress-domein.nl
Ik heb een frontend draaien (Vue.js) op sub.wordpress-domein.nl
Ik heb een development (backend) draaien op wordpress.dev-domein.nl
Ik heb een development (frontend) draaien op localhost:8080
Mijn Vue.js project maakt gebruik van Axios om te connecten met Woocommerce (REST API).
JavaScript: woocommerce.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| import Vue from 'vue' import axios from 'axios' const WC_API = axios.create({ baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_WC_URL : process.env.VUE_APP_WC_DEV_URL, auth: { username: process.env.VUE_APP_WC_USER, password: process.env.VUE_APP_WC_PASS }, headers: { 'Content-Type': 'application/json', } }) export default Vue.prototype.$woocommerce = WC_API; |
Voor mijn lokale omgeving heb ik een proxy ingesteld.
JavaScript: vue.config.js
'/apps/dashboard/' is hier tijdelijk ingezet om zo vanuit het hoofd domein de app toch aan de praat te krijgen.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| module.exports = { devServer: { proxy: { '/wp-json/': { target: 'https://www.wordpress-domein.nl/', changeOrigin: true }, '/pie/psdService/': { target: 'https://image.adobe.io/', changeOrigin: true }, '/api/v2/': { target: 'https://panel.sendcloud.sc/', changeOrigin: true } } }, publicPath: process.env.NODE_ENV === 'production' ? '/apps/dashboard/' : '/', } |
Nu wil ik graag voor productie kunnen deployen naar Firebase.
Deze staat ingesteld en kan ik aan via sub.wordpress-domein.nl, maar krijg dan de foutmelding.
Access to XMLHttpRequest at 'https://www.wordpress-domein.nl/wp-json/wc/v3/orders/?status=processing' from origin 'https://sub.wordpress-domein.nl' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Plaats ik mijn /dist map handmatig op mijn server (wordpress-domein.nl) in de map /apps/dashboard/ geeft het geen problemen.
Mijn inziens logisch omdat de aanvraag dan ook vanuit het trusted domein komt.
Ik heb geprobeerd om Headers toe te voegen. In dit geval via
PHP: functions.php
1
2
3
4
5
| header("Access-Control-Allow-Origin: https://sub.wordpress-domein.nl"); header("Access-Control-Allow-Headers: *"); header("Access-Control-Allow-Methods: GET, OPTIONS"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); |
Voorheen nog netjes een check voor whitelisting eromheen gebouwd, maar gezien mijn hopeloosheid staat het nu even direct geset
Zegt bovenstaande jullie iets van wat ik verkeerd doe?
Wat mij nog vreemd blijft zijn de volgende dingen:
- via Postman kan ik alle data opvragen en kloppen de headers ook
- andere plugins die gebruik maken van dezelfde API (zoals Sendcloud) kunnen ook alle data opvragen, no matter what
- Roep ik de API van mijn dev omgeving aan vanuit sub.wordpress-domein.nl, krijg ik geen error
p.s: erg bedankt voor je tijd!
Oplossing
In de meest voorkomende gevallen is een CORS vaak op te lossen door een wijziging van de Request of Response Headers. Zie hiervoor de reactie reacties.
Voor mijn probleem lag de oorzaak echter net iets dieper en had het ook te maken met het blokkeren van de Preflight requests vanuit mijn server.
Voor de volledigheid heb ik een samenvatting gemaakt, hopende hiermee iemand met dezelfde struggle hiermee gigantisch tijd te besparen.
[ Voor 6% gewijzigd door RoelZ op 12-09-2020 09:02 . Reden: Oops, toch een echte verwijzing ]
- Creating more joy for people who interact with our digital world