2012-01-18 13 views
9

Quando un utente fa clic su un collegamento a un disegno sul mio sito http://mysite.com/some-drawing, Desidero che il mio server risponda con il codice di stato 300 e due posizioni di risorsa: http://mysite.com/some-drawing.png e http://mysite.com/some-drawing.myapp e che il browser client decida automaticamente quale utilizzare, in base sulle sue capacità:Qual è l'esatta struttura di risposta per il codice di stato HTTP 300 (Scelte multiple)?

  • Se MyApp è installato sul computer dell'utente, quindi il browser deve scaricare la versione *.myapp e utilizzare MyApp per visualizzarla.

  • Tuttavia, se MyApp non è installato e il browser non è in grado di visualizzare questa versione, vorrei selezionare la versione *.png.

Tuttavia, sto avendo una difficoltà a capire la struttura di una risposta HTTP con codice di stato 300.

Il rfc2616 dice:

La risorsa richiesta corrisponde a una qualsiasi delle un set di rappresentazioni , ognuna con la propria posizione specifica e le informazioni di negoziazione guidate dall'agente (sezione 12) vengono fornite in modo che l'utente (o l'agente utente) possa selezionare una rappresentazione preferita e reindirizzare la sua richiesta a quella posizione.

A meno che non si trattava di una richiesta HEAD, la risposta dovrebbe includere un soggetto contenente un elenco di caratteristiche di risorse e posizione (s) da cui l'agente utente o utente può scegliere la più appropriata. Il formato dell'entità è specificato dal tipo di supporto indicato nel campo Content- Type. A seconda del formato e delle capacità di agente utente, la selezione della scelta più appropriata può essere eseguita automaticamente. Tuttavia, questa specifica non definisce lo standard per tale selezione automatica.

Se il server ha una scelta preferita di rappresentazione, DOVREBBE includere l'URI specifico per quella rappresentazione nel campo Ubicazione ; user agent POSSONO utilizzare il valore del campo Location per il reindirizzamento automatico . Questa risposta è memorizzabile nella cache a meno che non sia indicato diversamente.

La formulazione "un'entità che contiene un elenco di caratteristiche di risorse e posizione (s)" sembra ambiguo. Cosa significa? Qualcuno sa come è fatto?

risposta

4

Che non funzionerà.

Le "scelte multiple" vengono eseguite inviando i collegamenti in contenuto ipertestuale (HTML) e lasciare la scelta dell'utente utente.

+2

Il rfc dice: "A seconda del formato e delle funzionalità del user agent, la selezione della scelta più appropriata può essere eseguita automaticamente ". Stai dicendo che tutti i principali browser considerano tutte le risposte allo stato 300 le stesse chiedendo all'utente di scegliere manualmente? –

+1

Sì. Conoscete un formato che * consenta * all'agente utente di scegliere per voi? –

+1

Ad esempio: un'entità di tipo metia "multipart/alternative". Questo è almeno ciò che viene utilizzato dai client di posta elettronica per determinare la scelta migliore da presentare all'utente. –

2

In teoria, se un client supportava la negoziazione guidata dal server, è possibile inviare indietro varie intestazioni 'Accept- *', ma quelle sono piuttosto limitate (ad esempio, Languauge, Encoding, Charset) e potrebbero essere utilizzate per 'do vuoi il documento PDF o MS Word? ' o "Ti piacerebbe quello in spagnolo o in inglese?"), ma non per altre distinzioni arbitrarie. Non sono a conoscenza di browser che lo supportano.Invece, hanno il browser che invia le intestazioni Accept e il server risponde con qualsiasi cosa pensi sia meglio.

Vedi:

aggiornamento:

Vedi anche Mozilla Developer Network's "Content negotiation", che discute qualche vantaggio e svantaggi di server-drive vs. clie negoziazioni guidate da nt e alcune intestazioni aggiuntive che potrebbero essere di interesse (ad esempio, cercando di vedere se il cliente invia "Negoziare" per annunciare cosa supporta)

Problemi correlati