with - meta content javascript




Adicionar cabeçalho no pedido AJAX com jQuery (4)

Gostaria de adicionar um cabeçalho personalizado a uma solicitação AJAX POST do jQuery.

Eu tentei isso:

$.ajax({
    type: 'POST',
    url: url,
    headers: {
        "My-First-Header":"first value",
        "My-Second-Header":"second value"
    }
    //OR
    //beforeSend: function(xhr) { 
    //  xhr.setRequestHeader("My-First-Header", "first value"); 
    //  xhr.setRequestHeader("My-Second-Header", "second value"); 
    //}
}).done(function(data) { 
    alert(data);
});

Quando envio esta solicitação e assisto com o FireBug, vejo este cabeçalho:

OPÇÕES xxxx / aaaa HTTP / 1.1
Host: 127.0.0.1:6666
User-Agent: Mozilla / 5.0 (Windows NT 6.1; WOW64; rv: 11.0) Gecko / 20100101 Firefox / 11,0
Aceite: text / html, application / xhtml + xml, application / xml; q = 0,9, / ; q = 0,8
Aceitar Idioma: fr, fr-fr; q = 0,8, en-us; q = 0,5, en; q = 0,3
Accept-Encoding: gzip, deflate
Conexão: keep-alive
Origem: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: meu primeiro cabeçalho, meu segundo cabeçalho
Pragma: sem cache
Cache-Control: no-cache

Por que meus cabeçalhos personalizados vão para Access-Control-Request-Headers :

Access-Control-Request-Headers: meu primeiro cabeçalho, meu segundo cabeçalho

Eu estava esperando um valor de cabeçalho como este:

My-First-Header: primeiro valor
My-Second-Header: segundo valor

É possível?


Aqui está um exemplo de como definir um cabeçalho de solicitação em uma chamada Ajax do JQuery:

$.ajax({
  type: "POST",
  beforeSend: function(request) {
    request.setRequestHeader("Authority", authorizationToken);
  },
  url: "entities",
  data: "json=" + escape(JSON.stringify(createRequestObject)),
  processData: false,
  success: function(msg) {
    $("#results").append("The result =" + StringifyPretty(msg));
  }
});

E é por isso que você não pode criar um bot com Javascript, porque suas opções são limitadas ao que o navegador permite que você faça. Você não pode simplesmente pedir um navegador que siga a política CORS , que a maioria dos navegadores segue, para enviar solicitações aleatórias para outras origens e permitir que você obtenha a resposta de forma simples!

Além disso, se você tentou editar alguns cabeçalhos de solicitação manualmente, como o origin-header de origin-header das ferramentas dos desenvolvedores que acompanham os navegadores, o navegador recusará sua edição e poderá enviar uma solicitação OPTIONS comprovação.


O que você viu no Firefox não foi o pedido real; note que o método HTTP é OPTIONS, não POST. Na verdade, era o pedido de "pré-voo" que o navegador faz para determinar se um pedido AJAX entre domínios deve ser permitido:

http://www.w3.org/TR/cors/

O cabeçalho Cabeçalhos de Pedido de Controle de Acesso na solicitação pré-flight inclui a lista de cabeçalhos na solicitação real. Espera-se então que o servidor informe se esses cabeçalhos são suportados neste contexto ou não, antes que o navegador envie a solicitação real.


Tente usar gema rack-cors . E adicione o campo de cabeçalho na sua chamada ajax.





http-headers