Jak ustawić pole nagłówka w POST formularz?


Odpowiedzi:


61

Nie da się tego zrobić - AFAIK.

Możesz jednak użyć na przykład jquery (chociaż możesz to zrobić za pomocą zwykłego javascript), aby serializować formularz i wysłać (za pomocą AJAX) podczas dodawania niestandardowego nagłówka.

Spójrz na jquery, serializektóre zmienia FORMULARZ HTML na form-url-encodedwartości gotowe do POST.

AKTUALIZACJA

Proponuję uwzględnić jedno i drugie

  • ukryty element formularza
  • parametr ciągu zapytania

2
W tym przypadku nie mogę użyć Ajax. W jakiś sposób jestem Post i przekierowuję do strony aspx. Przekierowanie odbywa się przez From Post.
Reza Owliaei


1
Czy możesz serializować pliki? Pomyślałem: Nie.
Fallenreaper

Tak, możesz serializować pliki do ciągów Base64, być może bardzo niezdarnie w przypadku dużych plików, ponieważ Base64 może być dość nieporęczny. Ale tak jest z każdą metodą serializacji.
Felype

Dodałbym go tylko jako parametr ciągu zapytania i poprosiłbym serwer o sprawdzenie, czy istnieje nagłówek lub ciąg zapytania i ma token.
James111,

14

Ustaw wartość pliku cookie na stronie, a następnie przeczytaj ją po stronie serwera.

Nie będzie można ustawić określonego nagłówka, ale wartość będzie dostępna w sekcji nagłówków, a nie w treści.


3
Uwaga: jeśli nagłówek, który chcesz dodać, służy do ochrony CSRF, upewnij się, że nie przechowujesz tego tokena w pliku cookie, w przeciwnym razie pokonasz ochronę CSRF.
Jimothy,

5

Z dokumentacji FormData :

XMLHttpRequest Level 2 dodaje obsługę nowego interfejsu FormData. Obiekty FormData umożliwiają łatwe tworzenie zestawu par klucz / wartość reprezentujących pola formularza i ich wartości, które można następnie łatwo wysłać za pomocą XMLHttpRequest send()metody.

Za pomocą XMLHttpRequestmożesz ustawić niestandardowe nagłówki, a następnie wykonać POST.


2

W rzeczywistości lepszy sposób, aby to zrobić, aby zapisać plik cookie po stronie klienta. Następnie plik cookie jest automatycznie wysyłany z każdym nagłówkiem strony dla tej konkretnej domeny.

W node-js możesz skonfigurować pliki cookie i używać ich z parserem plików cookie .

przykład:

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

Teraz możesz uzyskać dostęp do tego:

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

Należy pamiętać, że httpOnly:truezapewnia to, że plik cookie nie jest zwykle dostępny ręcznie lub przez JavaScript i tylko przeglądarka ma do niego dostęp. Jeśli chcesz wysłać jakieś nagłówki lub tokeny bezpieczeństwa z postem formularza, a nie przez AJAX, w większości sytuacji można to uznać za bezpieczny sposób. Chociaż upewnij się, że dane są przesyłane przez bezpieczny protokół / ssl, jeśli przechowujesz poufne informacje dotyczące użytkownika, co zwykle ma miejsce.


1

Oto, co zrobiłem w pub / jade

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

Możesz użyć $ .ajax, aby uniknąć naturalnego zachowania <form method="POST">. Możesz na przykład dodać zdarzenie do przycisku przesyłania i traktować żądanie POST jako AJAX.


2
Używam tego formularza, aby przekierować na stronę aspx i opublikować niektóre dane.
Reza Owliaei

spraw, żebym lepiej zrozumiał: 1) posty użytkowników 2) zapisywanie danych 3) przekierowanie. Czy to co robisz?
Fabio Buda

Mam element iFrame na stronie HTML (źródło), wskazujący na inną stronę html (serwer proxy). Strona proxy publikuje jakiś parametr (bez pobierania) za pośrednictwem elementu formularza. Przekierowanie i wysłanie wiadomości następuje po przesłaniu formularza. Pobieram opublikowane parametry na stronie aspx jako miejsce docelowe.
Reza Owliaei

0

Aby dodać do każdego żądania AJAX, odpowiedziałem na to tutaj: https://stackoverflow.com/a/58964440/1909708


Aby dodać do poszczególnych żądań Ajax, oto jak zaimplementowałem:

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"
});

Musisz dodać metaelementy w JSP, np

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

Aby dodać do żądania przesłania formularza (synchroniczne), odpowiedziałem na to tutaj: https://stackoverflow.com/a/58965526/1909708

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.