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 ).

53
demandé sur user66001 2008-12-17 18:25:49

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.

9
répondu Milan Novota 2008-12-17 15:44:45

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

35
répondu Shonzilla 2008-12-29 17:35:54

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.

https://addons.mozilla.org/en-US/firefox/addon/967 /

11
répondu Chris 2010-09-11 16:01:35

utilisez du javascript!

xmlhttp=new XMLHttpRequest();
xmlhttp.open('PUT',http://www.mydomain.org/documents/standards/browsers/supportlist)
xmlhttp.send("page content goes here");
1
répondu James Anderson 2008-12-17 15:36:47

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.

0
répondu Jai Prak 2018-07-25 12:22:23