
IRIDIAN GUADALUPE CARRERA MONDRAGÓN
PreguntaCompañeros, alguien sabe como solucionar el siguiente error?
He seguido al pie de la letra las intrucciones del curso y en local si funcionan mis peticiones de Postman pero cuando lo subo a internet, me sale el siguiente mensaje:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://misitioweb.com/api/v1/publicaciones/. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
En un fetch le he enviado las cabeceras, también cree un middleware para los cors dentro del proyecto de la API.

IRIDIAN GUADALUPE CARRERA MONDRAGÓN
Woooooooo: muchisimas gracias por esa explicación tan buena y tomarte el tiempo de responder a mi pregunta amigo, al fin pude comprender que significa CORS y como funciona, lo que es aún mejor mi aplicación ya funciona.
Gracias @RetaxMaster

John Cardenas
Retax, genial tu respuesta. Muchas gracias 🤘

Carlos Eduardo Gomez García
¡Hola!, déjame darte un contexto sobre qué es esto y cómo solucionarlo:
CORS es una política de Cross Domain (dominios cruzados) que entra en juego cuando un dominio A le hace una petición a un dominio B.
Te lo explico en español jaja, básicamente "dominios cruzados" significa que, tú puedes tener un sitio web:
platzi.com
php.net
platzi.com
php.net
Esta política sirve para proteger los datos de un servidor, ya que imagina que un sitio mal intencionado intenta hacerle peticiones a Platzi para obtener sus datos, entonces sería un problema, gracias a CORS, Platzi puede decidir a quién sí y a quién no responderle esa petición, y esto lo hace por medio de CORS.
CORS está presente como un encabezado (o header como le conocemos), los headers son datos que viajan en el encabezado de cualquier petición, por ejemplo, si tú haces una petición
post
get
put
delete
Entonces, ¿por qué en local si funciona y en internet no? Porque en local estás usando el mismo dominio:
localhost
127.0.0.1
Pero al subirlo a internet los dominios cambian y al hacer una petición los dominios se cruzan y CORS se alarma, entonces tú tienes que permitirle a tu backend que pueda responder solicitudes de cualquier dominio, y esto lo haces por mediod e CORS, en específico, lo haces desde su
header
En Laravel, puedes hacerlo mediante un middleware que modifique los headers:
php artisan make:middleware Cors
Después simplemente en ese middleware (ubicado en
app/Http/Middleware/Cors.php
handle
public function handle($request, Closure $next) { return $next($request) ->header('Access-Control-Allow-Origin', '*') ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); }
Esto modificará el CORS mediante el header
Access-Control-Allow-Origin
*
El header
Access-Control-Allow-Methods
Ahora que ya tienes el middleware creado hay que registrarlo para que Laravel lo conozca, eso lo haces en el archivo
app/Http/Kernel.php
$routeMiddleware
'cors' => \App\Http\Middleware\Cors::class,
Básicamente le estás diciendo que tu middleware se llama
cors
Después de haberlo creado y haberlo registrado ya solo te queda usaro, puedes usar el middleware desde la ruta (tal como lo hicimos con el
auth:sanctum
Si lo vas a implementar desde un controlador simplemente a ese controlador debes agregarle un constructor y desde ahí llamar al middleware:
class MyController extends Controller { public functions __construct() { $this->middleware("cors"); } }
El nombre del middleware es el mismo que le pusiste cuando lo registraste en el
Kernel.php
Y listo, con esto ya puedes hacer solicitudes desde cualquier parte, incluso desde Postman, spolo ten en cuenta que cualquier persona puede hacerlo, es decir, puedo llegar yo y desde mi Postman hacerle una solicitud a tu servidor y borrarle algo, es por eso que no es una buena práctica permitir todos los orígenes, y por eso tampoco es buena prática hacerle solicitudes a tu servidor en producción desde Postman jaja, por eso todas las pruebas se hacen en local, pero para propósitos de que practiques, esto te sirve, ¡suerte! :D

John Cardenas
¡Hola!
He visto ese problema varias veces y al parecer existen muchas formas de solucionarlo. Sin embargo, a mi la que me funciono fue la que publiqué en este aporte. Espero que a ti también te pueda servir :)