Rendern von PDF über Angular $ http anstelle von XMLHttpRequest

8

Ich habe also Wochen damit verbracht, zu recherchieren, wie man ein PDF vom Server über Ajax bekommt und es dann dem Client zeigt. Der Grund, warum ich das tun muss, ist, dass ein Benutzer nicht einfach direkt zum PDF auf dem Server gehen kann, weil er kein Token für die Sicherheit bereitstellt, aber mit Javascript kann ich das tun. Mit dem folgenden Code kann ich bekommen, was ich erwarte:

%Vor%

Aber wenn ich genau dieses Ding in eckiger Form versuche (ich mache die Hälfte davon, nur damit die Header in beiden übereinstimmen):

%Vor%

Hier sehen Sie, wie die Header in beiden aussehen:

%Vor%

Der einzige Unterschied ist, dass die xmlhttprequest-Version Authorization: Negotiate header hat, aber ich kann beide in fiddler von den Antworten vom Server rendern. Dies sagt mir, dass "Antwort" von $ http nicht das gleiche ist wie dies. Antwort in xmlhttprequest. Kann mir bitte jemand sagen, was anders ist und wie ich es beheben kann?

Ich dachte lange darüber nach, dass es ein Zeichensatzproblem war, und ich habe sogar die Bytes vor dem Senden über die Leitung und dann atob (), um es zurückzuschalten, aber das schien es nicht besser zu machen . Es scheint, dass die $ http-Version die Antwort übernimmt und die Bytes in utf8 konvertiert, auch wenn sie nicht ... meine Bytes sind, denke ich, sind Windows-1252 / latin1 / ios-8895-1

Der Grund, warum ich das sage, ist, weil ich das in einem Hexeditor gesehen habe:

btye 85 (auf dem Server) wechselte zu zwei Bytes von C2 85 (nach $ http-Code) Ссылка

btye c5 (auf dem Server) wechselte zu zwei Bytes von c3 85 (nach $ http-Code) Ссылка

Ich habe sogar versucht, zu codieren / zu dekodieren, wenn verschiedene Kombinationen ohne Erfolg sind. Ich glaube wirklich, dass das PDF etwas beschädigt wird, wenn es durch Winkel geht, aber ich weiß nicht wie.

UPDATE 1

Auf der Serverseite sieht der Code wie folgt aus:

%Vor%

Hier ist eine Art, wie es aussieht: Ссылка ohne den "No 'Access-Control-Allow-Origin'" Fehler

UPDATE 2

Hier ist, was der Netzwerkverkehr mir sagt:

Hier sehen Sie, wie die PDF aussieht, wenn Sie $ http:

verwenden

    
Ian Overton 03.05.2016, 22:35
quelle

2 Antworten

1

Ich glaube, Ihr Problem ist, dass der Browser eine CORS Preflight ausführt, weil Sie eine Cross-Browser-Anfrage machen. Es verwandelt eine GET-Anfrage in eine OPTIONS.

Sie müssen die OPTIONS-Anfrage zu Ihren akzeptierten CORS-Optionen hinzufügen. Sie müssen möglicherweise auch Ihre IP-Adresse zu den akzeptierten Origins innerhalb der CORS-Optionen hinzufügen.

Hier sind einige hilfreiche Links dafür: Ссылка Confused zum Umgang mit CORS OPTIONS Preflight-Anfragen

    
Sari Rahal 11.05.2016 19:21
quelle
0

Ich versuche Angular zu lernen und dachte, es wäre interessant zu sehen, ob das wirklich ein Angular Mangling-Problem ist. Also habe ich einen einfachen Knoten-Webserver erstellt und genau Ihren Code verwendet.

Ich kann ein PDF in einem Browserfenster anzeigen, indem ich den Angular-Code verwende, von dem Sie sagen, dass er für Sie versagt. Der einzige Fehler ist, dass Ihr Ansatz nicht in Microsofts Edge funktioniert, weil blob URLs aren sind aus Sicherheitsgründen nicht unterstützt .

Der Code ist auf GitHub und eine frühere Version ist auf C9 .

Ich habe mich dann gefragt, ob dies ein IIS / restesharp / ASP.NET MVC-Problem ist. Allerdings habe ich ziemlich schnell eine ASP.NET MVC-Anwendung mit RESTESHARP erstellt, die auch mit Angular funktioniert, mit Code sehr ähnlich zu Ihrem. Dies ist auch auf GitHub . Dein restarsharp Code brauchte ein wenig Liebe, aber es hat alles wieder gut funktioniert.

Der Grund, warum Sie hier keine Antworten erhalten, ist, dass ich nicht glaube, dass in der Frage genügend Informationen enthalten sind, um herauszufinden, was in Ihrer Umgebung nicht stimmt. Ich hoffe, dass dieses Zeug hilfreich ist.

    
Rich N 16.05.2016 21:41
quelle