CORS request failing in docker-compose environment
I'm hoping to figure out why an API request in a React application running in Firefox is failing.
Headers are as follows:
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
DNT 1
Host backend:8080
origin http://localhost:3000
Referer http://localhost:3000/
User-Agent Mozilla/5.0 ...
On Chrome, an opaque message tells of some sort of network(ish) error:
request.js?176a:41 GET http://backend:8080/api/foobar/
net::ERR_NAME_NOT_RESOLVED
On Firefox, there seems to be a bit more info:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://backend:8080/api/foobar/. (Reason: CORS request did not succeed).
I have a environment composed of two relevant nodes, frontend
and backend
. frontend
is running a server hosting the React frontend
bits. backend
is a Flask app providing a set of simple JSON APIs. The intent is for frontend
to call backend
via JSON APIs.
The docker-compose
config is such that they're running on the same logical network. At first, I had suspected the issue was a docker-compose
issue, and maybe some DNS mishap. However, I was able to exclude this case by manually stopping the frontend
node, and manually re-attaching the same container to the network so I could run a bash
shell and ping the backend
host. Furthermore, I was able to fetch the same bits via curl
from the backend
. So this excludes it being a Docker networking issue (I think).
The next logical culprit is something to do with CORS. The frontend
request is hitting a distinct domain, (e.g. backend
) so this could explain the behavior.
Following the docs listed in the dev console of Firefox the claim is a "fundamental network error of some kind" occurred.
For good measure, I set up Flask-CORS on the backend
and verified the right headers are being relayed from the server. To be precise, Access-Control-Allow-Origin: *
.
Yet, from the logs of the backend
server - there are still no new network requests being made. I had speculated that maybe there was an OPTION
request being fired at the backend
per the special case described in the Mozilla CORS Docs, and that was failing. Yet that would at least have triggered a log entry in the Flask console output indicating an OPTION
request was fired. To indulge my paranoia I even broke out Wireshark. There doesn't even appear to be any relevant network requests being emitted from Firefox (nor Chrome) !
Odds are I am over complicating this, and it's something painfully simple. But would love some pointers in the right direction.
reactjs flask cors
add a comment |
I'm hoping to figure out why an API request in a React application running in Firefox is failing.
Headers are as follows:
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
DNT 1
Host backend:8080
origin http://localhost:3000
Referer http://localhost:3000/
User-Agent Mozilla/5.0 ...
On Chrome, an opaque message tells of some sort of network(ish) error:
request.js?176a:41 GET http://backend:8080/api/foobar/
net::ERR_NAME_NOT_RESOLVED
On Firefox, there seems to be a bit more info:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://backend:8080/api/foobar/. (Reason: CORS request did not succeed).
I have a environment composed of two relevant nodes, frontend
and backend
. frontend
is running a server hosting the React frontend
bits. backend
is a Flask app providing a set of simple JSON APIs. The intent is for frontend
to call backend
via JSON APIs.
The docker-compose
config is such that they're running on the same logical network. At first, I had suspected the issue was a docker-compose
issue, and maybe some DNS mishap. However, I was able to exclude this case by manually stopping the frontend
node, and manually re-attaching the same container to the network so I could run a bash
shell and ping the backend
host. Furthermore, I was able to fetch the same bits via curl
from the backend
. So this excludes it being a Docker networking issue (I think).
The next logical culprit is something to do with CORS. The frontend
request is hitting a distinct domain, (e.g. backend
) so this could explain the behavior.
Following the docs listed in the dev console of Firefox the claim is a "fundamental network error of some kind" occurred.
For good measure, I set up Flask-CORS on the backend
and verified the right headers are being relayed from the server. To be precise, Access-Control-Allow-Origin: *
.
Yet, from the logs of the backend
server - there are still no new network requests being made. I had speculated that maybe there was an OPTION
request being fired at the backend
per the special case described in the Mozilla CORS Docs, and that was failing. Yet that would at least have triggered a log entry in the Flask console output indicating an OPTION
request was fired. To indulge my paranoia I even broke out Wireshark. There doesn't even appear to be any relevant network requests being emitted from Firefox (nor Chrome) !
Odds are I am over complicating this, and it's something painfully simple. But would love some pointers in the right direction.
reactjs flask cors
add a comment |
I'm hoping to figure out why an API request in a React application running in Firefox is failing.
Headers are as follows:
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
DNT 1
Host backend:8080
origin http://localhost:3000
Referer http://localhost:3000/
User-Agent Mozilla/5.0 ...
On Chrome, an opaque message tells of some sort of network(ish) error:
request.js?176a:41 GET http://backend:8080/api/foobar/
net::ERR_NAME_NOT_RESOLVED
On Firefox, there seems to be a bit more info:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://backend:8080/api/foobar/. (Reason: CORS request did not succeed).
I have a environment composed of two relevant nodes, frontend
and backend
. frontend
is running a server hosting the React frontend
bits. backend
is a Flask app providing a set of simple JSON APIs. The intent is for frontend
to call backend
via JSON APIs.
The docker-compose
config is such that they're running on the same logical network. At first, I had suspected the issue was a docker-compose
issue, and maybe some DNS mishap. However, I was able to exclude this case by manually stopping the frontend
node, and manually re-attaching the same container to the network so I could run a bash
shell and ping the backend
host. Furthermore, I was able to fetch the same bits via curl
from the backend
. So this excludes it being a Docker networking issue (I think).
The next logical culprit is something to do with CORS. The frontend
request is hitting a distinct domain, (e.g. backend
) so this could explain the behavior.
Following the docs listed in the dev console of Firefox the claim is a "fundamental network error of some kind" occurred.
For good measure, I set up Flask-CORS on the backend
and verified the right headers are being relayed from the server. To be precise, Access-Control-Allow-Origin: *
.
Yet, from the logs of the backend
server - there are still no new network requests being made. I had speculated that maybe there was an OPTION
request being fired at the backend
per the special case described in the Mozilla CORS Docs, and that was failing. Yet that would at least have triggered a log entry in the Flask console output indicating an OPTION
request was fired. To indulge my paranoia I even broke out Wireshark. There doesn't even appear to be any relevant network requests being emitted from Firefox (nor Chrome) !
Odds are I am over complicating this, and it's something painfully simple. But would love some pointers in the right direction.
reactjs flask cors
I'm hoping to figure out why an API request in a React application running in Firefox is failing.
Headers are as follows:
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
DNT 1
Host backend:8080
origin http://localhost:3000
Referer http://localhost:3000/
User-Agent Mozilla/5.0 ...
On Chrome, an opaque message tells of some sort of network(ish) error:
request.js?176a:41 GET http://backend:8080/api/foobar/
net::ERR_NAME_NOT_RESOLVED
On Firefox, there seems to be a bit more info:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://backend:8080/api/foobar/. (Reason: CORS request did not succeed).
I have a environment composed of two relevant nodes, frontend
and backend
. frontend
is running a server hosting the React frontend
bits. backend
is a Flask app providing a set of simple JSON APIs. The intent is for frontend
to call backend
via JSON APIs.
The docker-compose
config is such that they're running on the same logical network. At first, I had suspected the issue was a docker-compose
issue, and maybe some DNS mishap. However, I was able to exclude this case by manually stopping the frontend
node, and manually re-attaching the same container to the network so I could run a bash
shell and ping the backend
host. Furthermore, I was able to fetch the same bits via curl
from the backend
. So this excludes it being a Docker networking issue (I think).
The next logical culprit is something to do with CORS. The frontend
request is hitting a distinct domain, (e.g. backend
) so this could explain the behavior.
Following the docs listed in the dev console of Firefox the claim is a "fundamental network error of some kind" occurred.
For good measure, I set up Flask-CORS on the backend
and verified the right headers are being relayed from the server. To be precise, Access-Control-Allow-Origin: *
.
Yet, from the logs of the backend
server - there are still no new network requests being made. I had speculated that maybe there was an OPTION
request being fired at the backend
per the special case described in the Mozilla CORS Docs, and that was failing. Yet that would at least have triggered a log entry in the Flask console output indicating an OPTION
request was fired. To indulge my paranoia I even broke out Wireshark. There doesn't even appear to be any relevant network requests being emitted from Firefox (nor Chrome) !
Odds are I am over complicating this, and it's something painfully simple. But would love some pointers in the right direction.
reactjs flask cors
reactjs flask cors
edited Nov 22 '18 at 1:53
thetwan
asked Nov 22 '18 at 0:45
thetwanthetwan
5101414
5101414
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
TLDR - JavaScript runs in the browser (says the backend dev)
The host referred on the frontend
should be localhost
as the backend
port is exposed on localhost
via Docker. And the frontend
code is running in the browser (as opposed to exclusively in the container). The container was just a process serving up those bits.
The opaque network error was likely a result of referring to a domain name that didn't exist to the host network. Because it was part of the docker-compose
virtual network.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53422421%2fcors-request-failing-in-docker-compose-environment%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
TLDR - JavaScript runs in the browser (says the backend dev)
The host referred on the frontend
should be localhost
as the backend
port is exposed on localhost
via Docker. And the frontend
code is running in the browser (as opposed to exclusively in the container). The container was just a process serving up those bits.
The opaque network error was likely a result of referring to a domain name that didn't exist to the host network. Because it was part of the docker-compose
virtual network.
add a comment |
TLDR - JavaScript runs in the browser (says the backend dev)
The host referred on the frontend
should be localhost
as the backend
port is exposed on localhost
via Docker. And the frontend
code is running in the browser (as opposed to exclusively in the container). The container was just a process serving up those bits.
The opaque network error was likely a result of referring to a domain name that didn't exist to the host network. Because it was part of the docker-compose
virtual network.
add a comment |
TLDR - JavaScript runs in the browser (says the backend dev)
The host referred on the frontend
should be localhost
as the backend
port is exposed on localhost
via Docker. And the frontend
code is running in the browser (as opposed to exclusively in the container). The container was just a process serving up those bits.
The opaque network error was likely a result of referring to a domain name that didn't exist to the host network. Because it was part of the docker-compose
virtual network.
TLDR - JavaScript runs in the browser (says the backend dev)
The host referred on the frontend
should be localhost
as the backend
port is exposed on localhost
via Docker. And the frontend
code is running in the browser (as opposed to exclusively in the container). The container was just a process serving up those bits.
The opaque network error was likely a result of referring to a domain name that didn't exist to the host network. Because it was part of the docker-compose
virtual network.
edited Nov 22 '18 at 3:42
answered Nov 22 '18 at 3:08
thetwanthetwan
5101414
5101414
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53422421%2fcors-request-failing-in-docker-compose-environment%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown