In this guide, you will learn about cross-origin resource sharing (CORS) and the role of the “Allow Access Control Origin” header. With the knowledge gained in this guide, you will find it easy to resolve issues relating to CORS.
According to Wikipedia, "Cross-origin resource sharing (CORS) is a mechanism that allows restricted resources on a web page to be requested from another domain outside the domain from which the first resource was served."
There are two methods used by the browser to verify the ability to share resources between two domains.
1. Simple Requests
In a simple request, the browser sends a GET request with an Origin
header with the value of the requester's domain as shown below.
Origin: https://main.codequs.com
The server then responds with an Access-Control-Allow-Origin
header that includes a domain from which requests are allowed. This may also be a wildcard character denoted by an asterisk (*).
Access-Control-Allow-Origin: http://main.codequs.com
OR a wildcard
Access-Control-Allow-Origin: *
2. Preflighted Requests
In this method, the browser first sends a request with the OPTIONS
method to the server—in this case, Server B, https://api.codequs.com(https://api.codequs.com—to find out if it's allowed to send a request, hence the name preflight request.
Request
OPTIONS /
Host: api.codequs.com
Origin: https://main.example.com
Response
Access-Control-Allow-Origin: http://main.codequs.com
Access-Control-Allow-Methods: PUT, DELETE
After a response is received and server A (https://main.codequs.com) has the necessary permission to "talk" to server B (https://api.codequs.com), then the main request is sent to server A.
You understand CORS now, but how does this come together in Create-React-App? Well, as always, Create-React-App comes with a simple way to handle this: add a proxy field to your package.json file as shown below. In this case, a request is made from server A to server B (https://api.codequs.com).
"proxy": "https://api.codequs.com:8000",
Any route that Create-React-App does not recognize will now automatically be proxied to the URL provided.
If you don't do this, you may end up with an error:
Fetch API cannot load http://localhost:4000/api/todos. No 'Access-Control-Allow-Origin'
header is present on the requested resource. Origin 'http://localhost:3000' is therefore
not allowed access. If an opaque response serves your needs, set the request's mode to
'no-cors' to fetch the resource with CORS disabled.
Note that Create-React-App will only proxy requests that do not have a content type of text/html
.
In this guide, you got to understand what cross-origin resource sharing is and how browsers handle cross-origin requests.
#react #app #cors