CORS
Coddy'nin Node.js Journey'sinin REST API'leri bölümünün bir parçası. Ders 20 / 25.
Çapraz kaynaklı bir PUT, PATCH veya DELETE isteği ya da JSON Content-Type içeren bir istek, genellikle tarayıcının önce izin istemesine neden olur. Bu OPTIONS isteği bir ön kontrol isteğidir. Yanıt; kaynağa, yönteme ve istek başlıklarına izin vermelidir.
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://shop.example.com
Access-Control-Allow-Methods: GET, POST, PATCH, OPTIONS
Access-Control-Allow-Headers: Content-TypeÖn kontrol isteği de dâhil olmak üzere her yanıta Access-Control-Allow-Origin ekleyin. İzin verilen tek bir kaynak varsa, bu sabit değeri her yanıtta gönderebilirsiniz: tarayıcı bunu sayfanın kaynağıyla karşılaştırır. Yöntemler veya başlıklar için verilen değerlerin her biri virgülle ayrılmış tek bir dizedir.
OPTIONS için 204 gönderin ve yanıtı sonlandırın. Diğer yöntemlerde kaynak başlığını koruyun ve next() çağrısını yapın. Hata yanıtlarının da izin alması için bu ara yazılımı, express.json() ve rotalardan önce, ilk sıraya yerleştirin. İstek çubuğu başlıkları inceleyebilir, ancak CORS'u yalnızca tarayıcılar uygular.
Görev
KolayBu adım, Pagination bölümündeki proje dosyaların yerine, kurs için hazırlanmış görev takip API projesini açar ( routes/tasks.js dâhil). Önceki çalışmaların kendi dersinde kalır. server.js dosyasını düzenlemeden önce sağlanan dosyaları oku. Bu kopyada görev CRUD rotaları, doğrulama, sayfalama, filtreler ve sıralama bulunur.
server.js içinde, express.json() ve rotalardan önce https://board.example.com adresine izin veren bir ara katman yazılımı ekle. Access-Control-Allow-Origin değerini tam olarak bu kaynak adresi olarak, Access-Control-Allow-Methods değerini GET, POST, PUT, PATCH, DELETE, OPTIONS olarak, Access-Control-Allow-Headers değerini de Content-Type olarak ayarla. OPTIONS isteğine 204 ile yanıt ver ve yanıtı sonlandır. Diğer yöntemler için next çağır.
Dene: OPTIONS /api/tasks/2 isteği gönder. 204 yanıtını ve üç izin başlığını görmelisin. GET /api/tasks isteği gönder: görev listesini ve kaynak başlığını döndürmeye devam eder. POST {"title":"Order new chairs"} isteğini /api/tasks adresine gönderdiğinde 201 durum koduyla bir görev oluşturmaya devam eder.
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);
// Route'lardan gelen hatalar burada ele alınır. Geçerli JSON olmayan bir gövde
// istemcinin hatasıdır (400); diğer tüm hatalar bizim sorumluluğumuzdadır (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.
REST API'leri bölümündeki tüm dersler
1Kaynaklar ve Fiiller
Kaynaklar ve URL'lerPOST ile Oluşturma4Tarayıcılar, Sürümler ve Yapılandırma
Origin NedirBaşka Bir Origin'e İzin VermeCORSAPI'yi Çağıran Bir SayfaKendi başına pratik yap: Express playground