Heroku mangeant mes en-têtes HTTP personnalisés
-
19-09-2019 - |
Question
J'utilise Heroku (Heroku.com) pour déployer mon application Rails, et je construis un client iPhone pour l'interfacer avec. Mon intention était de passer l'identifiant de périphérique unique du téléphone à l'application en tant qu'en-tête HTTP pour l'authentification. Quand je teste localement, mes en-têtes se déroulent bien, mais sur Heroku, il semble éliminer mon en-tête personnalisé. J'ai vérifié avec un script Ruby:
url = URI.parse('http://#{myapp}.heroku.com/')
#url = URI.parse('http://localhost:3000/')
req = Net::HTTP::Post.new(url.path)
#bogus params
req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';')
#device header
req['HTTP_DEVICE_UDID'] = "XXXXXX"
res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
Contre mon serveur local, l'en-tête est là, mais sur Heroku, ce n'est pas le cas.
Des idées?
Merci,
Jeremy
La solution
Avez-vous essayé de passer cela en tant qu'en-tête X, c'est-à-dire x-http-device-udid? La plupart des en-têtes HTTP personnalisés ou non standard sont passés sous forme de têtes X.
Autres conseils
J'ai posté à ce sujet sur le soutien d'Heroku et j'ai finalement compris ce que signifiait la réponse existante.
Essayez d'utiliser "x-" au lieu de "x_". Par exemple, "X-SendFile" est le nom d'un en-tête HTTP, mais lorsque cela est passé à Rack, cela devient "X_SendFile". Après cette ponctuation initiale, je crois que le reste de l'en-tête sera passé normalement, en plus d'être capitalisé.
Étant donné que vous utilisez du bambou, vos demandes sont passées via Nginx, qui filtrera les en-têtes qu'il pense être mal formulés.
Cheers, JD
Je pensais juste que cela pourrait être utile pour d'autres débutants comme moi à la recherche de cela.