Kaynaklar Arası Kaynak Paylaşımı (CORS) nedir – Java Jersey Web Sunucunuza nasıl eklenir?

Yayınlanan: 2014-07-19

Crunchify'dan Kaynaklar Arası Kaynak Paylaşımı (CORS) Eğitimi

client-server iletişimi sırasında bu hatayı nasıl düzeltebilirim? Sunucu, verileri JSON veya XML biçiminde gönderir ve istemci, istisnanın altına atar.

Normal web sayfaları, uzak sunuculardan veri göndermek ve almak için XMLHttpRequest nesnesini kullanabilir, ancak bunlar aynı kaynak ilkesiyle sınırlıdır. Uzantılar çok sınırlı değil. Bir uzantı, önce çapraz kaynak izinleri istediği sürece, kaynağının dışındaki uzak sunucularla konuşabilir.

Ayrıca, aşağıdaki sorularınız varsa, doğru yerdesiniz:

  1. Kaynaklar Arası Kaynak Paylaşımını Anlama (CORS Filtreleri)
  2. Kaynaklar Arası Kaynak Paylaşımını kullanabilir miyim
  3. Kaynaklar Arası Kaynak Paylaşımı Nasıl Etkinleştirilir
  4. Kaynaklar Arası Kaynak Paylaşımı ile Etki Alanları Arası Ajax Nedir?
  5. HTTP erişim denetimi (CORS) nedir?

CORS (Çapraz Kökenli Kaynak Paylaşımı), web tarayıcılarında çapraz kaynaklı istekleri etkinleştirmek için W3C tarafından desteklenen bir mekanizmadır. CORS'un çalışması için hem tarayıcıdan hem de sunucudan destek gerekir. Bu, Apache Tomcat ve diğer Gömülü Web Sunucuları gibi web kapsayıcıları için sunucu tarafı CORS'nin Java Jersey Web Sunucusu filtre uygulamasıdır.

Crunchify CORSFilter Jersey Sunucu Örneği

Aşama 1:

Bir yanıt, kaynağın içeriğine erişime izin vermek için, değer olarak isteğin nereden kaynaklandığı ile birlikte bir Erişim-Kontrol-İzin Ver-Origin başlığı içerebilir. Kullanıcı aracısı, isteğin kaynaklandığı yerin değeri ve kaynağının eşleştiğini doğrular.

Adım 2:

Kullanıcı aracıları, bir ön kontrol isteği aracılığıyla, bir çapraz kaynak kaynağın, basit olmayan bir yöntem kullanarak belirli bir kaynaktan gelen istekleri kabul etmeye hazır olup olmadığını keşfedebilir. Bu, kullanıcı aracısı tarafından tekrar doğrulanır.

Aşama 3:

Sunucu tarafı uygulamaların, bir HTTP isteğinin Origin başlığı aracılığıyla kullanıcı aracısı tarafından bir çapraz kaynak isteği olarak kabul edildiğini keşfetmesi sağlanır. Bu uzantı, sunucu tarafı uygulamaların hizmet vermeye istekli oldukları çapraz kaynak istekleri üzerinde sınırlamaları (örneğin hiçbir şey döndürmeme) zorlamasını sağlar.

Şimdi Örneklerle başlayalım.

Örnek-1: Java Jersey Web Sunucusu

Birkaç hafta önce Java Uygulama Başlatma sırasında Gömülü HTTP Jersey sunucusunun Nasıl Başlatılacağı hakkında bir makale yazdım. Bu gönderi, aynı Jersey Sunucusuna CORS Filtresinin nasıl ekleneceğine ilişkin adımları kapsayacaktır.

ContainerResponseFilter'ı genişletmemiz gerekiyor. Kapsayıcı yanıt filtreleri tarafından uygulanan arabirim. Varsayılan olarak, yani filtre uygulama sınıfına ad bağlama uygulanmazsa, filtre örneği herhangi bir giden yanıta genel olarak uygulanır.

Bunu düzeltmek için, sunucu yanıtına aşağıdaki 4 başlığı eklemeyi deneyelim:

  1. Erişim-Kontrol-İzin Ver-Origin
  2. Erişim-Kontrol-İzin Ver-Yöntemleri
  3. Erişim-Kontrol-Max-Yaş
  4. Erişim-Kontrol-İzin-Üstbilgileri

CORS Filtre Kodu:

JerseyEmbeddedHTTPServerCrunchify.java'da önceki öğreticiden değişiklik.

Sadece createHttpServer() içine aşağıdaki satırı ekleyin ve sunucuyu yeniden başlatın.

Sonuç:

http://localhost:8085/api

CORS Filtreli Yanıt Başlığını Crunchify

İşte bir Başlık ayrıntıları.

CORS Filtresi Olmadan Yanıt Başlığını Crunchify

Örnek-2: Apache HTTP Sunucusu

Başlığı göstermek için, <Directory>, <Location> ve <Files> bölümlerine veya bir .htaccess dosyasına aşağıdaki satırı ekleyebilirsiniz.

Örnek-3: .NET sunucusu bunu web.config içinde aşağıdaki gibi yapılandırabilir

Örnek-4: İskele için (7 ve üzeri)

JAR jetty-servlet'lerini WEB-INF/lib'e dahil edin ve bunu WEB-INF/web.xml'nizle birleştirin

Örnek-5: Apache Tomcat Sunucusu (v 7.0.41 +)

Örnek-6: PHP'de

Bu konuda başka sorunuz olursa lütfen bana bildirin. Tüm Java Eğitimlerinin listesi burada bulunabilir.