Posso cambiare le intestazioni della richiesta HTTP inviata dal browser?

Sto cercando un design riposante e vorrei usare il più ansible i metodi HTTP ( POST , GET , …) e le intestazioni HTTP. Ho già scoperto che i metodi HTTP PUT e DELETE non sono supportati dal browser.

Ora sto cercando di ottenere rappresentazioni diverse della stessa risorsa e vorrei farlo cambiando l’intestazione Accept della richiesta. A seconda dell’intestazione Accept , il server può offrire una vista diversa sulla stessa risorsa.

Il problema è che non ho trovato un modo per dire al mio browser di cambiare questa intestazione.

Il ..> ha un attributo type , che può avere un tipo mime, sembrava un buon candidato ma l’header era ancora il default del browser (in Firefox può essere cambiato in about:config con la network.http.accept.default ).

Non credo sia ansible farlo nel modo in cui stai provando a farlo.

L’indicazione del formato dati accettato viene generalmente effettuata aggiungendo l’estensione al nome della risorsa. Quindi, se hai risorse come

 /resources/resource 

e GET /resources/resource restituisce la sua rappresentazione HTML, per indicare che si desidera invece la sua rappresentazione XML, è ansible utilizzare il seguente schema:

 /resources/resource.xml 

Devi fare la magia di determinazione del tipo di contenuto accettato sul lato server, quindi.

O usa Javascript come suggerisce James.

Vorrei in parte disapprovare il suggerimento di Milano di incorporare la rappresentazione richiesta nell’URI.

Se ansible, gli URI dovrebbero essere usati solo per indirizzare risorse e non per tunneling di metodi / verbi HTTP. Eventualmente, l’azione aziendale specifica (modifica, blocco, ecc.) Potrebbe essere incorporata nell’URI se la creazione (POST) o l’aggiornamento (PUT) da solo non servono allo scopo:

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

Nel caso in cui si richieda una rappresentazione particolare nell’URI, sarà necessario interrompere la progettazione dell’URI rendendola più brutta, mescolando due concetti REST distinti nello stesso posto (es. URI) e rendendo più difficile elaborare genericamente le richieste sul lato server. Cosa sta suggerendo Milano e molti stanno facendo lo stesso, incl. Flickr, è esattamente questo.

Invece, un approccio più RESTful userebbe un posto separato per codificare la rappresentazione preferita usando l’intestazione Accept HTTP che è usata per la negoziazione del contenuto dove il client dice al server quali tipi di contenuto può gestire / processare e il server prova a soddisfare la richiesta del client. Questo approccio fa parte dello standard HTTP 1.1 , compatibile con il software e supportato anche dai browser web.

Confronta questo:

 Ottieni /orders/08/165.xml HTTP / 1.1
 o
 GET / orders / 08/165 e format = xml HTTP / 1.1

a questa:

 GET / orders / 08/165 HTTP / 1.1
 Accetta: application / xml

Da un browser Web è ansible richiedere qualsiasi tipo di contenuto utilizzando il metodo setRequestHeader dell’object XMLHttpRequest . Per esempio:

 function getOrder (year, annualOrderId, contentType) {
  var client = new XMLHttpRequest ();
  client.open ("GET", "/ order /" + year + "/" + annualOrderId);
  client.setRequestHeader ("Accetta", contentType);
  client.send (OrderDetails);
 }

Per riassumere: l’indirizzo, ovvero l’URI di una risorsa deve essere indipendente dalla sua rappresentazione e il metodo XMLHttpRequest.setRequestHeader consente di richiedere qualsiasi rappresentazione utilizzando l’intestazione Accept HTTP.

Saluti!
Shonzilla

Stavo cercando di fare esattamente la stessa cosa (servizio web RESTful), e mi sono imbattuto in questo addon firefox, che ti permette di modificare le intestazioni di accettazione (in realtà, eventuali intestazioni di richiesta) per le richieste. Funziona perfettamente.

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

Usa qualche javascript!

 xmlhttp = new XMLHttpRequest ();
 xmlhttp.open ( 'put', http: //www.mydomain.org/documents/standards/browsers/supportlist)
 xmlhttp.send ("il contenuto della pagina va qui");

L’ estensione ModHeader per Google Chrome è anche una buona opzione. Puoi semplicemente impostare le intestazioni che desideri e inserire l’URL nel browser, che automaticamente prenderà le intestazioni dall’interno quando si preme l’url. L’unica cosa è che invierà intestazioni per ogni URL che verrà colpito in modo da poterlo disabilitare o cancellare dopo l’uso.