Подтвердить что ты не робот

Как почтальон отправляет запросы? ajax, такая же политика происхождения

Я нашел это очень полезное расширение chrome, называемое почтальоном, это очень полезное расширение, особенно когда вы занимаетесь программированием приложений RESTful.

Одна вещь, с которой я смущен, заключается в том, как этот плагин/расширение может успешно отправлять запрос POST в разные домены?

Я пробовал голосовать в опросе, используя Postman. Voting using Postman

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

Как это возможно?

Вот мой код с помощью jquery. Я использовал это на своем компьютере, хотя, localhost.

init: function() {
    $.ajax({
        url: 'http://domain.com/vote.php',
        type:'POST',
        dataType: 'html',
        data: {
            id: '1'
        },
        success: function(data) {
        if ( data == 'voted' ) {
            $('.set-result').html( 'you already voted. try again after 24 hours' );
        } else {
            $('.set-result').html( 'successfully voted' );
        }
    }
    });
},
4b9b3361

Ответ 1

Приложения с Chrome-пакетом могут иметь перекрестные права доступа. Когда вы устанавливаете Postman, вам предлагается, чтобы это приложение получило доступ к любому домену.

Поместив */* в permissions в ваш файл манифеста, вы можете сделать это.

Подробнее здесь: https://developer.chrome.com/extensions/xhr.html

Ответ 2

Похоже, сайт, на котором размещен опрос ( "vote.php" script), должен иметь заголовок "Access-Control-Allow-Origin", разрешающий размещение из списка сайтов (или всех сайтов).

Значение * для заголовка позволит отправлять сообщения с любого веб-сайта:

Access-Control-Allow-Origin: *

то есть. Вы можете поставить следующее в верхней части vote.php

header('Access-Control-Allow-Origin: *');

У расширений и приложений Chrome не распространяются те же ограничения безопасности, что и на обычных веб-страницах.

Дополнительные советы по отладке:

Если вы пытаетесь получить доступ к удаленным службам с веб-страниц, которые вы открыли в своей локальной файловой системе в своем браузере, вы можете обнаружить, что ваш браузер применяет к ним разные правила безопасности, чем к файлам, которые подаются с веб-службы.

например. Если вы открываете локальные файлы из таких мест, как C:\MyDocuments\weboot\index.htm (Windows) или \Users\joe\Sites\index.html (Mac) в вашем браузере, ваш запрос AJAX может не работать, даже если заголовок указан в большинстве браузеров.

Apple Safari практически не использует ограничений на перекрестные домены для файлов, открытых локально, но Firefox гораздо более строг в отношении того, что он разрешает, с Chrome где-то посередине. Запуск веб-сервера локально (например, на http://localhost/) является хорошей идеей, чтобы избежать неожиданного поведения.

Кроме того, для других библиотек, которые предоставляют функции для обработки запросов Ajax (например, AngularJS), по умолчанию могут быть установлены другие заголовки на сервере. Обычно вы можете увидеть причину сбоя в консоли отладки браузера.

Ответ 3

Вы можете добавить следующий заголовок для отправки запроса Ajax в почтальоне.

Content-Type      application/json

X-Requested-With  XMLHttpRequest

Скриншот

введите описание изображения здесь

Кредит Orion