2016-04-09 18 views
0

IntelliJ IDEA'da statik bir web açısal projem var. Statik sayfa http://localhost:63342/Calculator/app/index.html'a dağıtılır.Tomcat veya Açısal COR'lere IntelliJ Statik Web Projesi

WebIdServer.prototype.getId = function(id) { 
    var _this = this; 
    var request = { 
     method: 'POST', 
     url: 'https://<url>, 
     headers: { 
      'Authorization':'Bearer QWE234J234JNSDFMNNKWENSN2M3', 
      'Content-Type':'application/json', 
     }, 
     data: { 
      id:id 
     } 
    }; 
    _this.$log.debug(request); 
    return _this.$http(request) 
     .success(function(data, status, headers, config){ 
      _this.$log.debug("Successfull request."); 
      /*called for result & error because 200 status*/ 
      _this.uid = data.id; 
      _this.$log.debug(_this.uid); 
     }) 
     .error(function(data, status, headers, config){ 
      _this.$log.debug("Something went wrong with the request."); 
      _this.$log.debug(data); 
      /*handle non 200 statuses*/ 
     }); 
}; 
: Burada
XMLHttpRequest cannot load <url>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. The response had HTTP status code 401. 

Yayınımın açısal kodu: Ben bir yanıt almak için bir sunucuya bazı veri göndermek için çalışıyorum ama ben göndermek çalıştığınızda bu hatayı alıyorum bir sorun haline çalıştırmak

Farklı bir bağlantı noktasında çalıştığım uygulamanın yerel bir URL'sinde denediğim için post'un çalıştığı bir gerçeği biliyorum. Belki şeyleri düzeltmek olacak bir erkek kedi sunucuya bu dağıtma merak ediyordum localhost'tan gönderemezsiniz çünkü

Benim soru vardır. Öyleyse, bu statik web projesini bir tomcat sunucusuna nasıl dağıtacaksınız? Eğer gerekli değilse, o zaman bu sorunu yaşamaya nasıl başlarım?

cevap

1

CORS ile ilgili birkaç şey var. Belirli bir çağrı yapamayacağınızı söyleyen bir web tarayıcısı. Bu yalnızca bir ön uç problemidir, bir sunucuda çalışan bir betik, konumdan bağımsız olarak herhangi bir api çağırabilir. Üç farklı seçenekler: config olmadan

; aynı bilgisayarlar

Sunucunuzda herhangi bir yapılandırma olmadan, ön uçunuzun AJAX isteklerinin hem aradığınız hizmetin hem etki alanı hem de bağlantı noktasıyla eşleşmesi gerekir. Sizin durumunuzda, http://localhost:63342 adresindeki açısal uygulamanız, http://localhost:63342 da barındırılan bir servisi çağırıyor olmalı ve sonra tatlısınız. CORS sorunu yok.

sunucu tarafında yapılandırma ile

; API başka bir yerde barındırılan ise farklı ana

, API ana bilgisayarı yapılandırmak için gerekecek. Çoğu sunucu, belirli bir alanın CORS bloğunu atlamasına izin vermek için erişim kontrollerini yapılandırmanıza izin verir. Aramaya çalıştığınız sunucuya erişiminiz varsa, kurup kuramayacağınıza bakın. enable CORS web sitesinin çoğu sunucu için örnekleri vardır. Genellikle bu oldukça basit.

bir proxy

Bu Tomcat fikir oluşturun. CORS, ön uçunuz başka bir servis çağırıyorsa sorun olur. Bir sunucu betiği beğendiği her şeyi arayabilir. Bu nedenle, istek üzerine iletilecek bir komut dosyasını barındırmak için Tomcat (veya Apache veya NGINX veya NodeJS ...) kullanabilirsiniz. Esasen, tüm yapılması gereken, API'nin yanıtına Access-Control-Allow-Origin: * eklemektir.

Tomcat kendim kullanılır, ancak burada yapmak için bazı yararlı bilgiler olabilecek bir blog post var hiç. enable CORS numaralı bilgi ile birleştirin ve herhangi bir yere herhangi bir yere yönlendirebilmeniz gerekir.

Bu işlem yaygındır. Sadece bir düğüm paketinin popülaritesine bakın: CORS anywhere, tomcat'in yaptığı gibi. Bu bir fikrin ne kadar iyi bir reddi olarak

bilgilerini ve jeton aktarabilirler bağlıdır. Gerçekten başkalarının API'sini kimlik bilgilerinizle körü körüne çağırabilecek bir hizmet oluşturmak istemezsiniz.

+0

Herhangi bir şekilde aradığım api'ye herhangi bir erişimim yok, bu nedenle ayarlarının herhangi birini değiştirerek sorusu yok.Ama aynı api çağıran bir tomcat sunucusuna konuştuğum bir başlangıç ​​önyükleme java uygulamasına sahibim ve aynı zamanda localhost'ta da çalışıyor. Tek şey, yayın 'postForObject' çağrısı kullanmasıdır. Neden orada çalışıyor, ancak açısal uygulamamda değil? – Richard

+0

Yay aranması sunucu tarafı değil mi? Sunucular her şeyi arayabilirler. CORS sizin * tarayıcınızın * isteğinizi yapamayacağınızı söylüyor. – Jorg

+0

Oh Görüyorum. Huh. Bu nedenle, tüm web uygulamalarının bu soruna neden olan yolu, isteklerini api olarak adlandırılan bir tomcat komut dosyasına proxy etmekle mi? Benim gibi adı geçen api üzerinde hiçbir kontrolü olmadığının farz edilmesi. – Richard