¿Cómo puedo configurar el encabezado Aceptar para un enlace en una página web?

Esta es principalmente una pregunta de torre de marfil, ya que puedo simplemente hacer un nuevo punto final de URL. Pero básicamente, me gustaría poder mostrar CSV cuando el usuario tiene el encabezado Aceptar configurado para incluir texto / csv. Eso es trivial en el lado del servidor, pero en el lado del cliente no sé cómo configurar el encabezado Aceptar a menos que esté usando XHR o algún otro cliente “que no sea del navegador”. ¿Hay alguna forma en HTML para establecer el encabezado Aceptar en un enlace o en JS para establecer el encabezado Aceptar al usar window.location?

Me imagino que también podría poner esto aquí para las próximas mil personas que miren la publicación. No puedes hacerlo.

Actualizar:

Dejaré mi respuesta original a continuación para la posteridad, pero ahora veo que realmente no respondí la pregunta. No hay una manera de hacer esto “de forma nativa”, el mejor enfoque que puedo pensar sería usar un uri de datos ( http://en.wikipedia.org/wiki/Data_URI_scheme ) y hacer que AJAX haga el trabajo por usted :

// aware that you didn't mention jQuery, but you can do this with or without var download = function(){ var mime = this.getAttribute('data-mime-type'); $.ajax({ accepts: mime, success: function(data){ var uri = 'data:'+mime+';charset=UTF-8,' + encodeURIComponent(data); window.location = uri; } }) return false; } 

Con la misma idea utilizada en el siguiente ejemplo:

Download CSV

document.querySelectorAll('a[data-mime-type]').onclick = download;


Respuesta original

No hay una forma incorporada de forzar un encabezado ‘Aceptar’ en un enlace (a través de HTML o Javascript). Sin embargo, creo que podría sacar esto fácilmente usando una pequeña cantidad de código de servidor y cliente. Debería ser fácil en cualquier idioma, mi ejemplo es PHP:

 function get_accepted_headers() { $headers = apache_request_headers(); if(array_key_exists('Accept', $headers)) { $accepted = explode(',', $headers['Accept']); return $accepted; } return array(); } 

Agregue un atributo de aceptación de datos a sus enlaces de descarga:

Download CSV

A continuación, adjunte un controlador de evento click para asegurarse de que el usuario acepte el tipo de contenido especificado:

 // will end up with something like: ["text/html", "application/xhtml+xml", "application/xml;q=0.9", "image/webp", "*/*;q=0.8"] var user_headers = ; var click_header_check = function() { var accept = this.getAttribute('data-accept'); if(user_headers.indexOf(accept) == -1) { console.log('User does not explicitly accept content-type: %s', accept); return false; } window.location = this.href; return; } // attach the event listener document.querySelector('a[data-accept]').onclick = click_header_check; 

No estoy seguro de si esto es lo que estabas buscando, pero espero que ayude.

Para aquellos que todavía están interesados, hay una manera de hacer esto en javascript puro.

El siguiente código usa JQuery ( https://jquery.com/ ) y FileSaver.js ( http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js ) aunque puede escribir el respectivo partes usted mismo:

 //in case of non binary data use: var type = 'text/xml'; var url = 'http://your_url_here/' $.ajax({accepts:{text:type}, url:url, processData:false, dataType:'text', success:function(data){ saveAs(new Blob([data], {type: type}),'filename.txt'); }, error: function(){ // Handle errors here } });