Definir um header de solicitação em JavaScript

Parece que não consigo alterar a maioria dos headers de solicitação do JavaScript ao fazer uma chamada AJAX usando XMLHttpRequest. Note que quando request.setRequestHeader tem que ser chamado após request.open() nos navegadores Gecko (veja http://ajaxpatterns.org/Talk:XMLHttpRequest_Call ). Quando eu defino o Referer , ele não fica definido (eu olhei para os headers de solicitação enviados usando Firebug e Tamper Data). Quando eu configurei o User-Agent , ele atrapalhou a chamada do AJAX completamente. Definir Aceitar e Tipo de Conteúdo funciona, no entanto. Somos impedidos de configurar Referer e User-Agent no Firefox 3?

 var request = new XMLHttpRequest(); var path="http://www.yahoo.com"; request.onreadystatechange=state_change; request.open("GET", path, true); request.setRequestHeader("Referer", "http://www.google.com"); //request.setRequestHeader("User-Agent", "Mozilla/5.0"); request.setRequestHeader("Accept","text/plain"); request.setRequestHeader("Content-Type","text/plain"); request.send(null); function state_change() { if (request.readyState==4) {// 4 = "loaded" if (request.status==200) {// 200 = OK // ...our code here... alert('ok'); } else { alert("Problem retrieving XML data"); } } } 

Especificação W3C no setrequestheader .

Os breves pontos:

Se o header da solicitação já tiver sido definido, o novo valor DEVE ser concatenado ao valor existente usando U + 002C COMMA seguido por U + 0020 SPACE para separação.

Os UAs PODEM dar ao header User-Agent um valor inicial, mas DEVEM permitir que os autores acrescentem valores a ele.

No entanto – Depois de pesquisar o framework XHR no jQuery, eles não permitem que você altere os headers User-Agent ou Referer. O mais parecido:

 // Set header so the called script knows that it's an XMLHttpRequest xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 

Eu estou inclinado para a opinião de que o que você quer fazer é ser negado por uma política de segurança em FF – se você quiser passar algum header personalizado do tipo Referer você sempre pode fazer:

 xhr.setRequestHeader('X-Alt-Referer', 'http://www.google.com'); 

Resposta @gnarf está certa. queria adicionar mais informações.

Mozilla Bug Reference: https://bugzilla.mozilla.org/show_bug.cgi?id=627942

Encerre estas etapas se o header for uma correspondência sem distinção entre maiúsculas e minúsculas para um dos seguintes headers:

 Accept-Charset Accept-Encoding Access-Control-Request-Headers Access-Control-Request-Method Connection Content-Length Cookie Cookie2 Date DNT Expect Host Keep-Alive Origin Referer TE Trailer Transfer-Encoding Upgrade User-Agent Via 

Fonte: https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader

Para as pessoas que estão vendo isso agora.

Parece que agora a configuração deste header é permitida desde o Firefox 43. Consulte https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name para a lista atual de headers proibidos.