Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.09.2020, 11:14
Аспирант
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 82

Очень нубовский вопрос, как послать данные на сервер и получить от него ответ?
Добрый день,

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

Сейчас имею html-css-js морду, и сервер на убунте. Хочу из морды послать команды (сотни байт) и получить в ответ сгенерированный html со встроенными небольшими картинками. Кроме самих картинок html может весить много, ибо содержит кучу данных для отрисовки 2Д графики. Пожать бы его на лету тоже бы не мешало.

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

На будущее я хочу, чтобы то, что у меня сейчас на сервере имеется, потом плавно мигрировало к юзеру на его комп хотя бы потому, что мой сервер не будет справляться с юзер запросами (но не сейчас).

Написать программу на С, которая обрабатывала бы команды (из stdin например) и выплевывала бы html могу, но не понимаю, как мне к нему подцепить картинки. Их может быть около сотни, каждая примерно по 1-100кб, желательно их как-то объединить-запаковать, чтобы трафик не поднимать.

Скажите, пожалуйста, на какие правильные ключевые слова мне гуглить, чтобы понять как такое сейчас делается, вроде cgi-bin совсем не безопасно, или?

Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 21.09.2020, 11:53
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,452

Сообщение от Was-Ja
как мне к нему подцепить картинки. Их может быть около сотни, каждая примерно по 1-100кб, желательно их как-то объединить-запаковать, чтобы трафик не поднимать
вы передаете только ссылки на картинки
броузер клиента их сам скачивает
<img src="https://helpx.adobe.com/content/dam/help/en/stock/how-to/visual-reverse-image-search/jcr_content/main-pars/image/visual-reverse-image-search-v2_intro.jpg" alt="альтернативный текст">

используйте http2 протоокол для получения профита от асинхронной загрузки ресурсов
в спрайты упаковывают обычно неюодьште изображения до 5 кб
Ответить с цитированием
  #3 (permalink)  
Старый 21.09.2020, 13:35
Аспирант
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 82

Спасибо большое, за совет!

С картинками понял, похоже большие проще положить в специальную директорию, они для всех юзеров одинаковые, а маленькие буду в спрайты упаковывать (понял где гуглить, надеюсь, осилю).

Сейчас пробовал сделать запрос на json, но упорно мой сервер не хочет видеть запрос.

От себя я пробую стартовать что-то вроде (нашел пример в интернете):
<!DOCTYPE html>
<html>
<head>
  <title>
    Отправляем JSON-данные на сервер
  </title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body style="text-align:center;" id="body">
  <!-- заголовок -->
  <h1> Простая форма для проверки работы JSON </h1>
  <!-- делаем форму с полями ввода -->
  <p>
    <input type="text" id="name" placeholder="Ваше имя">
    <input type="text" id="lastname" placeholder="и фамилия">
    <!-- по нажатию на эту кнопку данные уйдут на сервер -->
    <button onclick="sendJSON()">Проверить JSON</button>
    <!-- а вот тут они появятся снова, но уже после обработки сервером -->
  <p class="result" style="color:blue"></p>
  </p>
<script>
  // эта функция сработает при нажатии на кнопку
  function sendJSON() {
    // с помощью jQuery обращаемся к элементам на странице по их именам
    let name = document.querySelector('#name');
    let lastname = document.querySelector('#lastname');
    // а вот сюда мы поместим ответ от сервера
    let result = document.querySelector('.result');
    // создаём новый экземпляр запроса XHR
    let xhr = new XMLHttpRequest();
    // адрес, куда мы отправим нашу JSON-строку
    let url = "https://www.elegant-nmr.com/json/json.out";
    // открываем соединение
    xhr.open("POST", url, true);
    // устанавливаем заголовок — выбираем тип контента, который отправится на сервер, в нашем случае мы явно пишем, что это JSON
    xhr.setRequestHeader("Content-Type", "application/json");
    // когда придёт ответ на наше обращение к серверу, мы его обработаем здесь
    xhr.onreadystatechange = function () {
      // если запрос принят и сервер ответил, что всё в порядке
      if (xhr.readyState === 4 && xhr.status === 200) {
        // выводим то, что ответил нам сервер — так мы убедимся, что данные он получил правильно
        result.innerHTML = this.responseText;
      }
    };
    // преобразуем наши данные JSON в строку
    var data = JSON.stringify({ "name": name.value, "lastname": lastname.value });
    // когда всё готово, отправляем JSON на сервер
    xhr.send(data);
  }
