Bir formu POST'ta bir Üstbilgi alanı nasıl ayarlanır?


Yanıtlar:


61

Yapılamaz - AFAIK.

Bununla birlikte, formu serileştirmek ve özel başlığınızı eklerken göndermek (AJAX kullanarak) için örneğin jquery kullanabilirsiniz (bunu düz javascript ile yapabilirsiniz).

Jquery bak serializeiçine bir HTML FORM değiştirir form-url-encodedPOST hazır değerler.

GÜNCELLEME

Benim önerim ikisini de dahil etmek

  • gizli bir form öğesi
  • bir sorgu dizesi parametresi

2
Bu durumda ajax kullanamam. Her nasılsa, bir aspx sayfasına Gönderiyorum ve Yönlendiriyorum. Yeniden yönlendirme, Gönderen tarafından gerçekleştirilir.
Rıza Owliaei

2
Benim önerim 1) gizli bir form öğesi 2) bir sorgu dizesi parametresi
Aliostad

1
Dosyaları seri hale getirebilir misin? Düşündüm ki: Hayır.
Fallenreaper

Evet, dosyaları Base64 dizelerine serileştirebilirsiniz, Base64 oldukça hantal olabileceğinden, büyük dosyalar için belki de çok beceriksizdir. Ancak her serileştirme yöntemi de öyle.
Felype

Bunu yalnızca bir sorgu dizesi parametresi olarak ekler ve sunucunuzun bir başlık veya sorgu dizesi olup olmadığını ve belirteci olup olmadığını kontrol etmesini isterim.
James111

14

Sayfada bir çerez değeri ayarlayın ve ardından sunucu tarafında geri okuyun.

Belirli bir başlık ayarlayamazsınız, ancak değere içerik gövdesinden değil başlıklar bölümünden erişilebilir.


4
Not: Eklemek istediğiniz başlığı CSRF koruması içinse, emin olun do not bir çerez olarak bu belirteç depolayabilir veya daha CSRF koruması yenmek gerekir.
Jimothy

5

Gönderen FormData documention:

XMLHttpRequest Düzey 2, yeni FormData arabirimi için destek ekler. FormData nesneleri, form alanlarını ve değerlerini temsil eden bir anahtar / değer çifti kümesini kolayca oluşturmanın bir yolunu sağlar ve bunlar daha sonra XMLHttpRequest send()yöntem kullanılarak kolayca gönderilebilir .

Bir ile XMLHttpRequestözel üstbilgileri ayarlayabilir ve ardından POST.


2

Aslında bunu istemci tarafında bir çerez kaydetmenin daha iyi bir yolu. Daha sonra, söz konusu etki alanı için her sayfa başlığıyla birlikte çerez otomatik olarak gönderilir.

Node-js'de, çerez ayrıştırıcı ile çerezler kurabilir ve kullanabilirsiniz .

Bir örnek:

res.cookie('token', "xyz....", { httpOnly: true });

Şimdi buna erişebilirsiniz:

app.get('/',function(req, res){
 var token = req.cookies.token
});

Not o httpOnly:trueçerez genellikle erişilebilir elle veya javascript ile erişilebildiği ve tek tarayıcı olmasını sağlar. Bazı başlıkları veya güvenlik belirteçlerini ajax aracılığıyla değil, bir form gönderisiyle göndermek istiyorsanız, çoğu durumda bu güvenli bir yol olarak kabul edilebilir. Bununla birlikte, genellikle durum olan, kullanıcıyla ilgili bazı hassas bilgileri depoluyorsanız, verilerin güvenli protokol / SSL üzerinden gönderildiğinden emin olun.


1

İşte pub / jade'de yaptığım şey

extends layout
block content
    script(src="/jquery/dist/jquery.js")
    script.
      function doThePost() {
        var jqXHR = $.ajax({ 
            type:'post'
            , url:<blabla>
            , headers: { 
                'x-custom1': 'blabla'
                , 'x-custom2': 'blabla'
                , 'content-type': 'application/json'
            }
            , data: {
                'id': 123456, blabla
            }
        })
        .done(function(data, status, req) { console.log("done", data, status, req); })
        .fail(function(req, status, err) { console.log("fail", req, status, err); });
      }
    h1= title
    button(onclick='doThePost()') Click


0

$ .Ajax komutunun doğal davranışından kaçınmak için kullanabilirsiniz <form method="POST">. Örneğin, gönderim düğmesine bir olay ekleyebilir ve POST isteğini AJAX olarak değerlendirebilirsiniz.


2
Bu formu , bir aspx sayfasına yönlendirmek ve bazı verileri göndermek için kullanıyorum .
Rıza Owliaei

daha iyi anlamamı sağla: 1) kullanıcı gönderileri 2) verileri kaydetme 3) yönlendirme. Yaptığın bu mu?
Fabio Buda

Bir Html sayfasında (Kaynak), başka bir html sayfasına (Proxy) işaret eden bir iFrame var. Proxy sayfası, bir form öğesi aracılığıyla bazı parametreleri (Getirilemez) gönderir. Yönlendirme ve gönderi, form gönderimi sırasında gerçekleşir. Hedef olarak aspx sayfasında yayınlanan parametreleri alıyorum.
Rıza Owliaei

0

Her ajax isteğine eklemek için burada yanıtladım: https://stackoverflow.com/a/58964440/1909708


Belirli ajax isteklerine eklemek için, şu şekilde uyguladım:

var token_value = $("meta[name='_csrf']").attr("content");
var token_header = $("meta[name='_csrf_header']").attr("content");
$.ajax("some-endpoint.do", {
 method: "POST",
 beforeSend: function(xhr) {
  xhr.setRequestHeader(token_header, token_value);
 },
 data: {form_field: $("#form_field").val()},
 success: doSomethingFunction,
 dataType: "json"
});

metaJSP'ye öğeleri eklemelisiniz , örneğin

<html>
<head>        
    <!-- default header name is X-CSRF-TOKEN -->
    <meta name="_csrf_header" content="${_csrf.headerName}"/>
    <meta name="_csrf" content="${_csrf.token}"/>

Bir form gönderme (eşzamanlı) isteğine eklemek için, onu burada yanıtladım: https://stackoverflow.com/a/58965526/1909708

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.