ERR_SSL_PROTOCOL_ERROR

Posted

技术标签:

【中文标题】ERR_SSL_PROTOCOL_ERROR【英文标题】: 【发布时间】:2021-09-15 21:55:12 【问题描述】:

url 自动将 http 转换为 https。地图和地理服务器层不可见。

var wmsSource = new ol.source.ImageWMS(
 url: 'http://117.252.14.233:8080/geoserver/Watersheds/wms',
 params:  'LAYERS': 'Watersheds:as_riv_15s', 'TILED': true ,
 serverType: 'geoserver',
 //crossOrigin: 'anonymous'
 transition: 0,
);

var wmsLayer = new ol.layer.Image(
source: wmsSource

);

var view = new ol.View(
center: [0, 0],
zoom: 1
);

var map = new ol.Map(
layers: [wmsLayer],
target: 'map',
view: view
);

map.on('singleclick', function (evt) 
document.getElementById('info').innerhtml = '';
var viewResolution = /** @type number */ (view.getResolution());
var url = wmsSource.getGetFeatureInfoUrl(
    evt.coordinate, viewResolution, 'EPSG:3857',
     'INFO_FORMAT': 'text/html' );
if (url) 
    document.getElementById('info').innerHTML =
        '<iframe seamless src="' + url + '"></iframe>';
   
 );

enter image description here

【问题讨论】:

【参考方案1】:

如果您的应用程序在 https 上运行,但您不控制 wms 服务器,您将被限制在不强制使用 https 的旧浏览器,例如 Internet Explorer,或者您必须在自己的服务器上使用代理。一个典型的例子是这里描述的 BGS Geology 服务https://www.bgs.ac.uk/technologies/web-map-services-wms/web-map-services-geology-625k/

为此,您需要一个简单的代理,例如

<?php 
 $method = $_SERVER['REQUEST_METHOD'];
 if($method == "GET")
   $url = 'http://ogc.bgs.ac.uk/cgi-bin/BGS_Bedrock_and_Superficial_Geology/wms?' . $_SERVER['QUERY_STRING'];
   $ch = curl_init($url);
   curl_setopt($ch, CURLOPT_HEADER, 0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   $result = curl_exec($ch);
   $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   curl_close($ch);
   if ($httpCode == 200) 
     echo $result;
   
 
?>

当代理脚本命名为 bgs625.php 时,OpenLayers 代码中的普通 wms url 可以替换为url: 'bgs625.php',

【讨论】:

以上是关于ERR_SSL_PROTOCOL_ERROR的主要内容,如果未能解决你的问题,请参考以下文章