Làm cách nào để đặt trường Tiêu đề trên ĐĂNG biểu mẫu?


95

Làm cách nào để đặt trường tùy chỉnh trong tiêu đề ĐĂNG khi gửi biểu mẫu?


1
Bạn sử dụng XmlHttpRequestcó nghĩa là? Hay chỉ là một bài đăng dạng HTML thuần túy?
Aliostad

không, tôi đang sử dụng hành động biểu mẫu: post
Reza Owliaei

Câu trả lời:


60

Nó không thể được thực hiện - AFAIK.

Tuy nhiên, bạn có thể sử dụng jquery ví dụ (mặc dù bạn có thể làm điều đó với javascript thuần túy) để tuần tự hóa biểu mẫu và gửi (sử dụng AJAX) trong khi thêm tiêu đề tùy chỉnh của bạn.

Nhìn vào jquery serializethay đổi một BIỂU MẪU HTML thành form-url-encodedcác giá trị sẵn sàng cho ĐĂNG.

CẬP NHẬT

Đề xuất của tôi là bao gồm một trong hai

  • một phần tử dạng ẩn
  • một tham số chuỗi truy vấn

2
Tôi không thể sử dụng ajax trong trường hợp này. Bằng cách nào đó, tôi đang Đăng và Chuyển hướng đến một trang aspx. Chuyển hướng được thực hiện bởi From Post.
Reza Owliaei

2
Đề nghị của tôi là để bao gồm hoặc là 1) một hình thức yếu tố ẩn 2) một tham số chuỗi truy vấn
Aliostad

1
Bạn có thể tuần tự hóa các tập tin không? Tôi nghĩ: Không
Fallenreaper

Có, bạn có thể tuần tự hóa các tệp thành chuỗi Base64, có lẽ rất vụng về đối với các tệp lớn vì Base64 có thể khá cồng kềnh. Nhưng mọi phương pháp tuần tự hóa cũng vậy.
Felype

Tôi chỉ muốn thêm nó dưới dạng tham số chuỗi truy vấn và kiểm tra máy chủ của bạn để xem liệu tiêu đề hoặc chuỗi truy vấn có tồn tại và có mã thông báo hay không.
James111

14

Đặt giá trị cookie trên trang, sau đó đọc lại phía máy chủ.

Bạn sẽ không thể đặt một tiêu đề cụ thể, nhưng giá trị sẽ có thể truy cập được trong phần tiêu đề chứ không phải nội dung.


3
Lưu ý: Nếu tiêu đề bạn muốn thêm là để bảo vệ CSRF, hãy đảm bảo rằng bạn không lưu trữ mã thông báo đó trong cookie, nếu không bạn sẽ đánh bại tính năng bảo vệ CSRF.
Jimothy

5

Từ tài liệu FormData :

XMLHttpRequest Mức 2 bổ sung hỗ trợ cho giao diện FormData mới. Các đối tượng FormData cung cấp một cách để dễ dàng xây dựng một tập hợp các cặp khóa / giá trị đại diện cho các trường biểu mẫu và giá trị của chúng, sau đó có thể dễ dàng gửi đi bằng XMLHttpRequest send()phương thức này.

Với một, XMLHttpRequestbạn có thể đặt các tiêu đề tùy chỉnh và sau đó thực hiện POST.


2

Trên thực tế, một cách tốt hơn để làm điều đó là lưu cookie ở phía máy khách. Sau đó, cookie sẽ tự động được gửi với mọi tiêu đề trang cho tên miền cụ thể đó.

Trong node-js, bạn có thể thiết lập và sử dụng cookie với cookie-parser .

một ví dụ:

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

Bây giờ bạn có thể truy cập vào cái này:

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

Lưu ý rằng httpOnly:trueđảm bảo rằng cookie thường không thể truy cập theo cách thủ công hoặc thông qua javascript và chỉ có trình duyệt mới có thể truy cập nó. Nếu bạn muốn gửi một số tiêu đề hoặc mã thông báo bảo mật bằng một bài đăng trên biểu mẫu mà không phải thông qua ajax, trong hầu hết các tình huống, đây có thể được coi là một cách an toàn. Mặc dù hãy đảm bảo rằng dữ liệu được gửi qua giao thức an toàn / ssl nếu bạn đang lưu trữ một số thông tin nhạy cảm liên quan đến người dùng, điều này thường xảy ra.


1

Đây là những gì tôi đã làm trong 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

Bạn có thể sử dụng $ .ajax để tránh các hành vi tự nhiên của <form method="POST">. Ví dụ: bạn có thể thêm một sự kiện vào nút gửi và coi yêu cầu ĐĂNG là AJAX.


2
Tôi sử dụng biểu mẫu này gửi để chuyển hướng đến trang aspx và đăng một số dữ liệu.
Reza Owliaei

giúp tôi hiểu rõ hơn: 1) bài đăng của người dùng 2) tiết kiệm dữ liệu 3) chuyển hướng. Nó là những gì bạn làm?
Fabio Buda

Tôi có một iFrame trong trang Html (Nguồn), trỏ đến một trang html khác (Proxy). Trang proxy đăng một số tham số (Không Nhận) thông qua một phần tử biểu mẫu. Chuyển hướng và đăng sẽ xảy ra khi gửi biểu mẫu. Tôi lấy các thông số đã đăng trong trang aspx làm đích.
Reza Owliaei

0

Để thêm vào mọi yêu cầu ajax, tôi đã trả lời nó tại đây: https://stackoverflow.com/a/58964440/1909708


Để thêm vào các yêu cầu ajax cụ thể, đây là cách tôi đã triển khai:

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

Bạn phải thêm các metaphần tử trong JSP, ví dụ:

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

Để thêm vào yêu cầu gửi biểu mẫu (đồng bộ), tôi đã trả lời yêu cầu đó tại đây: https://stackoverflow.com/a/58965526/1909708

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.