2011-09-29 20 views
8

De acuerdo con the HTML4 reference, no hay ningún atributo para pasar los encabezados HTTP usando la etiqueta de anclaje.¿Cómo pasaría encabezados HTTP utilizando una etiqueta de anclaje estándar?

Deseo ofrecer un enlace solicitando un tipo de archivo específico con el encabezado Accept.

La única forma en que puedo ver es simplemente dejarlo pasar, y pasar un parámetro GET.

Es posible que como por eso me gustaría hacer esto ... tengo la intención de exponer a un montón de métodos como una API pública, sirviendo los resultados como JSON. Y al hacer solicitudes usando JavaScript u otro lenguaje de programación, usar el encabezado Accept para solicitar un formato de respuesta específico es "La manera correcta" de hacerlo. Pero eso significaría que necesito acomodar tanto el Accept encabezado y el parámetro GET en mi código, que huele como una duplicación de lógica.

Este tema es en gran medida discutible, ya que tales enlaces pueden no ser posible marcador en el navegador ... todavía ... Me gustaría saber si era posible sin demasiada magia ...

+0

Usar conneg no siempre es "la manera correcta", es solo otra herramienta en su caja de herramientas. Cree recursos distintos (URL) para las variantes y continúe con la vida. –

Respuesta

3

no veo otra manera de utilizar el parámetro GET o como una extensión

http://myurl/page?format=json

o mejor

http://myurl/page.json

que anula la cabecera accept (ya que el navegador solo enviará su predeterminado aceptar encabezado). Entonces sólo tiene que inicializar un formato para aceptar asignación del encabezado como esto (que no encuentro lógica duplicada en absoluto):

{ 
    "json" : "application/json", 
    "html" : "text/html" 
} 
+0

Si usa javascript, puede realizar cualquier solicitud con cualquier encabezado (accept) y no está limitado al 'encabezado de aceptación predeterminado'. – Eddy

+1

Sí, pero el OP preguntaba por el código HTML estándar y la etiqueta . Entonces canalícelo a través de JavaScript o use la extensión en o el parámetro de formato. – Daff

+0

Este es un enfoque perfectamente válido para permitir que un usuario seleccione una variante específica. No hay nada de malo en crear recursos/URI distintos para permitir la selección de variante. La negociación del contenido conducido por el servidor no siempre es la manera correcta. –

0

No puedes.

Tengo la intención de exponer un montón de métodos como una API pública, sirviendo los resultados como JSON. Y al hacer solicitudes usando JavaScript u otro lenguaje de programación, usar el encabezado Accept para solicitar un formato de respuesta específico es "La manera correcta" de hacerlo. Pero eso significaría que necesito acomodar el encabezado Accept y el parámetro GET en mi código, que huele como una duplicación de lógica.

Si te entiendo correctamente, no tienes que hacer esto de todos modos. Los navegadores ya suministran un encabezado Accept.

+1

concedido. Pero estaba preguntando si era posible anularlo. – exhuma

0

Hmm, parece como si sus resultados son JSON, usted va a enviar/recibir de la secuencia de comandos de todos modos, que puede proporcionar cualquier encabezado que desee. Simplemente haga que su enlace llame a una función de script y listo.

+0

Usar 'JSON' fue solo un ejemplo. En mi caso, quiero exponer una lista que podría ser accesible como 'PDF',' HTML' o 'JSON', donde' PDF' sería accesible a través de un enlace. – exhuma

Cuestiones relacionadas