Перекрестный сайт XMLHttpRequest

Во-первых, вы можете упростить файл, удалив ненужное сетевое объявление и отображение порта. docker-compose создает пользовательскую мостовую сеть по умолчанию для вас и связывает все сервисы с ней - нет необходимости делать это вручную. Также внутри сети все порты автоматически подвергаются сервисам.

Во-вторых, удалить container_name. Вы путаете себя. Службы получают имена своих хостов, равные именам служб по умолчанию.

version: '3.5'

services:
   web_php:
     image: php:7.2.2-apache
     volumes:
      - ./php/:/var/www/html/

   web_dotnet:
     build: .

Теперь, после того как все ненужные вещи убраны, просто позвоните web_php:80 из web_dotnet.

После этого, если вы хотите получить доступ к web_dotnet ** извне ** docker-compose, добавьте директиву ports, чтобы сделать ее видимой с хоста.

12
задан Vegard Larsen 27 December 2008 в 14:32
поделиться

3 ответа

some.js сможет использовать XMLHttpRequest для регистрации данных на abc.com? Другими словами, abc.com слепо доверяют, потому что мы загрузили JavaScript оттуда?

Нет, потому что сценарий загружается на отдельном домене, он не будет иметь доступа...

При доверии источнику данных затем, возможно, JSONP был бы более оптимальным вариантом. JSONP включает динамично добавляющие новые элементы СЦЕНАРИЯ к странице с набором SRC к другому домену с набором обратного вызова в качестве параметра в строке запроса. Например:

function getJSON(URL,success){
    var ud = 'json'+(Math.random()*100).toString().replace(/\./g,'');
    window[ud]= function(o){
        success&&success(o);
    };
    document.getElementsByTagName('body')[0].appendChild((function(){
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = URL.replace('callback=?','callback='+ud);
        return s;
    })());
}

getJSON('http://YOUR-DOMAIN.com/script.php?dataName=john&dataAge=99&callback=?',function(data){
    var success = data.flag === 'successful';
    if(success) {
        alert('The POST to abc.com WORKED SUCCESSFULLY');
    }
});

Так, необходимо будет разместить собственный сценарий, который мог использовать PHP/CURL для регистрации на домен abc.com и затем произведет ответ в формате JSONP:

Я не являюсь слишком великим с PHP, но возможно чем-то вроде этого:

<?php
    /* Grab the variables */
    $postURL = $_GET['posturl'];
    $postData['name'] = $_GET['dataName'];
    $postData['age'] = $_GET['dataAge'];

    /* Here, POST to abc.com */
    /* MORE INFO: http://uk3.php.net/curl & http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html */

    /* Fake data (just for this example:) */
    $postResponse = 'blahblahblah';
    $postSuccess = TRUE;

    /* Once you've done that, you can output a JSONP response */
    /* Remember JSON format == 'JavaScript Object Notation' - e.g. {'foo':{'bar':'foo'}} */
    echo $_GET['callback'] . '({';
    echo "'flag':' . $postSuccess . ',";
    echo "'response':' . $postResponse . '})";

?>

Так, Ваш сервер, которым Вы управляете, будет действовать как носитель между клиентом и abc.com, Вы передадите ответ обратно клиенту в формате JSON, таким образом, он сможет пониматься и использоваться JavaScript...

18
ответ дан 2 December 2019 в 07:22
поделиться

Самая легкая опция для Вас состояла бы в том, чтобы проксировать вызов через сервер, загружающий JavaScript. Таким образом, some.js позвонил бы хостинг-серверу, и тот сервер передаст запрос на abc.com.

конечно, если это не опция, потому что Вы не управляете hoster, существуют некоторые опции, но это кажется испачканным в перекрестных трудностях с браузером: http://ajaxian.com/archives/how-to-make-xmlhttprequest-calls-to-another-server-in-your-domain

3
ответ дан 2 December 2019 в 07:22
поделиться

Вы можете использовать easyXSS . Это библиотека, которая позволяет передавать данные и вызывать методы через границу домена. Это довольно просто, и вы должны уметь им пользоваться. На сайте code.google.com

есть множество примеров.
0
ответ дан 2 December 2019 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: