hoe Postman verzoeken verzendt? ajax, zelfde oorsprongsbeleid

Ik heb deze zeer nuttige Chrome-extensie gevonden, Postman genaamd. Dit is een zeer nuttige extensie, vooral als je bezig bent met het programmeren van RESTful-applicaties.

Eén ding waar ik in de war over ben, is hoe deze plug-in/extensie in staat is om POST-verzoeken met succes op verschillende domeinen te verzenden?

Ik heb op deze manier geprobeerd in een poll te stemmen met Postman.

Nadat ik dat had ingediend, werd de stem daadwerkelijk geteld, maar toen ik dat probeerde te doen met AJAX en JavaScript, mislukte het vanwege een ander oorsprongsbeleid van browsers.

Hoe is dat mogelijk?

Hier is mijn code met jQuery. Ik gebruikte dat echter op mijn computer, 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' );
        }
    }
    });
},

Antwoord 1, autoriteit 100%

Ingepakte Chrome-apps kunnen domeinoverstijgende machtigingen hebben. Wanneer je Postman installeert, krijg je de melding dat deze app toegang heeft tot elk domein.

Door */*in het gedeelte permissionsvan uw manifestbestand te plaatsen, kunt u dit doen.

Lees hier meer:
https://developer.chrome.com/extensions/xhr.html


Antwoord 2, autoriteit 50%

U kunt de volgende koptekst toevoegen aan het verzonden Ajax-verzoek in de postbode.

Content-Type      application/json
X-Requested-With  XMLHttpRequest

Screenshot

Creditaan Orion


Antwoord 3, autoriteit 8%

Het lijkt erop dat de site die de peiling host (het “vote.php”-script) een “Access-Control-Allow-Origin”-header moet hebben om te kunnen posten vanaf een lijst met sites (of alle sites).

Met een waarde van * voor de koptekst kan vanaf elke website worden gepost:

Access-Control-Allow-Origin: *

d.w.z. Je zou het volgende bovenaan kunnen zetten vote.php

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

Chrome-extensies en apps zijn niet onderworpen aan dezelfde beveiligingsbeperkingen als op normale webpagina’s.

Aanvullende tips voor foutopsporing:

Als je toegang probeert te krijgen tot externe services vanaf webpagina’s die je hebt geopend op je lokale bestandssysteem in je browser, kan het zijn dat je browser andere beveiligingsregels toepast dan op bestanden die door een webservice worden aangeboden.

bijv. Als u lokale bestanden opent vanaf een locatie zoals C:\MyDocuments\weboot\index.htm(Windows) of \Users\joe\Sites\index.html(Mac) in uw browser werkt uw AJAX-verzoek mogelijk niet, zelfs niet met de header die in de meeste browsers is opgegeven.

Apple’s Safari past bijna geen domeinoverschrijdende beperkingen toe op lokaal geopende bestanden, maar Firefox is veel strenger in wat het toelaat, met Chrome ergens in het midden. Het lokaal draaien van een webserver (bijv. op http://localhost/) is een goed idee om onverwacht gedrag te voorkomen.

Bovendien kunnen andere bibliotheken die functies bieden om Ajax-verzoeken af ​​te handelen (zoals AngularJS), vereisen dat standaard andere headers op de server worden ingesteld. U kunt de reden voor de fout meestal zien in een browserfoutopsporingsconsole.


Antwoord 4

okt 2021

Tijdens mijn onderzoek kwam ik erachter dat je een extra veld nodig hebt in de kop van je verzoek. Voeg dus gewoon de volgende sleutel-waarde toe aan de kop:

sleutel:X-Requested-With| waarde: XMLHttpRequest

Other episodes