OpenLayers haritalarını SSL ile kullanma


10

Barındırılan JavaScript'i kullanarak OpenLayers haritasını kullanıyorum:

<script src="http://openlayers.org/api/2.13.1/OpenLayers.js"></script> 

Ancak istemcim SSL yüklü ve harita sayfamı çalıştırmaya çalıştığımda şunu gösteriyor:

(2)[blocked] The page at https://domain.com/rwd/ ran insecure content 
   from http://openlayers.org/api/2.13.1/OpenLayers.js.

Bu yüzden https one'ı denedim ve openlayers'ın bir tane olmadığı ortaya çıktı

https://openlayers.org/api/2.13.1/OpenLayers.js

Sonra Openstreet js indirin ve istemci sunucusunda barındırılan, ancak sonra tüm stilleri ve ilgili görüntüler kaybolur. Haritayı göstermesine rağmen, temelde konsolda çok sayıda uyarı açılır ve korkarım ki bu oyun mağazasında reddedilebilir. Sunucuda da çalışan karma bir uygulama geliştiriyorum.

Şimdi uyarılar :

The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://b.tile.openstreetmap.org/14/8743/5624.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://b.tile.openstreetmap.org/14/8742/5624.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://c.tile.openstreetmap.org/14/8743/5623.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://b.tile.openstreetmap.org/14/8743/5625.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://c.tile.openstreetmap.org/14/8744/5624.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://a.tile.openstreetmap.org/14/8742/5623.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://c.tile.openstreetmap.org/14/8742/5625.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://a.tile.openstreetmap.org/14/8744/5623.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://a.tile.openstreetmap.org/14/8744/5625.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://a.tile.openstreetmap.org/14/8743/5622.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://c.tile.openstreetmap.org/14/8742/5622.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://c.tile.openstreetmap.org/14/8745/5624.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://b.tile.openstreetmap.org/14/8744/5622.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://b.tile.openstreetmap.org/14/8745/5623.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://c.tile.openstreetmap.org/14/8745/5625.png.
The page at https://domain.com/rwd/#/customer-plot/234 displayed insecure content from http://c.tile.openstreetmap.org/14/8745/5622.png.

GET https://domain.com/rwd/js/lib/theme/default/style.css 404 (Not Found) 
/*This the corresponding stylesheet that is loaded via Openstreet.js*/ 

SSL ile cdn ile denedim ve hala aynı sorun:

https://cdnjs.cloudflare.com/ajax/libs/openlayers/2.11/OpenLayers.js

Openstreet için GitHub deposunun tamamını indirdim, bunun resim ve CSS sorununu çözeceğini düşünüyorum.

https://github.com/openlayers/openlayers

