Świetna odpowiedź. Granica jest tylko „kluczem” do oddzielenia wielu „części” ładunku wieloczęściowego. Zwykle coś takiego jak „&” wystarcza do oddzielenia zmiennych, ale potrzebujesz czegoś bardziej unikalnego, aby oddzielić ładunki w ładunku.
user2483724
1
@ K3rnel31 Oczywiście, chyba że nowy ciąg graniczny ma taką samą długość.
Oscar Mederos
5
Myślę, że wartość graniczna zadeklarowana w nagłówku Content-Type będzie w rzeczywistości -XXX ---, ponieważ podczas oddzielania części należy zapisać dodatkowe „-” (stąd --- XXX ---)
Theodore K ,
96
Dokładna odpowiedź na pytanie brzmi: tak, możesz użyć dowolnej wartości dlaboundary parametru , pod warunkiem , że nie przekracza on 70 bajtów i składa się tylko z 7-bitowychUS-ASCII (drukowalnych) znaków.
Jeśli używasz jednego z multipart/*typów treści, tak naprawdę jest potrzebne , aby określić boundaryparametr w Content-Typenagłówku, w przeciwnym razie serwer (w przypadku żądania HTTP) nie będzie w stanie analizować ładunek.
Prawdopodobnie chcesz również ustawić charsetparametr UTF-8w swoimContent-Type nagłówku, chyba że masz absolutną pewność, że US-ASCIIw danych danych użytych zostanie tylko znaków.
W przeciwieństwie do niektórych innych wartości parametrów, w wartościach parametru charset NIE rozróżnia się wielkości liter. Domyślny zestaw znaków, który należy przyjąć przy braku parametru zestawu znaków, to US-ASCII.
5.1 Typ nośnika wieloczęściowego
Jak podano w definicji pola Content-Transfer-Encoding [RFC 2045], kodowanie inne niż „7bit”, „8bit” lub „binarny” jest niedozwolone dla jednostek typu „multipart”. „Wieloczęściowe” ograniczniki granic i pola nagłówka są zawsze reprezentowane jako 7-bitowe US-ASCII w każdym przypadku (chociaż pola nagłówka mogą kodować tekst nagłówka spoza US-ASCII zgodnie z RFC 2047), a dane w częściach ciała mogą być kodowane na część po części, z polami Content-Transfer-Encoding dla każdej odpowiedniej części ciała.
Pole typu treści dla jednostek wieloczęściowych wymaga jednego parametru, „granicy”. Linia ogranicznika granicy jest następnie definiowana jako linia składająca się w całości z dwóch znaków łącznika („-”, wartość dziesiętna 45), po których następuje wartość parametru granicy z pola nagłówka Content-Type, opcjonalne białe spacje liniowe i kończący CRLF.
Ograniczniki granic nie mogą pojawiać się w zamkniętym materiale i nie mogą być dłuższe niż 70 znaków, nie licząc dwóch wiodących łączników.
Granica linii ograniczającej po ostatniej części ciała jest wyróżniającym ogranicznikiem, który wskazuje, że nie będą następować dalsze części ciała. Taka linia separatora jest identyczna z poprzednimi liniami separatora, z dodanymi dwoma dodatkowymi myślnikami po wartości parametru granicy.
Najbardziej podoba mi się ta odpowiedź, ponieważ cytaty z RFC na temat tego, jak określone są łączniki .
Rick
@Rick Istnieje uzasadniony powód, aby IETF to zrobił - chociaż wszystkie wyglądają prawie tak samo, tylko jedna z następujących czterech jest poprawnym znakiem łącznika: ˗ - - -
antichris
ha, kiedy powiedziałem hipensy, mam na myśli twoją odpowiedź, która hipoteza jest zdefiniowana w standardzie. Byłem zdezorientowany, które hipogi są „zdefiniowane przez klienta”, a które „zdefiniowane przez specyfikację”
Rick
31
multipart / form-data zawiera granicę dla oddzielnych par nazwa / wartość. Granica działa jak znacznik każdej porcji par nazwa / wartość przekazywanych po przesłaniu formularza. Granica jest automatycznie dodawana do typu treści nagłówka żądania.
Formularz z atrybutem enctype = "multipart / form-data" będzie miał nagłówek żądania Content-Type: multipart / form-data; granica --- WebKit193844043-h (wartość generowana przez przeglądarkę ).
Po stronie usługi jest on wykorzystywany w postaci @Consumes („multipart / form-data”).
Uwaga: podczas testowania usługi internetowej przy użyciu listonosza chrome należy zaznaczyć opcję danych formularza (przycisk radiowy) i menu Plik w menu rozwijanym, aby wysłać załącznik. Jawne udostępnianie typu zawartości jako danych wieloczęściowych / formularzy powoduje błąd. Ponieważ brakuje granicy, ponieważ zastępuje ona żądanie zawinięcia post man do serwera z typem zawartości, dodając granicę, która działa dobrze.
Odpowiedzi:
Tak.
Nie. HTML nie ma z tym nic wspólnego. Czytaj poniżej.
Tak.
Jeśli chcesz wysłać następujące dane do serwera internetowego:
użycie
application/x-www-form-urlencoded
byłoby takie:Jak widać, serwer wie, że parametry są oddzielone znakiem ampersand
&
. Gdyby&
jest to wymagane dla wartości parametru, należy ją zakodować.Skąd więc serwer wie, gdzie wartość parametru zaczyna się i kończy, gdy odbierze żądanie HTTP za pomocą
multipart/form-data
?Korzystanie z granicy , podobnie jak
&
.Na przykład:
W takim przypadku wartością graniczną jest
XXX
. Podajesz go wContent-Type
nagłówku, aby serwer wiedział, jak podzielić otrzymane dane.Musisz więc:
Użyj wartości, która nie pojawi się w danych HTTP wysyłanych do serwera.
Zachowaj spójność i używaj tej samej wartości wszędzie w komunikacie żądania.
źródło
Dokładna odpowiedź na pytanie brzmi: tak, możesz użyć dowolnej wartości dla
boundary
parametru , pod warunkiem , że nie przekracza on 70 bajtów i składa się tylko z 7-bitowychUS-ASCII
(drukowalnych) znaków.Jeśli używasz jednego z
multipart/*
typów treści, tak naprawdę jest potrzebne , aby określićboundary
parametr wContent-Type
nagłówku, w przeciwnym razie serwer (w przypadku żądania HTTP) nie będzie w stanie analizować ładunek.Prawdopodobnie chcesz również ustawić
charset
parametrUTF-8
w swoimContent-Type
nagłówku, chyba że masz absolutną pewność, żeUS-ASCII
w danych danych użytych zostanie tylko znaków.Kilka istotnych fragmentów z RFC2046 :
4.1.2 Parametr zestawu znaków:
5.1 Typ nośnika wieloczęściowego
Oto przykład z dowolną granicą:
źródło
multipart / form-data zawiera granicę dla oddzielnych par nazwa / wartość. Granica działa jak znacznik każdej porcji par nazwa / wartość przekazywanych po przesłaniu formularza. Granica jest automatycznie dodawana do typu treści nagłówka żądania.
Formularz z atrybutem enctype = "multipart / form-data" będzie miał nagłówek żądania Content-Type: multipart / form-data; granica --- WebKit193844043-h (wartość generowana przez przeglądarkę ).
Przekazany ładunek wygląda mniej więcej tak:
Po stronie usługi jest on wykorzystywany w postaci @Consumes („multipart / form-data”).
Uwaga: podczas testowania usługi internetowej przy użyciu listonosza chrome należy zaznaczyć opcję danych formularza (przycisk radiowy) i menu Plik w menu rozwijanym, aby wysłać załącznik. Jawne udostępnianie typu zawartości jako danych wieloczęściowych / formularzy powoduje błąd. Ponieważ brakuje granicy, ponieważ zastępuje ona żądanie zawinięcia post man do serwera z typem zawartości, dodając granicę, która działa dobrze.
Patrz RFC1341, sekcja 7.2 Wieloczęściowy typ zawartości
źródło