Heim  >  Artikel  >  PHP-Framework  >  So lösen Sie das Problem, dass thinkphp-Bilder nicht domainübergreifend angezeigt werden

So lösen Sie das Problem, dass thinkphp-Bilder nicht domainübergreifend angezeigt werden

PHPz
PHPzOriginal
2023-04-07 09:30:52964Durchsuche

Kürzlich bin ich auf einige seltsame Probleme gestoßen, als ich Projekte mit dem ThinkPHP-Framework entwickelte. Unser Projekt ist eine Website zur Bildanzeige, aber im Browser werden einige Bilder nicht angezeigt und in der Konsole wird keine Fehlermeldung angezeigt. Durch Suchen und Experimentieren haben wir schließlich herausgefunden, dass es sich hierbei um ein domänenübergreifendes Problem handelt. In diesem Beitrag werde ich unseren Prozess zur Identifizierung und Lösung von Problemen vorstellen.

Lassen Sie uns zunächst verstehen, was domänenübergreifend ist. Cross-Domain tritt zwischen zwei Websites mit unterschiedlichen Domainnamen auf. Wenn die Ressourcen einer Website, wie z. B. JS, CSS, Ajax oder Bilder, den Zugriff auf die Ressourcen einer anderen Website anfordern, werden sie aufgrund der Einschränkungen derselben blockiert. Herkunftspolitik. Die Same-Origin-Richtlinie ist ein sehr wichtiges Sicherheitsmerkmal. Sie beschränkt den Zugriff einer Website nur auf Ressourcen mit demselben Domänennamen, Protokoll und Port wie ihre eigene.

In unserem Projekt verwenden wir eine Bibliothek eines Drittanbieters zum Laden von Bildern, und diese Bibliothek verwendet Adressen mit unterschiedlichen Domänennamen zum Speichern von Bildern. Daher kann das Bild im Browser nicht richtig angezeigt werden, wenn es die Domäne überschreitet.

Um dieses Problem zu lösen, müssen wir einige Einstellungen auf der Serverseite vornehmen. Die gebräuchlichste Lösung besteht darin, CORS (Cross-Origin Resource Sharing) serverseitig einzurichten. Mit CORS kann der Server angeben, welche Domänennamen auf die Ressource zugreifen können, wenn er auf Clientanfragen antwortet.

Im ThinkPHP-Framework können wir CORS implementieren, indem wir den folgenden Code in die Datei index.php einfügen:

header('Access-Control-Allow-Origin:*'); //允许所有来源访问
header('Access-Control-Allow-Method:POST,GET'); //允许访问的方式

Dieser Code ermöglicht allen Quellen den Zugriff auf Ressourcen und ermöglicht den POST- und GET-Zugriff.

Wichtig ist hier zu beachten, dass dieser Code oben in index.php platziert werden sollte, damit alle Anfragen diese Einstellung verwenden können.

Neben der Einrichtung von CORS können wir auch andere Methoden zur Lösung domänenübergreifender Probleme nutzen. Beispielsweise ist JSONP (JSON mit Padding) eine praktikable Methode zur Lösung domänenübergreifender Probleme. Durch das Hinzufügen eines Skript-Tags zur Seite werden die Daten, auf die zugegriffen werden muss, in eine Funktion gepackt und die zurückgegebenen Ergebnisse werden dann empfangen eine andere Website.

Im ThinkPHP-Framework können wir den folgenden Code verwenden, um die JSONP-Methode zu generieren:

$callback = isset($_GET['callback']) ? $_GET['callback'] : 'callback';
$data = array('name' => 'test', 'age' => 18);
echo $callback . '(' . json_encode($data) . ')';

Hier prüfen wir zunächst, ob der Callback-Parameter im GET-Parameter vorhanden ist, und verwenden diesen Parameter, falls vorhanden, als Funktionsnamen. Anschließend werden die zurückzugebenden Daten im JSON-Format serialisiert und zur Rückruffunktion hinzugefügt. Wenn wir schließlich Daten zurückgeben, geben wir die Funktion zusammen mit den Daten an den Browser zurück.

Zusammenfassend lässt sich sagen, dass domänenübergreifende Probleme normalerweise sehr häufige Probleme während der Entwicklung sind. Aber wir können dieses Problem durch serverseitige Einstellungen lösen. Im ThinkPHP-Framework können wir CORS oder JSONP verwenden, um domänenübergreifende Probleme zu lösen. Ich hoffe, dass dieser Artikel Lesern in Not helfen kann.

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass thinkphp-Bilder nicht domainübergreifend angezeigt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn