Wie Postbote Anfragen sendet? Ajax, gleiche Ursprungsrichtlinie

Lesezeit: 4 Minuten

Wie Postbote Anfragen sendet Ajax gleiche Ursprungsrichtlinie
Joey Hipolito

Ich habe diese sehr nützliche Chrome-Erweiterung namens Postman gefunden. Dies ist eine sehr nützliche Erweiterung, insbesondere wenn Sie sich mit der Programmierung von RESTful-Anwendungen beschäftigen.

Eine Sache, die mich verwirrt, ist, wie dieses Plugin / diese Erweiterung POST-Anforderungen erfolgreich an verschiedene Domains senden kann?

Ich habe versucht, in einer Umfrage mit Postman wie dieser abzustimmen.

Abstimmung mit Postman

Nach dem Absenden wurde die Stimme tatsächlich gezählt, aber als ich versuchte, dies mit AJAX und JavaScript zu tun, schlägt es aufgrund der unterschiedlichen Ursprungsrichtlinie der Browser fehl.

Wie ist das überhaupt möglich?

Hier ist mein Code mit jQuery. Ich habe das jedoch in meinem Computer verwendet, localhost.

init: function() {
    $.ajax({
        url: 'http://example.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' );
        }
    }
    });
},

  • Es scheint, als ob die Erweiterung funktioniert, indem sie auf getpostman.com und nicht auf Ihre Zieldomäne (mit CORS) postet, der Server von getpostman.com stellt dann die Anfrage und gibt eine Antwort zurück. github.com/a85/POSTMan-Chrome-Extension/blob/master/chrome/js/…

    – Kevin B

    15. April 2013 um 17:47 Uhr


  • Das scheint legitim zu sein, ich werde dann ihren Code durchlesen, ich könnte versuchen, die gleiche Lösung zu finden.

    – Joey Hipolito

    15. April 2013 um 17:51 Uhr

  • Beachten Sie jedoch, dass Sie zur Implementierung von CORS in IE jQuery ändern müssen, indem Sie einen alternativen Transport einschließen. IE7 unterstützt CORS überhaupt nicht.

    – Kevin B

    15. April 2013 um 17:52 Uhr

  • kein problem damit..

    – Joey Hipolito

    15. April 2013 um 18:43 Uhr

  • @KevinB, stimmt nicht. Es funktioniert, als ich einen lokalen Server getestet habe, auf den offensichtlich nicht vom Server von gepostman.com zugegriffen werden konnte.

    – Schrittmacher

    11. Dezember 2014 um 8:46 Uhr

In Chrome verpackte Apps können domänenübergreifende Berechtigungen haben. Wenn Sie Postman installieren, werden Sie darauf hingewiesen, dass diese App auf jede Domäne zugreifen wird.

Durch Platzierung */* in permissions Abschnitt Ihrer Manifestdatei können Sie dies tun.

Lesen Sie hier mehr:
https://developer.chrome.com/extensions/xhr.html

  • Wie kann das sein? Muss die Website selbst nicht auch zulassen CORS?

    – CodyBugstein

    8. Dezember 2014 um 20:22 Uhr

  • @Imray Es sind keine CORS-Header erforderlich, genau wie bei einem Serverprogramm oder curl.

    – Mohsen

    9. Dezember 2014 um 6:05 Uhr

  • Eine Chrome-App unterliegt also grundsätzlich nicht der Cross-Origin-Sicherheit? Eine Chrome-App kann also auf meine Bank-Cookies oder mein Facebook-Login zugreifen?

    – CodyBugstein

    9. Dezember 2014 um 11:46 Uhr

  • @Imray Chrome-Apps kann Cross Origin umgehen. Chrome teilt Ihre regulären Browsersitzungen mit dieser Berechtigung nicht. Aber wenn Sie eine Chrome-Erweiterung installieren, die Inhaltsskripte ausführen kann, stellen Sie sicher, dass sie auf Ihre Bank-Cookies zugreifen können!

    – Mohsen

    10. Dezember 2014 um 4:26 Uhr

  • @Imray, wenn Sie auf “Allow This” und “Allow That” klicken, kann die App natürlich alles tun, was sie will, unter den Privilegien, die Sie ihr erlaubt haben.

    – Schrittmacher

    11. Dezember 2014 um 8:48 Uhr

Sie können den folgenden Header zu einer gesendeten Ajax-Anfrage in Postman hinzufügen.

Content-Type      application/json

X-Requested-With  XMLHttpRequest

Bildschirmfoto

Geben Sie hier die Bildbeschreibung ein

Kredit zu Orion

Wie Postbote Anfragen sendet Ajax gleiche Ursprungsrichtlinie
Iain Collins

Klingt so, als ob die Website, die die Umfrage hostet (das Skript “vote.php”), einen “Access-Control-Allow-Origin”-Header haben muss, um das Posten von einer Liste von Websites (oder allen Websites) zuzulassen.

Ein Wert von * für den Header ermöglicht das Posten von jeder Website:

Access-Control-Allow-Origin: *

dh Sie könnten Folgendes an den Anfang von vote.php setzen

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

Chrome-Erweiterungen und -Apps unterliegen nicht denselben Sicherheitsbeschränkungen wie normale Webseiten.

Zusätzliche Debugging-Tipps:

Wenn Sie versuchen, von Webseiten, die Sie in Ihrem lokalen Dateisystem in Ihrem Browser geöffnet haben, auf Remotedienste zuzugreifen, stellen Sie möglicherweise fest, dass Ihr Browser darauf andere Sicherheitsregeln anwendet als auf Dateien, die von einem Webdienst bereitgestellt werden.

zB Wenn Sie lokale Dateien von einem Standort wie öffnen C:\MyDocuments\weboot\index.htm (Windows) bzw \Users\joe\Sites\index.html (Mac) in Ihrem Browser funktioniert Ihre AJAX-Anfrage möglicherweise nicht, selbst wenn der Header in den meisten Browsern angegeben ist.

Apples Safari wendet fast keine domänenübergreifenden Beschränkungen auf lokal geöffnete Dateien an, aber Firefox ist viel strenger in Bezug auf das, was erlaubt ist, wobei Chrome irgendwo in der Mitte liegt. Lokalen Betrieb eines Webservers (z. B. auf http://localhost/) ist eine gute Idee, um unerwartetes Verhalten zu vermeiden.

Darüber hinaus erfordern andere Bibliotheken, die Funktionen zur Verarbeitung von Ajax-Anforderungen bereitstellen (z. B. AngularJS), möglicherweise, dass standardmäßig andere Header auf dem Server festgelegt werden. Sie können die Fehlerursache normalerweise in einer Browser-Debug-Konsole sehen.

2021 Okt

Bei meiner Untersuchung habe ich herausgefunden, dass Sie ein zusätzliches Feld im Header Ihrer Anfrage benötigen. Fügen Sie also einfach den folgenden Schlüsselwert in den Header ein:

Schlüssel: X-Requested-With | Wert: XMLHttpRequest

842750cookie-checkWie Postbote Anfragen sendet? Ajax, gleiche Ursprungsrichtlinie

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy