Wednesday 11 October 2017

Opcje Przekazywania Treści Kodowanie Binarne


Może to być trochę gęste, ale sekcja Content-Transfer-Encoding w RFC 1341 ma wszystkie szczegóły. Sytuacja trochę się pogorszy. Oto moje podsumowanie. SMTP, z definicji RFC 821, ogranicza pocztę do linii z 1000 znaków z 7 bitów każda Oznacza to, że żaden z bajtów, z którymi wysyłasz rurę, może mieć najbardziej znaczący bit najwyższego rzędu ustawiony na 1. Treść, którą chcemy wysłać często nie będzie przestrzegać tego ograniczenia naturalnie Pomyśl o obrazie plik lub plik tekstowy zawierający znaki Unicode bajty tych plików często mają ich 8-bitową bitę na 1 SMTP nie pozwala na to, więc musisz użyć kodowania transferowego, aby opisać, w jaki sposób pracowałeś nad niedopasowaniem. nagłówek Content-Transfer-Encoding opisuje regułę, którą wybrałeś, aby rozwiązać ten problem. Bit Encoding.7bit oznacza po prostu, że moje dane składają się wyłącznie z znaków US-ASCII, które używają niższych 7 bitów dla każdego znaku W zasadzie gwarantujesz, że wszystkie bajty w Twoim koncie namiot już przestrzega ograniczeń SMTP i dlatego nie potrzebuje specjalnego traktowania Możesz go przeczytać tak jak jest. Zauważ, że jeśli wybierzesz 7bit, zgadzasz się, że wszystkie linie w Twojej zawartości mają długość mniejszą niż 1000 znaków. Dopóki treść przestrzega tych reguł, to najlepszym kodem transferowym jest 7-bitowy kod, ponieważ nie ma potrzeby wykonywania dodatkowych czynności, które trzeba przeczytać, aby zapisać bajty, gdy są one wyrzucane z rury. Jest to również łatwe w obsłudze treść 7-bitową i sensowne. pomysł jest taki, że jeśli ponownie piszesz w prostym języku angielskim, będziesz w porządku, ale to nie było prawdziwe w 2005 r. i nie jest to prawda today.8Bit Encoding.8bit oznacza moje dane mogą zawierać rozszerzone znaki ASCII mogą używać ósmego ósmego bitu aby wskazywać znaki specjalne spoza standardowych znaków 7-bitowych US-ASCII Tak jak w przypadku 7-bitowego limitu nadal ma 1000-znakowy limit limitu linii, podobnie jak 7-bitowy, nie wykonuje żadnej transformacji bajtów, gdy są zapisywane do lub odczytywane z drut To po prostu oznacza, że ​​nie jesteś gua że żaden z bajtów będzie miał najwyższy odbiór bitowy 1. To wydaje się być lepszym krokiem od wersji 7bit, ponieważ daje większą swobodę w treściach. Jednak RFC 1341 zawiera ten słodkość. Takie wydanie tego dokumentu jest nie ma standardowych przewozów internetowych, do których uzasadnione jest włączenie niezarządzanych 8-bitowych lub binarnych danych w korespondencji seryjnej W związku z tym nie ma okoliczności, w których 8-bitowy lub binarny kod Content-Transfer-Encoding jest rzeczywiście legalny w internecie. RFC 1341 wychodzi ponad 20 lata temu Od tej pory zdobyliśmy 8-bitowe rozszerzenia MIME w RFC 6152 Ale nawet wtedy limity linii mogą nadal obowiązywać. Należy zauważyć, że to rozszerzenie NIE wyeliminuje możliwości serwera linii SMTP ograniczających limity długości mogą swobodnie wdrożyć to rozszerzenie, ale mimo to ustawić limit długości linii nie niższy niż 1000 octet. Binary Encoding. binary jest taki sam jak 8bit, z wyjątkiem tego, że nie ma ograniczenia długości linii Możesz nadal zawierać dowolne znaki, które chcesz, i nie ma żadnego dodatkowego kodowania Simil ar do 8bit RFC 1341 stwierdza, że ​​to nie jest prawomocne szyfrowanie transferu kodowania RFC 3030 rozszerzone to z BINARYMIME. Quoted Printable. Before przedłużenie 8BITMIME, nie było być sposobem, aby wysłać zawartość, która nie może być 7bit nad plikami SMTP HTML, może mieć więcej niż 1000 znaków i pliki z międzynarodowymi literami są dobrymi przykładami tego Kodowanie podane w cudzysłowiu Zdefiniowane w Rozdziale 5 1 RFC 1341 jest zaprojektowane do obsługi tego ma dwa rzeczy. Określa, jak uciec poza USA-ASCII znaków, dzięki czemu mogą być reprezentowane tylko w 7-bitowych znakach Wersja skrócona, wyświetlana jako znak równości plus dwa znaki 7-bitowe. Określa, że ​​linie nie będą większe niż 76 znaków, a przerwy linii będą reprezentowane za pomocą znaków specjalnych które są następnie uciekające. Wydrukowany kod z powodu ucieczki i krótkich linii jest dużo trudniejszy do przeczytania przez człowieka niż 7bit lub 8bit, ale obsługuje znacznie szerszy zakres możliwych treści. Base64 Encoding. If Twoje dane są w większości nie-tekst z pliku obrazu, nie masz wiele opcji 7-bit jest poza tabelą 8-bitową i binarne nie były obsługiwane przed rozszerzeniem MIME RFC cytowane-drukować będzie działać, ale jest naprawdę niewydajny każdy bajt będzie reprezentowane przez 3 znaki. base64 jest dobrym rozwiązaniem dla tego typu danych Koduje 3 surowe bajty, ponieważ cztery znaki US-ASCII, które są stosunkowo wydajne, RFC 1341 dodatkowo ogranicza długość linii kodowanych bazą danych do 76 znaków w celu dopasowania do SMTP, ale jest to stosunkowo łatwe do zarządzania, gdy tylko dzielisz lub łącząc dowolne znaki o stałych długościach. Duże minusem jest to, że dane z bazy kodowanej w bazie Base64 są całkiem nie do odczytania przez ludzi, nawet jeśli jest to tylko zwykły tekst poniżej. Pole Content-Transfer-Encoding Header 5. Pole Header Content-Transfer-Encoding. Niektóre typy zawartości, które mogłyby być transportowane przez e-mail są reprezentowane, w naturalnym formacie, jako 8-bitowy znak lub dane binarne dane nie mogą być przesyłane w ramach niektórych protokołów transportowych Na przykład RFC 821 ogranicza wiadomości e-mail do danych 7-bitowych w formacie ASCII z liniami nie dłuższy niż 1000 znaków Dlatego też konieczne jest zdefiniowanie standardowego mechanizmu ponownego kodowania takich danych w 7-bitowy format krótkiego wiersza Ten dokument określa, że ​​takie kodowanie zostanie wskazane przez nagłówek Content-Transfer-Encoding Pole Content-Transfer-Encoding służy do wskazania typu transformacji, która została użyta do reprezentowania ciało w sposób akceptowalny w transporcie. W przeciwieństwie do typów treści, proliferacja wartości Content-Transfer-Encoding jest niepożądana i niepotrzebna. Jednak nie wydaje się, aby utworzenie tylko jednego mechanizmu Content-Transfer-Encoding było możliwe. kompaktowe i wydajne kodowanie w dużej mierze danych binarnych oraz chęć odczytywania kodowania danych, które są przeważnie, ale nie w całości, 7-bitowe. Z tego powodu co najmniej dwa mech Analizy są niezbędne do odczytania kodowania i gęstego kodowania. Pole Kodowanie-Content-Transfer służy do określania odwzorowania odwrotnego między natywną reprezentacją typu danych a reprezentacją, którą można łatwo wymienić, stosując 7-bitowe protokoły transportu poczty, takie jak jako zdefiniowane przez RFC 821 SMTP To pole nie zostało zdefiniowane przez żadną poprzednią standardową Wartość pola s to pojedynczy token określający typ kodowania, jak podano poniżej formalnie. Te wartości nie są rozróżniane na wielkie i małe litery, czyli Base64, BASE64 i bAsE64 są równoważne Typ kodowania 7BIT wymaga, aby ciało znajdowało się już w siedmiobitowej reprezentacji pocztowej Jest to wartość domyślna, czyli Content-Transfer-Encoding 7BIT, jeśli pole nagłówka Content-Transfer-Encoding nie ma wartości. Wartości 8-bitowe, 7-bitowe i binarne oznaczają, że kodowanie nie zostało wykonane. Są jednak potencjalnie użyteczne jako wskazania rodzaju danych zawartych w obiekcie, a następnie które mogą wymagać przeprowadzenia transmisji w danym systemie transportowym W szczególności. Różnica między 8-bitowym lub dowolnym innym możliwym znacznikiem szerokości bitowej a tokenem binarnym polega na tym, że binarne nie wymaga przestrzegania żadnych ograniczeń w linii długości lub semantyki SMTP CRLF, a żetony o szerokości bitowej wymagają takiego przylegania. Jeśli ciało zawiera dane w dowolnej szerokości bitowej innej niż 7-bitowa, należy użyć odpowiedniej tokeny kodującej Content-Transfer-Encoding, np. 8-bitowej dla niezakodowanych 8-bitowych danych Jeśli ciało zawiera dane binarne, musi być użyty binarny znacznik kodowania treści-transferu. W miarę potrzeb można definiować nowe wartości Content-Transfer-Encoding, ale należy używać znaku x, który jest nazwa poprzedzona znakiem X-, aby wskazać jego niestandardowy status, np. Content-Transfer-Encoding x-mój-nowy-kodujący Jednak w przeciwieństwie do Typy zawartości i podtypów, tworzenie nowych wartości Content-Transfer-Encoding jest wyraźnie i zdecydowanie zniechęcony, jak się wydaje prawdopodobne utrudnia interoperacyjność z niewielkimi korzyściami Korzystanie z nich dozwolone jest wyłącznie w wyniku umowy między współpracującymi agentami użytkowników. Jeśli w nagłówku wiadomości pojawi się nagłówek wiadomości Content-Transfer-Encoding, dotyczy całego całego tego komunikatu. Pole nagłówka Content-Transfer-Encoding pojawia się jako część nagłówków nagłówka części ciała, dotyczy tylko korpusu tej części ciała Jeśli jednostka jest typu multipart lub message, Content-Transfer-Encoding nie może mieć żadnej wartości inne niż bitowe szerokości, np. 7bit, 8bit, etc lub binarne. Należy zauważyć, że adresy e-mail są zorientowane na charakterystykę, a mechanizmy opisane tutaj są mechanizmami kodowania arbitralnych strumieni oktetowych, a nie strumieni bitów. Jeśli strumień bitowy ma być szyfrowany za pomocą jednego z tych mechanizmów, musi najpierw zostać przekształcony w 8-bitowy bajtowy strumień przy użyciu standardowego, big-endianowego polecenia sieciowego, w którym wcześniejsze bity w strumieniu stają się wyższymi brzegami w bajtowym strumieniu bitów, który nie kończy się w 8-bitowa granica musi być wypełniona zerami Ten dokument stanowi mechanizm zapisujący dodanie takiego napełnienia w przypadku aplikacji Content-Type, która ma parametr wypełniania. Mechanizmy kodowania zdefiniowane tutaj wyraźnie kodują wszystkie dane w ASCII. na przykład załóżmy, że jednostka ma pola nagłówka, takie jak. To musi być interpretowane w ten sposób, że ciało jest kodowanie ASCII bazą ASCII w standardzie ISO-8859-1 i będzie znajdować się w tym zestawie znaków ponownie po dekodowaniu. następujące sekcje definiują dwa standardowe mechanizmy kodowania Definicja nowych kodowań-transfer-transferów jest wyraźnie zniechęcona i powinna pojawić się tylko wtedy, gdy jest to absolutnie konieczne Wszystkie przestrzenie nazw kodowania transferu treści, z wyjątkiem tych, które zaczynają się od X-, są wyraźnie zastrzeżone dla IANA do wykorzystania w przyszłości Prywatne porozumienia dotyczące kodowania treści-transferu są również wyraźnie zniechęcone. Każdy element wartości Content-Transfer-Encoding może być użyty tylko w określonych typach zawartości. W szczególności, jest zabronione używanie jakichkolwiek kodowań innych niż 7bit, 8bit lub binarny z dowolnym typem zawartości, który rekurencyjnie zawiera inne pola typu Content-Type, w szczególności wielokrotne i typu wiadomości Content-Types Wszystkie szyfrowania, które są wymagane dla jednostek typu multipart lub message muszą należy wykonać na najniższym poziomie poprzez kodowanie rzeczywistego ciała, które musi zostać zakodowane. Pole Content-Transfer-Encoding Header. Many Typy zawartości, które mogłyby być transportowane przez e-mail są reprezentowane, w naturalnym formacie, jako 8- bitowy znak lub dane binarne Te dane nie mogą być przesyłane w niektórych protokołach transportowych Na przykład RFC 821 ogranicza wiadomości e-mail do 7-bitowych danych US-ASCII o długości 1000 znaków. W związku z tym konieczne jest zdefiniowanie standardowego mechanizmu ponownego kodowania takie dane w 7-bitowym formacie krótkoformatowym Dokument ten określa, że ​​takie kodowanie zostanie wskazane przez nowy nagłówek Content-Transfer-Encoding Pole Content-Transfer-Encoding służy do wskazania typu transformacji, która została użyta w celu reprezentowania organizmu w sposób akceptowalny dla transportu. W przeciwieństwie do typów zawartości, proliferacja wartości Content-Transfer-Encoding jest niepożądana i niepotrzebna. Jedynie utworzenie tylko jednego mechanizmu Content-Transfer-Encoding nie wydaje się możliwe Istnieje kompromis pomiędzy pragnieniem zwartego i skutecznego kodowania w dużej mierze danych binarnych i chęć czytelnego kodowania danych, które są głównie, ale nie w całości, 7-bitowe Dane Z tego powodu co najmniej dwa mechanizmy kodowania są konieczne czytelne kodowanie i gęste kodowanie. Pole Kodowanie-transfer-kod jest przeznaczone do określania odwzorowania odwrotnego między natywną reprezentacją typu danych a reprezentacją, która może być łatwo wymieniona przy użyciu 7-bitowych protokołów transportu poczty, takich jak zdefiniowane przez RFC 821 SMTP To pole nie zostało zdefiniowane przez jakąkolwiek poprzednią standardową Wartość pola s to pojedynczy token określający typ kodowania, jak wymieniono poniżej Formalnie Te wartości nie są rozróżniane na wielkie i małe litery Oznacza to, że Base64, BASE64 i bAsE64 są równoważne Typ kodowania 7BIT wymaga, aby ciało znajdowało się już w siedmiobitowej reprezentacji poczty Jest to wartość domyślna - czyli zawartość - Transfer-Encoding 7BIT przyjmuje się, jeśli pole nagłówka Content-Transfer-Encoding nie jest obecne. Wartości 8 bitowe, 7 bitowe i binarne wszystkie sugerują, że kodowanie NO zostało wykonane Jednak są one potencjalnie użyteczne jako wskazania rodzaju danych w obiekcie, a zatem rodzaju kodowania, które może być konieczne do transmisji w danym systemie transportowym 7 bit oznacza, że ​​dane są wszystkie przedstawione jako krótkie linie danych US-ASCII 8 bit oznacza, że ​​linie są krótkie, ale tam mogą być bohaterami innych niż ASCII oktety z ustawieniem bitów wysokiego rzędu Binarny oznacza, że ​​nie tylko znaki spoza ASCII mogą być obecne, ale także że linie nie muszą wystarczająco krótkie, aby umożliwić transport SMTP. Różnica między 8bit lub każdy inny znaczek token bitowy i token binarny to, że binarny nie wymaga przestrzegania żadnych ograniczeń długości linii lub semantyki SMTP CRLF, a żetony o szerokości bitowej wymagają takiego przylegania Jeśli ciało zawiera dane w dowolnym bit - inne niż 7-bitowe, należy użyć odpowiedniej tokeny Kodowanie-Content-Transfer-Encoding, np. 8-bitowego dla niezainodowanych 8-bitowych danych Jeśli ciało zawiera dane binarne, musi być użyty binarny znacznik kodowania treści-transferu. Rozróżnienie między wartościami Content-Transfer-Encoding binarnymi, 8 bitowymi, itd. może wydawać się nieistotne, ponieważ wszystkie z nich naprawdę oznaczają brak - to znaczy, że nie ma kodowania danych do transportu. Jednakże wyraźne oznakowanie będzie miało olbrzymią wartość do bram pomiędzy przyszłymi systemami transportu poczty elektronicznej o różnym stopniu możliwości przesyłania danych, które nie spełniają ograniczeń w transporcie RFC 821. W związku z publikacją tego dokumentu, nie ma standardowych przewozów internetowych, dla których jest uzasadniony t o obejmują niezakodowane 8-bitowe lub binarne dane w korespondencji pocztowej W związku z tym nie ma okoliczności, w których 8-bitowy lub binarny kod Content-Transfer-Encoding jest rzeczywiście legalny w internecie. W przypadku, gdy 8-bitowy lub binarny transport pocztowy stanie się rzeczywistością w poczcie internetowej lub w przypadku, gdy ten dokument jest używany w połączeniu z dowolnym innym 8-bitowym lub binarnym mechanizmem transportowym, 8-bitowe lub binarne ciało powinny być oznaczone jako takie przy użyciu tego mechanizmu. Pięć wartości określonych dla Content-Transfer - Pole kodowania nie sugeruje niczego innego niż algorytm, w którym został zakodowany, lub wymagany jest system transportowy, jeśli jest niezakodowany. W razie potrzeby można definiować nowe wartości Content-Transfer-Encoding, ale musi używać znaku x, który jest nazwą poprzedzoną przez X-, wskazującą jego niestandardowy status, np. Content-Transfer-Encoding x-mój-nowy-kodujący Jednak w odróżnieniu od Typy zawartości i podtypów, tworzenie nowych wartości Content-Transfer-Encoding jest jednoznacznie i silnie zniechęcony , ponieważ wydaje się, że może utrudniać interoperacyjność z niewielką korzyścią. Ich wykorzystanie jest dozwolone tylko w wyniku umowy między współpracującymi agentami użytkowników. Jeśli nagłówek wiadomości Content-Transfer-Encoding pojawi się jako część nagłówka wiadomości, dotyczy całego ciało tej wiadomości Jeśli nagłówki nagłówka Content-Transfer-Encoding pojawią się jako część nagłówków części ciała, to dotyczy tylko części ciała tej części ciała, jeśli jednostka jest typu multipart lub message, Content-Transfer-Encoding nie wolno mieć żadnej wartości innej niż bitowa szerokość, np. 7bit, 8bit, etc lub binarna. Należy zauważyć, że e-mail jest zorientowany na postać, więc mechanizmy opisane tutaj są mechanizmami kodowania dowolnych strumieni bajtów, a nie strumieni bitów bitowy ma być kodowany za pomocą jednego z tych mechanizmów, najpierw musi być przekształcony w 8-bitowy bajtowy strumień przy użyciu standardowego big-endianu w standardzie sieciowym, w którym wcześniejsze bity w strumieniu stają się bitami wyższego rzędu w bajt bit str eam nie kończący się na 8-bitowej granicy musi być wypełniony zerami Ten dokument stanowi mechanizm zapisujący dodanie takiego wypełnienia w przypadku aplikacji Content-Type, która ma parametr wypełniania. Mechanizmy kodowania zdefiniowane tutaj wyraźnie kodują wszystkie dane w ASCII Załóżmy na przykład, że jednostka posiada pola nagłówka, takie jak To należy interpretować w ten sposób, że ciało jest kodowanie ASCII bazą ASCII danych, które były pierwotnie w ISO-8859-1, i będzie w tym zestawie znaków ponownie po dekodowaniu Następujące sekcje definiują dwa standardowe mechanizmy kodowania Definicja nowych kodowań-transfer-transferów jest wyraźnie zniechęcona i powinna wystąpić tylko wtedy, gdy jest to absolutnie konieczne Wszystkie przestrzenie nazw kodowania transferu treści, oprócz tej, która zaczyna się od X - jest wyraźnie zarezerwowane dla IANA również do wykorzystania w przyszłości Prywatne porozumienia dotyczące kodowania treści-transferu są również wyraźnie zniechęcone. Każdy element Content-Transfer-Encoding może być użyty tylko w przypadku niektórych witryn Content - Typy W szczególności jest zabronione używanie jakichkolwiek kodowań innych niż 7bit, 8bit lub binarny z dowolnym typem zawartości, który rekurencyjnie zawiera inne pola typu Content-Type, w szczególności wielokrotne i typu komunikatów Typy zawartości Wszystkie szyfrowania, które są potrzebne dla jednostek typu wieloczęściowego lub komunikatu należy wykonać na najwyższym poziomie poprzez kodowanie rzeczywistego korpusu, który musi być zakodowany. NOTWIDZENIE ZEZWOLENIU OGRANICZENIOM Chociaż zakaz używania kodowania-przenoszenia treści na danych typu wieloczęściowego lub wiadomości może wydawać się zbyt restrykcyjny, konieczne jest zapobieganie zagnieżdżonym kodowaniu, w którym dane są przekazywane wielokrotnie przez algorytm kodowania i muszą być wielokrotnie dekodowane w celu prawidłowego wyświetlania Zagnieżdżone szyfrowania powodują znaczną złożoność dla agentów użytkowników, poza oczywistymi problemami z wydajnością, takimi wielodostępnymi kodami , mogą zasłonić podstawową strukturę wiadomości W szczególności, mogą sugerować, że kilka operacji dekodowania jest konieczne po prostu do f w jaki sposób typy obiektów zawiera wiadomość Zakaz zagnieżdżonych kodowań może skomplikować pracę pewnych bram poczty, ale wydaje się to mniej problemem niż wpływ zagnieżdżonych kodowań na agentach użytkownika. Na uwagę na relacje między typem zawartości a przekazywaniem treści - ENKODING. Może się wydawać, że kodowanie Content-Transfer-Encoding można wywnioskować na podstawie charakterystycznych typów zawartości, które mają być zakodowane, lub co najmniej, że pewne kodowanie treści - transfer - kodowanie może zostać upoważnione do użycia z specyficzne typy zawartości Istnieje kilka powodów, dla których nie ma to miejsca Po pierwsze, biorąc pod uwagę różne typy transportu używane do wysyłania poczty, niektóre szyfrowania mogą być odpowiednie dla niektórych kombinacji transportowych typu Content-Type, a nie dla innych Na przykład w 8-bitowych transport nie wymagałby kodowania w przypadku niektórych zestawów znaków, podczas gdy takie szyfrowania są wyraźnie wymagane dla 7-bitowej SMTP Po drugie, niektóre typy zawartości mogą wymagać różnych typów kodowania transferowego w różnych wersjach na przykład wiele organów PostScript może składać się wyłącznie z krótkich wierszy 7-bitowych danych, a zatem wymagać kodowania niewiele lub nie ma innych organów PostScript, zwłaszcza tych używających mechanizmu kodowania dwójkowego binarnego PostScripta poziomu 2, mogą być tylko racjonalnie reprezentowane za pomocą kodowania binarnego transportu. ponieważ typ zawartości ma być mechanizmem specyfikacji otwartej, ścisła specyfikacja skojarzenia między typami treści i kodowaniem skutecznie łączy specyfikację protokołu aplikacji z określonym transportem niższego szczebla. Nie jest to pożądane, ponieważ twórcy oprogramowania Typ zawartości nie musi być świadomy wszystkich używanych transportów i ich ograniczeń. NAZSTĘ W KODACH PRZEKŁADNIOWYCH. Kodowanie w cudzysłowiu i kodowanie w formacie base64 jest zaprojektowane tak, że możliwe jest ich konwersja Jedyna kwestia, która powstaje w takich konwersja polega na obsłudze przerw między wierszami Podczas konwersji z atrybutem nadrukowowanym na bazę64 musi zostać przeliczona przerwa wiersza w sekwencji CRLF Podobnie sekwencja CRLF w danych z bazy danych powinna być konwertowana na przerwę linii wiersza, ale tylko w przypadku konwersji danych tekstowych. UWAGA NA MODUŁ KODOWANIA KONICZKAMI W poprzednich wersjach tej notatki pojawiły się pewne zamieszanie w odniesieniu do model, w którym dane pocztowe mają być konwertowane na formę kanoniczną i szyfrowane, a zwłaszcza, jak ten proces miałby wpływ na traktowanie CRLF, biorąc pod uwagę, że reprezentacja nowych linii różni się znacznie od systemu do systemu Z tego powodu kanoniczny model kodowania jest przedstawiony jako dodatek H.5 1 Quoted-Printable Content-Transfer-Encoding. Kodowane-drukowane kodowanie służy do reprezentowania danych składających się głównie z oktetów, które odpowiadają drukowanym znakom w zestawie znaków ASCII Koduje dane w taki sposób, wynikowe oktety nie są prawdopodobnie modyfikowane przez transport poczty Jeśli zakodowane dane są przeważnie tekstem ASCII, zakodowana forma danych pozostaje w dużym stopniu rozpoznawalna przez człowieka Ciało, które ch całkowicie ASCII może być również zakodowany w Quoted-Printable w celu zapewnienia integralności danych w przypadku, gdy wiadomość przechodzi przez translację znaków lub bramę do zawijania linii. W tym kodowaniu oktety mają być reprezentowane jako określone przez następujące reguły. Reguła 1 Ogólna reprezentacja 8-bitowa. Każdy oktet, z wyjątkiem tych, które wskazują przerwanie linii zgodnie z konwencją kanoniczną formatu zakodowanych danych, może być reprezentowane przez następującą po niej dwucyfrową reprezentację szesnastkową oktetu s wartość Cyfry alfabetu szesnastkowego w tym celu to 0123456789ABCDEF Podczas wysyłania danych szesnastkowych muszą być użyte duże litery, chociaż solidna implementacja może wybrać rozpoznawanie małych liter podczas ich otrzymywania. Na przykład może być reprezentowana wartość 12 kanału ASCII przez 0C, a wartość 61 ASCII EQUAL SIGN może być reprezentowana przez 3D Z wyjątkiem przypadków, gdy następujące reguły pozwalają na alternatywne kodowanie, ta zasada jest obowiązkowa. Reguła 2 Literalne represe ntation Octety z wartościami dziesiętnymi od 33 do 60 włącznie i od 62 do 126 włącznie mogą być reprezentowane jako znaki ASCII, które odpowiadają tym oktetom punktowi EXCLAMATION PO MNIEJSZOŚCI NIŻ, a WIELKIMI niż TILDE. Reguła 3 białe Kosmiczne Kosmiczne. z wartościami 9 i 32 MAY być odpowiednio reprezentowane jako znaki ASCII TAB HT i SPACE, ale NIE MUSZĄ być tak reprezentowane na końcu zakodowanej linii Każde znaki TAB HT lub SPACE na zakodowanej linii MUSZĄ zatem być śledzone w tym wierszu przez drukowany znak W szczególności, pod koniec zakodowanej linii, wskazując łagodną linię, patrz reguła 5 może następować po jednej lub więcej znaków TAB HT lub SPACE. Wynika stąd, że oktet o wartości 9 lub 32 pojawia się na końcu zakodowanego linia musi być reprezentowana zgodnie z regułą 1 Ta reguła jest konieczna, ponieważ niektóre MTAs Message Transport Agents, programy, które przenoszą wiadomości z jednego użytkownika na inny lub wykonują część takich transferów, są znane liniom tekstu z kosmosami i innymi znanymi znakami usuwania znaków białych znaków z końca wiersza Dlatego podczas dekodowania ciała Quoted-Printable każda biała przestrzeń na linii musi zostać usunięta, ponieważ będzie ona koniecznie dodawana przez pośrednie środki transportu Reguła 4 przerwy linii. Linia podziału części tekstu, niezależnie od tego, co jej reprezentacja jest zgodna z kanoniczną reprezentacją zakodowanych danych, musi być reprezentowana przez przerwanie linii RFC 822, która jest sekwencją CRLF, w wierszu Quoted - Kodowanie do druku Jeśli pojedyncze dane CR i LF lub sekwencje LF CR i CR LF mogą pojawić się w danych binarnych zgodnie z formą kanoniczną, muszą być reprezentowane odpowiednio 0D, 0A, 0A 0D i 0D 0A. implementacja może wybrać kodowanie lokalnej reprezentacji różnych typów zawartości bezpośrednio W szczególności może to dotyczyć zwykłego materiału tekstowego w systemach, które używają konwencji nowej linii, innych niż separatory CRLF Taka implementacja jest permis ale generowanie przerw w linii musi być uogólnione w celu uwzględnienia przypadków, w których wykorzystywane są alternatywne reprezentacje sekwencji nowej linii. Reguła 5 łagodnych przerw w wierszach. Quoted-Printable encoding WYMAGA, że zakodowane linie nie mogą mieć więcej niż 76 znaków Jeśli dłuższe linie mają być zakodowane kodowaniem kwerendowo-drukowanym, należy zastosować łagodne przerwy liniowe Znak równości jako ostatni znak na zakodowanej linii wskazuje taką nieistniejącą linię łagodnego zakodowania w tekście Tak więc, jeśli surowa forma linii jest pojedyncza linia niezarejestrowana, która mówi To może być reprezentowane, w kodowaniu Quoted-Printable, ponieważ jest to mechanizm, w którym długie linie są zakodowane w taki sposób, aby przywrócić je przez agenta użytkownika Limit znaków 76 nie liczy końca CRLF, ale liczy wszystkie inne znaki, w tym dowolne oznaczenia. Od znaku dzielnika - jest reprezentowana jako sama w skrypcie Quoted-Printable, należy zachować ostrożność, gdy jest kapsułkowany zakodowany kodowany b ody w jednostce wieloczęstotliwościowej, aby zapewnić, że granica kapsułkowania nie pojawia się w zakodowanym ciele Dobra strategia polega na wybraniu granicy, która zawiera sekwencję znaków, która nigdy nie może się pojawić w ciałku zadeklarowanym do wydruku Patrz definicja wieloczęściowego później w tym dokumencie. UWAGA Kodowanie w cudzysłowiu jest kompromisem między łatwością odczytywania i niezawodnością w transporcie Zespoły kodowane kodowanym przez drukowane kodowaniem działają niezawodnie w większości bram poczty, ale mogą nie działać poprawnie w kilku bramach, w szczególności teoretycznie, brama EBCDIC może dekodować nadrukowany ciało i ponownie kodować go przy użyciu bazy64, ale takie bramy jeszcze nie istnieją Wyższy poziom zaufania jest oferowany przez Base64 Content-Transfer-Encoding A way aby uzyskać rozsądnie niezawodny transport przez bramy EBCDIC jest również zacytować znaki ASCII zgodnie z regułą 1 Więcej informacji można znaleźć w dodatku B. Beca że dane z nadrukowanych wierszy są na ogół zakładane jako zorientowane na linie, należy oczekiwać, że przerwy między wierszami cytowanych danych do wydrukowania mogą być zmienione w transporcie, w ten sam sposób, że zwykła poczta tekstowa zawsze zmieniała się w poczcie internetowej podczas przechodzenia między systemami o różnej konwencji typu newline Jeśli takie zmiany mogą powodować zepsucie danych, prawdopodobnie bardziej sensowne jest użycie kodowania base64, a nie kodowanego do nadruku kodera. 5 Base64 Content-Transfer-Encoding. Base64 Content-Transfer-Encoding jest zaprojektowany do reprezentowania dowolnych sekwencji oktetów w postaci, która nie jest czytelna dla ludzi Algorytmy kodowania i dekodowania są proste, ale zakodowane dane są stale tylko o około 33 procent większe od niezhodowanych danych To kodowanie opiera się na jeden używany w aplikacjach poczty e-mail z rozszerzeniem prywatności, zgodnie z definicją w RFC 1113 Kodowanie w bazie base64 jest adaptowane z RFC 1113, przy czym jedna podstawa base64 eliminuje mechanizm emulacji przy użyciu 64-znakowego podzbioru US-ASCII, umożliwiającego przedstawienie 6 bitów na drukowanym znaku Dodatkowy 65-znakowy znak służy do określenia specjalnej funkcji przetwarzania. UWAGA Ten podzbiór ma ważną właściwość, reprezentowane są identycznie we wszystkich wersjach ISO 646, w tym US ASCII, a wszystkie znaki w podgrupie są również reprezentowane identycznie we wszystkich wersjach EBCDIC Inne popularne kodowanie, takie jak kodowanie używane przez narzędzie UUENCODE i kodowanie base85 określone jako część poziomu 2 PostScript nie dzielą się tymi właściwościami, a tym samym nie spełniają wymogów dotyczących przenośności, musi być spełniony binarny kod szyfrujący transport dla poczty. Proces kodowania reprezentuje 24-bitowe grupy bitów wejściowych jako ciągi wyjściowe z 4 kodowanych znaków. Od lewej do prawej, 24-bitowa grupa wejściowa jest tworzona przez łączenie 3 8-bitowych grup wejściowych 24 bity są następnie traktowane jako 4 połączone 6-bitowe grupy, z których każda jest tłumaczona na jedną cyfrę i n algorytm base64 Podczas kodowania strumienia bitów za pomocą kodowania base64, należy uznać, że strumień bitów ma być zamówiony z najbardziej znaczącym bitem Pierwszy to oznacza, że ​​pierwszy bit w strumieniu będzie bitem wysokiego rzędu w pierwszym bajt, a ósmy bit będzie bitem niskiego rzędu w pierwszym bajcie itd. Każda grupa 6-bitowa jest używana jako indeks w tablicy 64 znaków drukowanych Znak, do którego odwołuje się indeks, jest umieszczony na wyjściu ciąg znaków Znaki określone w tabeli 1 poniżej są wybierane tak, aby były uniwersalnie reprezentatywne, a zestaw wyklucza znaki o szczególnym znaczeniu dla protokołu SMTP, np. CR, LF oraz granice kapsułkowania zdefiniowane w niniejszym dokumencie e g. Table 1 Base64 Alphabet. The strumień wyjściowy kodowany bajtów musi być reprezentowany w wierszach o długości nie większej niż 76 znaków Każda linia przerwania lub inne znaki nie znalezione w tabeli 1 musi zostać zignorowane przez oprogramowanie do dekodowania W danych podstawowych, znaki inne niż te z tabeli 1, linia przerwy, i inna biała przestrzeń prawdopodobnie wskazuje błąd transmisji, w odniesieniu do którego w pewnych okolicznościach może być odpowiedni komunikat ostrzegawczy, a nawet odrzucenie wiadomości. Specyficzne przetwarzanie jest wykonywane, jeśli na końcu zakodowanych danych jest dostępnych mniej niż 24 bity. Kwantowy kod pełny jest zawsze ukończony na końcu ciała Gdy w grupie wejściowej dostępnych jest mniej niż 24 bity wejściowe, z prawej strony są dodawane zerowe bity, które tworzą integralną liczbę grup 6-bitowych. Wyjście znaków, które nie są wymagane do reprezentowania rzeczywistych danych wejściowych są ustawione na znak Ponieważ wszystkie wejście base64 jest całkowitą liczbą oktetów, może dojść do powstania tylko następujących przypadków 1 końcowy kwantum wejścia kodującego to integralna wielokrotność 24 bitów, ostatnia jednostka kodowanego wyjścia będzie integralną wielokrotnością 4 znaki bez wypełnienia, 2 końcowe kwantowanie wejścia kodującego to dokładnie 8 bitów, ostatnia jednostka kodowanego wyjścia będzie miała dwa znaki, a następnie dwa znaki wypełnienia, lub 3 ostatnia kwota kwerendy wejściowej kodowania wynosi dokładnie 16 bitów, ostatnia jednostka kodowanego wyjścia będzie miała trzy znaki, a następnie jeden znak dopełnienia. Należy podjąć odpowiednie oktety dla przerw między wierszami, jeśli kodowanie base64 jest stosowane bezpośrednio do materiału tekstowego, nie został przetworzony na formę kanoniczną W szczególności przerwy w wierszach tekstowych powinny zostać przekształcone w sekwencje CRLF przed kodowaniem w bazie base64 Ważną cechą jest to, że może to być dokonane bezpośrednio przez koder, a nie w poprzednim kroku kanonizacji w niektórych implementacjach. NEST There is no need to worry about quoting apparent encapsulation boundaries within base64-encoded parts of multipart entities because no hyphen characters are used in the base64 encoding. Please Whitelist This Site. I know everyone hates ads But please understand that I am providing premium content for free that takes hundreds of hours of time to research and write I don t want to go to a pay-only model like some sites, but when more an d more people block ads, I end up working for free And I have a family to support, just like you. If you like The TCP IP Guide, please consider the download version It s priced very economically and you can read all of it in a convenient format without ads. If you want to use this site for free, I d be grateful if you could add the site to the whitelist for Adblock To do so, just open the Adblock menu and select Disable on Or go to the Tools menu and select Adblock Plus Preferences Then click Add Filter at the bottom, and add this string Then just click OK. Thanks for your understanding. Sincerely, Charles Kozierok Author and Publisher, The TCP IP Guide. NOTE Using software to mass-download the site degrades the server and is prohibited If you want to read The TCP IP Guide offline, please consider licensing it Thank you. The Book is Here and Now On Sale. Enjoy The TCP IP Guide Get the complete PDF. MIME Content-Transfer-Encoding Header and Encoding Methods Page 2 of 3.MIME Encoding Methods. To send non-ASCII data in MIME, it is necessary that it be encoded The Content-Transfer-Encoding header is used to specify how a MIME message or body part has been encoded, so that it can be decoded by its recipient The following types of encoding are defined.7bit This indicates that the message is already in ASCII form compatible with RFC 822 It is the default and is what is assumed if no Content-Transfer-Encoding header is present.8bit binary These synonymous values mean the message has been encoded directly in 8-bit binary form Yes, I did just say that this would violate the rules of RFC 822 These options appear to have been included to support future mechanisms for transporting binary data directly RFC 1652 describes an SMTP extension that discusses this in part SMTP Service Extension for 8bit-MIMEtransport sic, there is no space between MIME and transport However, the standard is clear that this still does not allow the transfer of raw binary data using SMTP and RFC 822.quoted-printa ble This is a special encoding that is used when most of the data is ASCII text, but when it contains certain violations of the rules of RFC 822 These illegal sections are converted using special encoding rules so the data as a whole is consistent with RFC 822.base64 An encoding used to allow arbitrary binary data to be represented in ASCII form The data is then sent as ASCII and decoded back into binary form by the recipient. The quoted-printable and base64 encodings are the most interesting ones, because they are what allow non-RFC-822 data to be sent using RFC 822.Key Concept MIME supports four encoding methods 7bit 8bit binary quoted-printable and base64 7bit encoding is standard ASCII and is used for text quoted-printable encoding is for output that is mostly text but has some special characters that must be encoded base64 is used for arbitrary binary files The 8bit encoding method is defined in MIME but not used for RFC 822 messages. This encoding method is used when the message is mostly ASCII only the problem bytes are encoded The result is that RFC 822 compatibility is achieved while maintaining most of the data as regular text so it can still be easily understood by a human. An example of where this would be letters with tildes or accents, such as those used in French or Spanish Another would be a text message formed using an editor that inserts carriage return characters in the middle of a line Most of the message is still text The quoted-printable encoding can be used here, with the carriage return characters represented as 0D the hexadecimal value of the character prepended by an equal sign RFC 2046 contains more details on how this is done. Following content is been captured at TcpMon. Request made by SoapUI Pro 3 0 2.POST tf6 services xdsrepositoryb Accept-Encoding gzip, deflate Content-Type multipart related type application xop xml start start-info application soap xml action boundary ---- Part1728349551 1260534830078 MIME-Version 1 0 User-Agent Jakar ta Host Content-Length 13318.------ Part1728349551 1260534830078 Content-Type application xop xml charset UTF-8 type application soap xml action ProvideAndRegisterDocumentSetRequest Content-Transfer-Encoding 8bit Content-ID.------ Part1728349551 1260534830078 Content-Type text plain charset us-ascii Content-Transfer-Encoding 7bit Content-ID. This is depeche s document. Request made by xdstest tool. POST tf6 services xdsrepositoryb Content-Type multipart related boundary MIMEBoundaryurnuuid613A2BD2D99F1E6B5912 60534073176 type application xop xml start start-info application soap xml action urn ihe iti 2007 rovideAndRegisterDocumentSet-b User-Agent Axis2 Host Transfer-Encoding chunked.20f1 --MIMEBoundaryurnuuid613A2BD2D99F1E6B59126053407 3176 Content-Type application xop xml charset UTF-8 type application soap xml Content-Transfer-Encoding binary Content-ID.--MIMEBoundaryurnuuid613A2BD2D99F1E6B59126053407 3176 Content-Type text plain Content-Transfer-Encoding binary Content-ID 1 g. This is my document. From where can i set Content-Transfer-Encoding as binary. At the nist public registry, you can view the text document which is been sent as an attachment. I have also tried making Encode Attachments as true under TestRequest Properties But its not working either Thanks for the help.

No comments:

Post a Comment