My Simple C # HTTP Server: встроенные ссылки HTML не работают в Edge Browser - PullRequest
0 голосов
/ 30 августа 2018

У меня есть базовый файловый сервер http с простым API, написанным на WPF / C #, который предназначен для доступа пользователей локально или из их локальной сети. Он использует System.Net.HttpListener . Так что URL для загрузки jpg например:

http://localhost:8085/?getfile=d:/temp/Patern_test.jpg

отлично работает в любом браузере, включая Edge. Нет проблем. Но если я вставлю какую-либо ссылку на мой файловый сервер в файл HTML:

<html> 
  <body> 
    <object data="http://localhost:8085/?getfile=d:/temp/Patern_test.jpg">
    </object>    
   </body>
</html>

Тогда это работает только в Chrome и Firefox. Не Edge или IE 11. Я пробовал изображения, видео и теги iframe, и результат тот же. Я попытался заменить localhost реальным IP-адресом и вызвать его удаленно, те же результаты.

Однако, если я вставлю ссылку на другой сайт, а не на свой сервер, он прекрасно работает во всех браузерах:

<html> 
  <body> 
    <object data="https://upload.wikimedia.org/wikipedia/commons/d/db/Patern_test.jpg">
    </object>
  </body>
</html>

Так что, похоже, в моем сервере есть что-то, что Edge не нравится. Может кто-нибудь помочь мне понять, что это может быть? Вот сравнение заголовков:

Мой локальный HTTP-сервер (Edge это не нравится):

Request URL: http://localhost:8085/?getfile=d:/temp/Patern_test.jpg
Request Method: GET
Status Code: 200 OK
Remote Address: [::1]:8085
Referrer Policy: no-referrer-when-downgrade

Response Headers

HTTP/1.1 200 OK
Content-Length: 36623
Content-Type: image/jpg
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 30 Aug 2018 10:50:03 GMT


Request Headers

GET /?getfile=d:/temp/Patern_test.jpg HTTP/1.1
Host: localhost:8085
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
DNT: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

Сервер Википедии (Edge это нравится):

Request URL: https://upload.wikimedia.org/wikipedia/commons/d/db/Patern_test.jpg
Request Method: GET
Status Code: 304 
Remote Address: 198.35.26.112:443
Referrer Policy: no-referrer-when-downgrade

Response Headers

accept-ranges: bytes
access-control-allow-origin: *
access-control-expose-headers: Age, Date, Content-Length, Content-Range, X-Content-Duration, X-Cache, X-Varnish
age: 39865
content-type: image/jpeg
date: Thu, 30 Aug 2018 11:12:24 GMT
etag: 77d2a6bf840622331df62963174df72d
last-modified: Mon, 07 Oct 2013 13:46:55 GMT
status: 304
strict-transport-security: max-age=106384710; includeSubDomains; preload
timing-allow-origin: *
via: 1.1 varnish (Varnish/5.1), 1.1 varnish (Varnish/5.1), 1.1 varnish (Varnish/5.1), 1.1 varnish (Varnish/5.1)
x-analytics: https=1
x-cache: cp1090 hit/1, cp2022 pass, cp4021 hit/3, cp4021 miss
x-cache-status: hit-local
x-client-ip: 47.154.205.235
x-object-meta-sha1base36: 8ktqmjes2nx4xcpy5h6v7o1sh6yao09
x-timestamp: 1381153614.85319
x-trans-id: tx76f1f3c2f9384f9eaff9b-005b871d52
x-varnish: 207150442 204346683, 73416305, 38868466 25417638, 135979082


Request Headers

:authority: upload.wikimedia.org
:method: GET
:path: /wikipedia/commons/d/db/Patern_test.jpg
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cache-control: max-age=0
cookie: WMF-Last-Access-Global=26-Aug-2018; GeoIP=US:CA:Thousand_Oaks:34.21:-118.88:v4
dnt: 1
if-modified-since: Mon, 07 Oct 2013 13:46:55 GMT
if-none-match: 77d2a6bf840622331df62963174df72d
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36

Также я должен отметить, что мне очень нужно это для работы в Edge, потому что оно будет использоваться вместе с элементом управления WebView в приложении UWP.

UPDATE

Оказывается, эта проблема возникает только при двух условиях, ни одно из которых на самом деле не имеет значения для меня:

  1. Ссылка встроена в локальный html-файл, который я загружаю прямо в Edge.
  2. Если я использую UWP WebView.NavigateToString (stringOfHtml).

Если HTML-код подается напрямую с локального сервера с использованием WebView.Navigate (Uri), то встроенная ссылка работает нормально.

Это заставляет меня подозревать, что это какая-то мера безопасности низкого уровня, которая не позволяет динамически создаваемому html запускать вредоносный код. Просто мысль.

...