94 votes

Puis-je changer les en-têtes de la requête HTTP envoyée par le navigateur?

Je suis à la recherche dans une bonne conception et souhaitez utiliser les méthodes HTTP (POST, GET, ...) et les en-têtes HTTP autant que possible. J'ai déjà trouvé que les méthodes HTTP PUT et DELETE ne sont pas pris en charge à partir du navigateur.

Maintenant, je suis à la recherche pour obtenir des représentations différentes d'une même ressource et voudrais le faire en modifiant l' Accept - tête de la requête. Selon cette Accept - tête, le serveur peut servir d'un point de vue différent sur la même ressource.

Le problème est que je n'ai pas trouver un moyen de dire à mon navigateur pour changer cet en-tête.

L' <a..> balise a un attribut de type, qui peuvent avoir un type mime, regardé comme un bon candidat, mais l'en-tête est toujours le navigateur par défaut (dans Firefox, il peut être modifié en about:config avec l' network.http.accept.default - clés).

47voto

Shonzilla Points 5277

Je voudrais partiellement en désaccord avec Milan suggestion de l'intégration de la demande de représentation dans l'URI.

Si de toute façon possible, Uri doit uniquement être utilisée pour l'adressage des ressources et pas pour le tunneling HTTP méthodes/verbes. Finalement, spécifique de l'action entreprise (modifier, de verrouillage, etc.) pourrait être intégré dans l'URI, si créer des (POST) ou de mise à jour (METTRE) ne suffisent pas à répondre à l'objectif:

POST http://shonzilla.com/orders/08/165;modifier

Dans le cas de la demande d'une représentation particulière en URI que vous auriez besoin de perturber votre URI conception éventuellement rend plus laid, le mélange de deux distinctes RESTE concepts dans le même endroit (c'est à dire URI) et rend plus difficile le terme générique de traiter des requêtes sur le serveur-côté. Ce Milan est en train de suggérer et nombreux sont en train de faire la même chose, incl. Flickr, c'est exactement cela.

Au lieu de cela, un de plus Reposant approche consisterait à utiliser un autre endroit pour encoder préféré de représentation en utilisant Accept - 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/le processus et le serveur tente de répondre à la demande du client. Cette approche est une partie de HTTP 1.1 standard, de logiciels compatibles et pris en charge par les navigateurs web ainsi.

Comparer ceci:

GET /orders/08/165.xml HTTP/1.1
ou
GET /commandes/08/165&format=xml HTTP/1.1

pour cela:

GET /commandes/08/165 HTTP/1.1
Accept: application/xml

À partir d'un navigateur web vous pouvez demander à tout type de contenu en utilisant setRequestHeader méthode de XMLHttpRequest objet. Par exemple:

fonction getOrder(année, yearlyOrderId, contentType) {
 var client = new XMLHttpRequest();
 client.open("GET", "/ordonnance/" + annee + "/" + yearlyOrderId);
 client.setRequestHeader("Accepter", contentType);
client.envoyer(orderDetails);
}

Pour résumer: l'adresse, c'est à dire l'URI d'une ressource doit être indépendant de sa représentation et de l' XMLHttpRequest.setRequestHeader méthode permet de demander la représentation à l'aide de l' Accept - tête HTTP.

Cheers!
Shonzilla

12voto

Chris Points 51

Je cherchais à faire exactement la même chose (service Web RESTful), et je suis tombé sur cet addon firefox, qui vous permet de modifier les en-têtes d'acceptation (en fait, tous les en-têtes de demande) pour les demandes. Cela fonctionne parfaitement.

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

8voto

Milan Novota Points 10892

Je ne pense pas que c'est possible de le faire dans la façon dont vous êtes en train de le faire.

Indication de la accepté de format de données se fait généralement par le biais de l'ajout de l'extension du nom de ressource. Donc, si vous avez des ressources comme

/resources/resource

et GET /resources/resource retourne sa représentation HTML, pour indiquer que vous voulez de sa représentation XML au lieu de cela, vous pouvez utiliser le modèle suivant:

/resources/resource.xml

Vous avez accepté de type de contenu de la détermination de la magie sur le côté serveur, donc.

Ou utiliser du Javascript, James suggère.

0voto

James Anderson Points 18253

Utilisez du javascript!

xmlhttp = new XMLHttpRequest ();
xmlhttp.open ('PUT', http: //www.mydomain.org/documents/standards/browsers/supportlist)
xmlhttp.send ("le contenu de la page va ici");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X