CORS
Coddy'nin Node.js Journey'sinin REST API'leri bölümünün bir parçası. Ders 13 / 18.
https://board.example.com adresindeki bir sayfa, API'nizi fetch ile çağırıyor ve tarayıcı yanıtı engelliyor. Sunucu CORS başlıklarıyla başkalarına izin vermediği sürece tarayıcılar, bir sayfanın yalnızca geldiği şema, ana makine ve bağlantı noktası olan kendi kökeninden gelen yanıtları okumasına izin verir.
OPTIONS /api/products/7
Origin: https://shop.example.com
Access-Control-Request-Method: DELETE
204 No Content
Access-Control-Allow-Origin: https://shop.example.com
Access-Control-Allow-Methods: GET, DELETE
Access-Control-Allow-Headers: Content-TypeBir DELETE, PATCH veya JSON gövdesinden önce tarayıcı bu ön kontrol isteğini gönderir ve yalnızca yanıt izin verirse devam eder. Diğer tüm yanıtların da Access-Control-Allow-Origin başlığına ihtiyacı vardır. * herhangi bir kökene izin verir ancak sayfa çerez gönderdiğinde tarayıcılar bunu kabul etmez (Access-Control-Allow-Credentials: true); bu nedenle kökeni belirtin. CORS'u yalnızca tarayıcılar uygular: curl ve istek çubuğu bunu yok sayar.
Görev
Kolay- Rotalardan önceki bir ara yazılım, her yanıta
Access-Control-Allow-Origin: https://board.example.comveAccess-Control-Allow-Credentials: trueekler. OPTIONS, GET, POST, PUT, PATCH, DELETE yöntemlerini listeleyenAccess-Control-Allow-MethodsveAccess-Control-Allow-Headers: Content-Typeile birlikte 204 yanıtı verir.
Tarayıcıyı canlandır: Origin: https://board.example.com başlığıyla OPTIONS /api/tasks/2 isteği gönder, ardından GET /api/tasks isteği gönder ve her yanıtın başlıklarını oku.
Kendin dene
import express from 'express';
import { sendError } from './errors.js';
import taskRoutes from './routes/tasks.js';
const app = express();
app.use(express.json());
app.use('/api/tasks', taskRoutes);
// Rotalardan gelen hatalar burada ele alınır. Geçerli JSON olmayan bir gövde,
// istemcinin hatasıdır (400); bunun dışındaki her hata bize aittir (500).
app.use((err, req, res, next) => {
if (err.type === 'entity.parse.failed') {
return sendError(res, 400, 'invalid_json', 'The body is not valid JSON');
}
console.error(err);
sendError(res, 500, 'server_error', 'Something went wrong');
});
app.listen(3000, () => {
console.log('Task tracker API on port 3000');
});
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.