</script>
</body>
</html>


на сайте у меня nginx, в его установках я воткнул

add_header "Access-Control-Allow-Origin" "*";
add_header "Access-Control-Allow-Headers" "Origin, X-Requested-With, Content-Type, Accept, Authorization";
add_header "Access-Control-Request-Methods" "GET, POST, OPTIONS";

но упорно оно пишет де

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at ... (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

Скажите, пожалуйста, что я делаю не так?

Спасибо!

Последний раз редактировалось Was-Ja, 21.09.2020 в 14:11.
Ответить с цитированием
  #4 (permalink)  
Старый 21.09.2020, 13:51
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,452

https://www.elegant-nmr.com/json/json.php
пока интерпритатор php не обрабатывает файл
смотрите настройки php в nginx
Ответить с цитированием
  #5 (permalink)  
Старый 21.09.2020, 14:14
Аспирант
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 82

Спасибо большое за ответ!

Поменял php на выполнялку, скомпилленую из С (что и планировал в дальнейшем использовать), но, похоже не в php, а в общих настройках nginx - все-таки я тут что-то делаю не так. Честно говоря, перепробовал уже кучу вариантов, в том числе с https://enable-cors.org/server_nginx.html но пока ничего не помогло

Последний раз редактировалось Was-Ja, 21.09.2020 в 14:24.
Ответить с цитированием
  #6 (permalink)  
Старый 21.09.2020, 18:17
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,101

А страница грузится откуда? С этого же сервера? По https?
Ответить с цитированием
  #7 (permalink)  
Старый 21.09.2020, 19:26
Аспирант
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 82

Спасибо за содействие!

Всяко пробовал, и по https и http с того же сервера ( https://www.elegant-nmr.com/json/ttt.html ) и локально firefox из командной строки пробовал - эффект один и тот же - в логах всегда 405 ошибка.
Ответить с цитированием
  #8 (permalink)  
Старый 21.09.2020, 19:46
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,101

405 Method Not Allowed — указанный клиентом метод нельзя применить к текущему ресурсу. В ответе сервер должен указать доступные методы в заголовке Allow, разделив их запятой. Эту ошибку сервер должен возвращать, если метод ему известен, но он не применим именно к указанному в запросе ресурсу,

А что такое json.out? CGI скрипт? Тогда нужно что то в настройках сервера менять. Может он не понимает, что это скрипт и думает, что это простой файл, который нужно передать. Но не запросом POST.
Попробуйте GET ему послать.
Ответить с цитированием
  #9 (permalink)  
Старый 21.09.2020, 19:57
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,101

По запросу
https://www.elegant-nmr.com/json/json.out
в адресной сроке браузера (Это GET) файл просто скачивается (судя по всему программа на С).
Если бы в настройках сервера было указано, что это исполнимый скрипт, он бы стал исполняться на сервере. Так по крайней мере в Аппаче. nginx я не знаю.
Ответить с цитированием
  #10 (permalink)  
Старый 21.09.2020, 20:17
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,101

Странная проблема с этим nginx.
Похоже он не может запускать CGI скрипты
https://coderoad.ru/11667489/%D0%9A%...BD%D0%B0-Nginx
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить данные из дочерних компонентов angularnewbie Angular.js 2 03.06.2017 22:53
Как правильно получить данные из "специфического" jsonp-файла? Zaxap Общие вопросы Javascript 4 02.11.2016 14:50
Как получить данные из iframe в буфер обмена? abo06 Events/DOM/Window 2 20.07.2015 00:17
Как подключить данные с PHP по средствам JS на удаленный сервер. Nyam Элементы интерфейса 13 11.04.2014 16:14
Как отправить данные в .php файл на другой сервер ? lamer AJAX и COMET 2 04.04.2012 22:55