Yukarıdakiler CSS sorunlarını çözerken , harita başka bir harici siteden görüntüler yüklenerek gösterilir tile.openstreet.com. Ben de openstreet js kazmak zorunda gibi görünüyor .. :( ..


Önemli : backbone.js kullanıyorum.

Not : OpenLayers 2.12 ve http temel kimlik doğrulama sorunlarından geçtim ve bu bana yardımcı olmadı. Sunucu yapılandırması üzerinde herhangi bir denetimim yok. Ben sadece web sitesi kurmak için gereken her şey iyi bir şey kurmak için bir klasöre erişim var, ama bu SSL zahmetli.

Google'ın bağlantı kurmasını önlemek için gerçek web sitesi adresi değiştirildi.


2
.JS dosyasını kendi sunucularınızda barındırmamanızın bir nedeni var mı? Bu, saf SSL'ye izin verir ve alanlar arası çakışmalardan kaçınır.
Haritacı

@Mapper: İlk önce bunu yaptım, ancak komut dosyası css, images vb. Gibi bazı harici kaynakları çağırıyor. 2. güncellememe bakın. Şimdi eksik olanı açıkladım .. Sanırım bir SSL eklemedikçe bu bir sorun olmaya devam edecek ..
Roy MJ

Tüm varlıklar vb. Göreli olarak bağlanır, bu nedenle IMHO'da sorun yoktur. Örneğin: on-i.de/map
Haritacı

@Mapper: Evet ben anladım .. ama ancak fayans bu şekilde gidip ile sıkışmış olan .. Benim uygulama kırmaz, ancak bir uyarı, aslında çok uyarı gösterir .. Ben bu bir açık tutmak aramak ve bunun olası bir çözüm olup olmadığını görmek için birkaç gün ...
Roy MJ

Bu js dosyalarını her zaman yerel olarak barındırmalısınız. Aksi takdirde, API değişikliği içeren bir OpenLayers güncellemesi sitenizi zorlayabilir.
scai

Yanıtlar:


11
  • OpenLayers.js: lib'i indirmenizi ve uygulama sunucunuza bağlamanızı öneririm. Bu şekilde URL'si ve içeriği üzerinde tam kontrole sahip olabilirsiniz.

  • "güvensiz içerik" uyarıları: bu da benim başıma geldi. OpenLayers 2.13.1'de, bir OpenLayers.Layer.OSM örneğini başlattığınızda, HTTP için varsayılan olarak yapılandırılır. Gönderen OpenLayers.Layer.OSM doc :

url {String} Döşeme kümesi URL şeması. Varsayılan olarak http: // [a | b | c] .tile.openstreetmap.org / $ {z} / $ {x} / $ {y} .png

Bunun yerine, protokolden bağımsız URL'ler içeren URL şeması dizisi için açık değerler kullandım

layer = new OpenLayers.Layer.OSM(
    "OpenStreetMap", 
    // Official OSM tileset as protocol-independent URLs
    [
        '//a.tile.openstreetmap.org/${z}/${x}/${y}.png',
        '//b.tile.openstreetmap.org/${z}/${x}/${y}.png',
        '//c.tile.openstreetmap.org/${z}/${x}/${y}.png'
    ], 
    null);
  • protokolden bağımsız URL'ler: uygulamanızın hem HTTP hem de HTTPS'de çalışmasını istiyorsanız, protokolden bağımsız URL'ler kullanın : http://server.com/resource yerine //server.com/resource kullanın : tarayıcınız şu anda üzerinde çalıştığı protokol.

Herkesin merak etmesi durumunda: Bunu OpenLayers.js kaynak kodunda değiştirirsiniz. Zaten küçülmüş olsa bile bulmak ve değiştirmek kolaydır.
trainoasis

3

Resmi OSM döşeme sunucuları SSL üzerinden erişim sağlamaz. Bunlar ortak kamu mallarıdır ve yoğun trafiği olan uygulamalar tarafından kullanılmayacaktır . Bunları yine de kullanmak istiyorsanız, tarayıcılarda "bazı içerik şifrelenmemiş" mesajını okumanız gerekir.

Tam şifrelemeye sahip olmak istiyorsanız, ticari harita CDN'lerini SSL ile ödemeniz gerekir:


3
Bu bilgiler görünüşte eskidir. Openstreetmap artık https'yi destekliyor; openstreetmap.org adresini ziyaret edin . Ayrıca bkz github.com/openstreetmap/openstreetmap-website/issues/1033
Antonis Christofides

1

Formları geçersiz kılmanız gerekir Widget. Misal:

from django.contrib import admin
from django.contrib.gis.db import models
from django.contrib.gis.forms.widgets import BaseGeometryWidget

class CustomOpenLayersWidget(BaseGeometryWidget):
    template_name = 'gis/openlayers.html'

    def __init__(self, attrs=None):
        super(CustomOpenLayersWidget, self).__init__(attrs)

    class Media:
        js = (
            'https://cdnjs.cloudflare.com/ajax/libs/openlayers/2.13.1/OpenLayers.js',
            'gis/js/OLMapWidget.js',
        )


class CustomModelAdmin(admin.ModelAdmin):
    """Need to change default URL of OpenLayers"""
    formfield_overrides = {
        models.PointField: {"widget": CustomOpenLayersWidget},
        models.PointField: {"widget": CustomOpenLayersWidget},
        models.PolygonField: {"widget": CustomOpenLayersWidget},
        models.LineStringField: {"widget": CustomOpenLayersWidget},

        # Adding other models Fields if need
    }

ve yönetici sınıfını değiştirin

@admin.register(Position)
class PositionAdmin(CustomModelAdmin):
    pass

Bir model örneği

class Position(models.Model):
    point = models.PointField(blank=False)

Kod geçersiz kılma alanı, yeni bir ortam için widget oluşturur. Bu http://openlayers.org/api/2.13.1/OpenLayers.js, ortamın http içeriğini kaldırır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.