DEV Community

Cover image for Demystifying CORS - Everything You Need to Know
Thisura Thenuka
Thisura Thenuka

Posted on • Originally published at Medium

Demystifying CORS - Everything You Need to Know

If you’re a web developer, chances are you’ve come across the pesky CORS error. But fear not! This article is here to help fellow developers understand and master the CORS policy. I’ll break it down for you in simple terms so you can tackle this error with ease. So, let’s jump right in and unravel the mysteries of CORS!

What is the Same-Origin Policy?

The Same-Origin Policy is like a rule that web browsers follow to keep you safe on the internet.

It says that if a web page from one website tries to do something on a different website, like read information or send data, the web browser won’t let it happen. It’s like a security guard that stops people from going where they’re not supposed to.

This is important because it helps protect your personal information and keeps you safe from bad things on the internet. Imagine if anyone could read your emails or see your bank account information just by going to a website! The Same-Origin Policy helps prevent that from happening.

What is CORS?

Cross-Origin Resource Sharing or CORS is a way for web pages to ask permission from a different website to use its information.

Let’s say you want to view some pictures on a website called “A”. But the pictures are stored on a different website called “B”. Normally, your web browser won’t show you the pictures because of the Same-Origin Policy.

But with CORS, website “A” can send a special message called a “CORS request” to website “B”. This message asks website “B” if it’s okay for website “A” to see the pictures. If website “B” says it’s okay, then your web browser will show you the pictures from website “B” on website “A”.

CORS helps web pages work together and share information safely, like when you share your toys with your friends. It’s important because it allows websites to work together and show you the information you want to see.

What are preflight requests?

Preflight requests are like asking for permission before doing something.

Let’s say a website wants to share information with another website using CORS, but the information is sensitive and needs extra protection. The website will send a special message called a “preflight request” before sending the actual message.

The preflight request asks the other website if it’s okay to send sensitive information. It’s like asking your parents if it’s okay to go to a friend’s house for a sleepover.

The other website will then send a message back saying if it’s okay to send the information or not. If it’s okay, the original website will send the sensitive information, but if it’s not okay, the information won’t be sent.

Preflight requests help keep your information safe on the internet by making sure that websites only send and receive information when it’s safe to do so. It’s like checking with your parents before doing something that might be dangerous.

What are CORS headers?

CORS headers are messages that websites use to talk to each other and decide if it’s safe to share information. Different kinds of CORS headers have different jobs, just like how different tools have different jobs in a toolbox.

Here are a few examples of different CORS headers and what they do:

  1. Access-Control-Allow-Origin: This CORS header tells your web browser which websites are allowed to see the information. It’s like telling your friends which toys they can play with.  
  2. Access-Control-Allow-Methods: This CORS header tells your web browser which kinds of actions it can take with the information, like reading or editing. It’s like telling your friends which games they can play with the toys.  
  3. Access-Control-Allow-Credentials: This CORS header tells your web browser if it’s okay to send personal information, like passwords. It’s like telling your friends if it’s okay to come into your room or not.  
  4. Access-Control-Allow-Headers: This CORS header tells your web browser which kinds of information it can share, like text or pictures. It’s like telling your friends what kind of snacks they can have.

By using these different CORS headers, websites can make sure that they’re only sharing information that’s safe to share, and keeping your personal information secure. It’s like making sure that only your trusted friends can come over to play, and that they know the rules for playing with your toys.

How do I handle CORS errors?

Picture this — you’re on a website and you spot some juicy information on another website that you’d love to get your hands on. But before you can access it, your browser needs to ask for permission. It sends a preflight request to check if the other website will let you use its resources. If the answer is no, you’ll encounter the dreaded CORS error, blocking your request.

There are a few different types of CORS errors, but they all mean the same thing: you can’t access the information or resources you want. Here are the most common CORS errors that you will encounter.

  • Access-Control-Allow-Origin: This error means that the website you’re trying to access doesn’t allow other websites to use its resources.  
  • Access-Control-Allow-Headers: This error means that the website you’re trying to access doesn’t allow you to use certain headers in your request.  
  • Access-Control-Allow-Methods: This error means that the website you’re trying to access doesn’t allow you to use certain methods, like GET or POST, to access its resources.

If you run into a CORS error, don’t worry! There are ways to handle it. One way is to contact the owner of the website you’re trying to access and ask them to allow other websites to use its resources. Another way is to use a proxy server, which acts as a middleman between you and the website you’re trying to access.

If you’d like to read more about all the different CORS errors, you can refer to the MDN Docs article from here.

What are the CORS Best Practices?

To ensure your website is secure and functional, it’s important to follow some best practices when working with CORS.

  1. Include the necessary CORS headers in your server’s response: When a browser makes a cross-origin request, the server being accessed must include specific response headers to permit the request. Make sure your server includes the appropriate CORS headers such as Access-Control-Allow-Origin, Access-Control-Allow-Methods, and Access-Control-Allow-Headers.  
  2. Only allow access to necessary resources: To minimize the risk of unauthorized access, only allow cross-origin access to necessary resources. Avoid allowing access to sensitive information or resources unless it’s required.  
  3. Use SSL/TLS encryption: Use SSL/TLS encryption to ensure that any data being transmitted is secure. This can help prevent unauthorized interception of data.  
  4. Set appropriate CORS configuration: Set up CORS configuration based on your website’s requirements. For example, if your website has a public API that should be accessible to third-party websites, set up CORS to allow cross-origin requests from those specific domains.  
  5. Monitor CORS requests: Monitor cross-origin requests to your website to identify any unusual or potentially malicious activity. Implement logging and monitoring tools to detect any unauthorized access attempts.

By following these best practices, you can help ensure that your website is secure and functional while allowing cross-origin requests as needed.

Conclusion

Understanding and being able to handle the Cross-Origin Resource Sharing (CORS) policy is crucial for every web developer. During my early days in web development, I had to face the dreadful CORS error which led me to waste so much time trying out numerous solutions from Stack Overflow without truly comprehending the concept. But, now that I have gained ample knowledge about CORS, I can confidently say that you don’t have to suffer the same fate as I did. So, take the time to understand CORS and save yourself from the hassle of going through a maze of solutions.

Thank you so much for taking the time to read my article! My utmost priority was to simplify complex concepts, and I hope I’ve achieved that. If you found my article informative and useful, please drop a comment below and don’t forget to follow me for more articles like this. Oh, and spread the word by sharing it with your friends and colleagues, they might thank you for it!

Top comments (2)

Collapse
 
aarone4 profile image
Aaron Reese

Nope. Still confused ...
Which bits are CONFIGURED on the RESPONDING domain and which bits are COMMUNICATION between REQUESTING domain and RESPONDING domain.

Collapse
 
thisurathenuka profile image
Thisura Thenuka

Hi Aaron,

Simply put, you have to configure the responding domain (service) to allow requests from the requesting domain. Usually, there's nothing that can be done from the frontend unless you're using a proxy server. (Btw, I'll be writing a separate article on how to setup a proxy server to avoid CORS errors).

Hope this clears your confusions

Thanks and Regards,
Thisura