2016-04-06 6 views
0

Ich versuche, drei Antwortheader (Rails Devise Auth Header: uid, Client, Zugriffstoken) in jeder Anfrage an einen Rails Server abzurufen.Benutzerdefinierte Antwortheader, die nicht vom Server gesendet werden (Rails Devise)

Mit Postman (http-Client) funktioniert es. Mit OkHttp (Java-HTTP-Client) werden die Header einfach nicht im Client angezeigt (ich habe mit Wireshark überprüft). Wenn ich im Debug-Modus bin es nur Arbeit ...

+0

Header, die nach dem Körper gesendet werden, klingen wie Chunked-Encoding mit Header im Chunked-Trailer. Dies ist ein sehr selten benutztes und unterstütztes Feature, also bezweifle ich, dass es so gemacht wird. Bitte geben Sie weitere Details über die tatsächlich gesendeten Daten an, d. H. Post-Paket-Captures für Postbote und OkHttp an cloudshark.org. –

+0

Danke für Ihre Hilfe, ich werde weitere Informationen vorbereiten. –

+0

Postbote Pakete: https://www.cloudshark.org/captures/325740cea0ab –

Antwort

1

Die zusätzlichen Header mit Postbote sind Postbote durch ein Origin-Header und der Server sendet, antwortet mit CORS Header, das heißt Access-Control-.... Diese Header werden innerhalb des normalen HTTP-Headers gesendet, d. H. Nicht nach der Antwort.

Diese Zugriffssteuerungsheader sind jedoch nur relevant, wenn der Zugriff von einem Browser aus erfolgt, da sie das Kreuzursprungsverhalten von XHR steuern. Da Sie nicht in einem Browser sind, sollten sie für das, was Sie tun, irrelevant sein. Was relevant ist, sind der Hauptteil der Antwort und einige der anderen Header und hier finden Sie keine Unterschiede. Ebenso irrelevant sollte sein, wenn mehrere Anfragen innerhalb derselben TCP-Verbindung (HTTP-Keep-Alive durch Postbote) oder mit mehreren Verbindungen (OkHttp) gesendet werden, da jede Anfrage unabhängig von der anderen ist und die gleiche TCP-Verbindung nur eine Leistungsoptimierung ist.

Wenn Sie wirklich diese speziellen Header erhalten möchten, sollten Sie einen Origin Header in Ihrer OkHttp Anfrage hinzufügen. Unter the OkHttp examples erfahren Sie, wie Sie Ihre eigenen Header hinzufügen können. Aber wie ich schon sagte: Diese Zugriffssteuerungs-Header sollten für die reale Aufgabe irrelevant sein, und es sollte nicht notwendig sein, zu diesen Überschriften zu gelangen.

+0

Sorry, ich merke, dass ich nicht die Absicht dazu erklärt. Ich versuche, diese UID, Client und Access-Token-Header abrufen, weil Server immer Client-und Access-Token-Werte aktualisieren und mich bei jeder Antwort zurücksenden. Dann möchte ich die Header der "/ api/v1/patients /: id: Timelines" -Antwort abrufen, um mich bei jeder Folling-Anfrage zu authentifizieren, d. H. Sign_in> Timeline-Seite 1> Timeline-Seite 2 (3 verschiedene Anfragen). –

+0

@PatrickMachado: Laut der Paketerfassung befinden sich die Header, die Sie abrufen möchten, in der Antwort, die Sie für Ihre OkHttp-Anfrage erhalten haben. Wo genau ist das Problem? –

+0

Das Problem ist, dass sie nur in der Anfrage sign_in sind, ich brauche sie auch in der Timeline-Anfrage. –

0

Es gibt eine Eigenschaft "config.batch_request_buffer_throttle" in der Datei "config/initializers/devise_token_auth.rb" des Rails-Projekts. Wir haben es von 5 Sekunden auf 0 Sekunden geändert. Es ist eine Eigenschaft, das aktuelle Token für diese Zeit für die folgenden Anforderungen verfügbar zu halten. Wie die ursprüngliche Dokumentation: "Manchmal ist es notwendig, mehrere Anfragen gleichzeitig an die API zu stellen. In diesem Fall muss jede Anfrage im Stapel das gleiche Authentifizierungs-Token teilen. Diese Einstellung bestimmt, wie weit die Anfragen voneinander entfernt sein können während immer noch der gleiche Authentifizierungs-Token verwendet wird. "

So, wenn wir die Anfrage mit Postman oder in Java Debug die 5 Sekunden ausgeführt wurde, erlaubte es Devise, neue Token zu erzeugen und sie dann auf den Client zu holen.