Puis-je changer les en-têtes de la requête HTTP envoyée par le navigateur?
je suis à la recherche d'un design reposant et je voudrais utiliser les méthodes HTTP ( POST
, GET
, ...) et les en-têtes HTTP autant que possible. J'ai déjà découvert que les méthodes HTTP PUT
et DELETE
ne sont pas supportées par le navigateur.
maintenant je cherche à obtenir des représentations différentes de la même ressource et je voudrais le faire en changeant l'en-tête Accept
de la requête. En fonction de cet en-tête Accept
, le le serveur peut servir une vue différente sur la même ressource.
le problème est que je n'ai pas trouvé un moyen de dire à mon navigateur de changer cet en-tête.
la balise <a..>
a un type attribut , qui peut avoir un type mime, ressemblait à un bon candidat, mais l'en-tête était toujours la valeur par défaut du navigateur (dans Firefox il peut être modifié dans about:config
avec la touche network.http.accept.default
).
5 réponses
Je ne pense pas qu'il soit possible de le faire de la façon dont vous essayez de le faire.
L'Indication du format de données accepté se fait habituellement par l'ajout de l'extension au nom de la ressource. Donc, si vous avez des ressources comme
/resources/resource
et GET /resources/resource
retourne sa représentation HTML, pour indiquer que vous voulez sa représentation XML à la place, vous pouvez utiliser le motif suivant:
/resources/resource.xml
vous devez faire le la magie de détermination de type de contenu acceptée du côté du serveur, alors.
ou utilisez Javascript comme James le suggère.
je suis en partie en désaccord avec la suggestion de Milan d'inclure la représentation demandée dans L'URI.
si possible, URIs devrait seulement être utilisé pour l'adressage des ressources et pas pour le tunneling des méthodes HTTP/verbes. Éventuellement, des actions spécifiques de l'entreprise (éditer, verrouiller, etc.) pourrait être intégré dans L'URI si create (POST) ou update (PUT) seul ne sert pas l'objectif:
POST http://shonzilla.com/orders/08/165;edit
dans le cas de la demande d'une représentation particulière dans URI, vous devez perturber votre URI et éventuellement le rendre plus laid, en mélangeant deux concepts de repos distincts au même endroit (C'est-à-dire URI) et en rendant plus difficile le traitement générique des requêtes côté serveur. Ce que Milan suggère et beaucoup font la même chose, incl. Flickr, c'est exactement ça.
au lieu de cela, une approche plus reposante serait en utilisant un endroit séparé pour encoder préféré représentation en utilisant Accept
en-tête HTTP qui est utilisé pour la négociation de contenu où le client indique au serveur quels types de contenu il peut gérer/traiter et le serveur essaie de répondre à la demande du client. Cette approche fait partie de la norme HTTP 1.1 , compatible avec les logiciels et prise en charge par les navigateurs web.
comparez ceci:
GET /orders/08/165.xml HTTP/1.1 or GET /orders/08/165&format=xml HTTP/1.1
à ceci:
GET /orders/08/165 HTTP/1.1 Accept: application/xml
de a navigateur Web vous pouvez demander n'importe quel type de contenu en utilisant setRequestHeader
méthode de XMLHttpRequest
objet. Par exemple:
function getOrder(year, yearlyOrderId, contentType) { var client = new XMLHttpRequest(); client.open("GET", "/order/" + year + "/" + yearlyOrderId); client.setRequestHeader("Accept", contentType); client.send(orderDetails); }
pour résumer: l'adresse, c'est-à-dire L'URI d'une ressource doit être indépendante de sa représentation et la méthode XMLHttpRequest.setRequestHeader
vous permet de demander n'importe quelle représentation en utilisant l'en-tête HTTP Accept
.
santé!
Shonzilla
je cherchais à faire exactement la même chose (RESTful web service), et je suis tombé sur ce firefox addon, qui vous permet de modifier les en-têtes accept (en fait, tous les en-têtes de requête) pour les requêtes. Il fonctionne parfaitement.
utilisez du javascript!
xmlhttp=new XMLHttpRequest(); xmlhttp.open('PUT',http://www.mydomain.org/documents/standards/browsers/supportlist) xmlhttp.send("page content goes here");
ModHeader extension pour Google Chrome, est également une bonne option. Vous pouvez simplement définir les en-têtes que vous voulez et juste entrer L'URL dans le navigateur, il prendra automatiquement les en-têtes de l'extension lorsque vous appuyez sur l'url. La seule chose est, il va envoyer des en-têtes pour chaque URL que vous allez frapper de sorte que vous devez désactiver ou supprimer après l'utilisation.