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.