/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
BinaryWrite : Hvad er formålet ?
Fra : Jesper Stocholm


Dato : 25-01-02 14:36

Jeg har i de seneste dage leget med diverse internet-applikationer, dvs
news og mail. Nu er turen så kommet til browserne.

Jeg er dermed kommet til at tænke på, hvad metoden response.binarywrite()
egentlig gør. Den kan jo - som navnet ellers antyder - ikke skrive binære
data til min browser ... da webserveren jo kun kan sende TCP/IP-pakker
afsted - evt. MIME-kodede.

Er formålet med metoden simpelthen at konvertere binære data til tekst,
base64-kode dem og sende dem afsted i pakker til min browser ?

.... altså i forhold til selv at skulle kode sig ud af det ?

--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

 
 
Jakob Møbjerg Nielse~ (25-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 25-01-02 18:03

> Jeg er dermed kommet til at tænke på, hvad metoden
response.binarywrite()
> egentlig gør. Den kan jo - som navnet ellers antyder - ikke skrive
binære
> data til min browser ... da webserveren jo kun kan sende TCP/IP-pakker
> afsted - evt. MIME-kodede.

Den sender dataene af sted i "råt" format, dvs. uden der er blevet
ændret i den. Når vi er helt nede i det niveau hvor TCP/IP ligger,
skelnes der ikke længere mellem binære og ikke-binære data. Man kan fx
bruge BinaryWrite til at sende et billede med.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Niels Henriksen (25-01-2002)
Kommentar
Fra : Niels Henriksen


Dato : 25-01-02 22:03

"Jakob Møbjerg Nielsen" <jakob@dataloger.dk> wrote in message
news:a2s33k$8m7$1@sunsite.dk...
>
> Den sender dataene af sted i "råt" format, dvs. uden der er blevet
> ændret i den. Når vi er helt nede i det niveau hvor TCP/IP ligger,
> skelnes der ikke længere mellem binære og ikke-binære data. Man kan fx
> bruge BinaryWrite til at sende et billede med.
>
Hvordan er det liiiiige man læse et billede binært?

--
Niels Henriksen




Jakob Møbjerg Nielse~ (26-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 26-01-02 17:41

> Hvordan er det liiiiige man læse et billede binært?

Som man normalt gør? Hvordan vil du hente et billede fra en hjemmeside,
hvis du ikke må gøre det gennem HTTP? BinaryWrite kan fx bruges til
dynamisk generering af billeder, fx en graf.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jesper Stocholm (27-01-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 27-01-02 12:21

Jakob Møbjerg Nielsen wrote in news:a2um4h$gaj$1@sunsite.dk:

>> Hvordan er det liiiiige man læse et billede binært?
>
> Som man normalt gør? Hvordan vil du hente et billede fra en hjemmeside,
> hvis du ikke må gøre det gennem HTTP?

præcist ... og derfor undrede jeg mig også over, hvorfor du talte om
TCP/IP :)

> BinaryWrite kan fx bruges til
> dynamisk generering af billeder, fx en graf.
>

Øh ... ok ... men altså:

På mit domæne ligger der et lille billede på http://stocholm.dk/bg.gif .
Når min browser vil se dette billlede, så sker det via kommandoen

GET /bg.gif HTTP/1.0


Dette resulterer i:

open stocholm.dk 80
GET /bg.gif HTTP/1.0
Host: stocholm.dk

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Sun, 27 Jan 2002 10:59:59 GMT
Content-Type: image/gif
Accept-Ranges: bytes
Last-Modified: Fri, 25 Jan 2002 13:20:02 GMT
ETag: "c0e41ffa2a5c11:a72"
Content-Length: 213

GIF87aÞ?Ç3f3ff,Þ??¦îÅ®-Ýú£¦+ï¦Ì+¹åÔHûµëªÛ-¯;+LÎ÷ìþ·+¸¦Oyþ¶¦²Ä¤Ù¸³¥(8
h§gxêÿ¿©+ÏÞ?)¨AXiyëÖ®¦++ڨ¹-4IZjzèܬ¦-+Û*#+;K[k{ïø½+½¾Û¹?,<L\l|+ø¼+¦
_ý³?mY;


Hvis jeg derimod læser billedet ind i ADOs Stream-object med koden:

set oStream = server.createobject("ADODB.Stream")
oStream.Type = 1
oStream.Open
oStream.LoadFromFile (server.mappath("bg.gif"))
response.ContentType = "image/gif"
response.BinaryWrite oStream.Read
oStream.Close
set oStream = nothing

og derefter henter ASP-siden, så giver det mig:

open stocholm.dk 80
GET /bg.asp HTTP/1.0
Host: stocholm.dk

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Sun, 27 Jan 2002 10:57:14 GMT
Connection: Keep-Alive
Content-Length: 213
Content-Type: image/gif
Set-Cookie: ASPSESSIONIDQQGQGLQC=HLAHIEIAGBOGOMBFADGKFKPJ; path=/
Cache-control: private

GIF87aÞ?Ç3f3ff,Þ??¦îÅ®-Ýú£¦+ï¦Ì+¹åÔHûµëªÛ-¯;+LÎ÷ìþ·+¸¦Oyþ¶¦²Ä¤Ù¸³¥(8
h§gxêÿ¿©+ÏÞ?)¨AXiyëÖ®¦++ڨ¹-4IZjzèܬ¦-+Û*#+;K[k{ïø½+½¾Û¹?,<L\l|+ø¼+¦
_ý³?mY;


Et eller andet sted sker der altså en "oversættelse" at de 1 og 0, som
billedet er sat sammen af på min HD, til den streng af tegn, som er
ovenfor. Det jeg ikke kan finde ud af er, hvordan dette sker.

Er det en simpel "type-casting" af bitstrenge til en tekststreng ? Hvis
dette er tilfældet - er det så UTF-7 eller UTF-8 ?

Det ser ikke ud til, at det er MIME-kodet ... hvilket jeg faktisk havde
forventet. Iflg MSDN er den eneste forklaring jeg kan finde:

[...]The BinaryWrite method writes the specified information to the
current HTTP output without any character conversion. This method
is useful for writing non-string information such as binary data
required by a custom application.
[...]

Det er jo altsammen meget fint ... altså: headeren sættes på svaret
fra serveren, og derefter sendes indholdet af filen direkte som en del af
HTTP-output ...

men: arrgh ! ... hvordan ?

Og endelig: Jeg spurgte ikke til hvad man kan bruge den ... og spurgte til,
hvad der sker, når man bruger den. Det svarer lidt til, når vi har talt om
attachments til diverse mailkomponenter. Når man anvender dem, så sker der
det, at der tilføjes et par headers til emailen - herunder en
boundary-header, dernæst base64-kodes filen og skrives direkte i emailen
- under en af disse boundary-linier. Det er en tilsvarende beskrivelse
jeg er ude efter her. Jeg er ikke ude efter et svar som: "... Man bruger
den til at vedhæfte filer til emails ..."

:)

--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Jakob Møbjerg Nielse~ (27-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-01-02 15:06

> Det ser ikke ud til, at det er MIME-kodet ...

Nope

> men: arrgh ! ... hvordan ?

Ganske som du har vist det. Du skal dog være opmærksom på at du ikke kan
have noget som helst andet på den side hvor billedet bliver generet. På
den side hvor du vil have billedet skriver du: <img src="bg.asp">.

> Og endelig: Jeg spurgte ikke til hvad man kan bruge den ... og
> spurgte til, hvad der sker, når man bruger den.

Fair nok. Det var bare mig der ikke læste spørgsmålet ordenligt.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jesper Stocholm (27-01-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 27-01-02 16:08

Jakob Møbjerg Nielsen wrote in news:a311er$19u$2@sunsite.dk:

>> Det ser ikke ud til, at det er MIME-kodet ...
>
> Nope
>
>> men: arrgh ! ... hvordan ?
>
> Ganske som du har vist det. Du skal dog være opmærksom på at du ikke
> kan have noget som helst andet på den side hvor billedet bliver
> generet. På den side hvor du vil have billedet skriver du: <img
> src="bg.asp">.
>

:)

.... men jeg har stadig ikke fundet svaret. Den streng af tegn, der
kommer frem - hvordan er den lavet ?

Når jeg skriver

response.binarywrite someBinaryData

så giver det mig en tekststreng. Hvordan er den fremkommet ? Tager den 8
bits ad gangen og giver mig det tilhørende UTF-8 tegn ? Tager den 7 bits
ad gangen og giver mig det tilhørende UTF-7 tegn ?

Jeg hælder mest til det sidste, da jeg vil mene, at strengen ellers skal
MIME-kodes for at sikre, at alle informationer kommer frem ... men jeg
kan _INTET_ finde om det nogen steder ... :(


--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Jakob Møbjerg Nielse~ (27-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-01-02 16:17

> så giver det mig en tekststreng. Hvordan er den fremkommet ?
> Tager den 8 bits ad gangen og giver mig det tilhørende UTF-8
> tegn ? Tager den 7 bits ad gangen og giver mig det tilhørende
> UTF-7 tegn ?

Hmm... det ved jeg faktisk ikke.

> Jeg hælder mest til det sidste, da jeg vil mene, at strengen ellers
skal
> MIME-kodes for at sikre, at alle informationer kommer frem ...

Hvorfor det? Du ved hvornår dataene starter, og du ved hvornår de
slutter.

> men jeg kan _INTET_ finde om det nogen steder ... :(

Det kan jeg heller ikke. Det kan være det er på tide at lave en kick-ass
ASP side... ej, det gider jeg ikke til. For meget arbejde

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jesper Stocholm (27-01-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 27-01-02 16:27

Jakob Møbjerg Nielsen wrote in news:a315j6$erk$1@sunsite.dk:

>> så giver det mig en tekststreng. Hvordan er den fremkommet ?
>> Tager den 8 bits ad gangen og giver mig det tilhørende UTF-8
>> tegn ? Tager den 7 bits ad gangen og giver mig det tilhørende
>> UTF-7 tegn ?
>
> Hmm... det ved jeg faktisk ikke.
>
>> Jeg hælder mest til det sidste, da jeg vil mene, at strengen ellers
> skal
>> MIME-kodes for at sikre, at alle informationer kommer frem ...
>
> Hvorfor det? Du ved hvornår dataene starter, og du ved hvornår de
> slutter.
>

jeg spurgte engang i dk.edb.sikkerhed - eller også var det i
dk.edb.internet), hvorfor man bruger BASE64-konvertering - når man
ligesågodt kunne gøre som jeg skrev ovenfor ... dvs dele det op i
klumper af 8 bit og vælge fx det tilhørende UTF-8 tegn. Svaret var, at
man bruger BASE64 til at "flytte" en 8-bit streng ned i et "sikkert"
7-bit område, da man kan risikere, at kommunikationen undervejs imellem
modtager og afsender kommer igennem et 7-bit netværk ... og så vil en
del af informationen gå tabt.

>> men jeg kan _INTET_ finde om det nogen steder ... :(
>
> Det kan jeg heller ikke. Det kan være det er på tide at lave en
> kick-ass ASP side... ej, det gider jeg ikke til. For meget arbejde
>

:)


--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Jakob Møbjerg Nielse~ (27-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-01-02 16:38

> Svaret var, at man bruger BASE64 til at "flytte" en 8-bit
> streng ned i et "sikkert" 7-bit område, da man kan risikere,
> at kommunikationen undervejs imellem modtager og afsender
> kommer igennem et 7-bit netværk ... og så vil en del af
> informationen gå tabt.

Et 7-bit netværk? Det har jeg aldrig hørt om. I sådan et tilfælde vil
jeg da gå ud fra at konverteringen fra 8 til 7 bit skulle foregå i et
lag under transportlaget, da TCP, som bekendt, benytter byte streams.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jakob Møbjerg Nielse~ (27-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-01-02 16:46

> Et 7-bit netværk? Det har jeg aldrig hørt om. I sådan et tilfælde
> vil jeg da gå ud fra at konverteringen fra 8 til 7 bit skulle
> foregå i et lag under transportlaget, da TCP, som bekendt,
> benytter byte streams.

Igen fra Tanenbaum: Base64 er åbenbart noget der kun bruges i e-mails,
fordi email protokollen har fastlagt en maksimum linjelængde på 1000
tegn, og dette kan binære filer sagtens overgå. Base64 ignorerer
linjeskift, så disse kan indsættes hvor som helst for at overholde den
maksimale linjelængde.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Stig Johansen (27-01-2002)
Kommentar
Fra : Stig Johansen


Dato : 27-01-02 19:55

Jakob Møbjerg Nielsen wrote:

>> Et 7-bit netværk? Det har jeg aldrig hørt om. I sådan et tilfælde
>> vil jeg da gå ud fra at konverteringen fra 8 til 7 bit skulle
>> foregå i et lag under transportlaget, da TCP, som bekendt,
>> benytter byte streams.
>
> Igen fra Tanenbaum: Base64 er åbenbart noget der kun bruges i e-mails,
> fordi email protokollen har fastlagt en maksimum linjelængde på 1000
> tegn, og dette kan binære filer sagtens overgå. Base64 ignorerer
> linjeskift, så disse kan indsættes hvor som helst for at overholde den
> maksimale linjelængde.


Ok, lad os få styr på det her.

7-bit:
Det stammer fra dengang, det var før, i guds eget land. Her eksisterer der
ikke ting som æøå. En stor del af kommunikationen foregik over serielle
linier ( rs 232 ), hvor man brugte den 8'nde bit til paritets check.
I forbindelse med definition af internet text message, rfc 822 3.3, er et
ascii tegn defineret som 0..127.

Binære data:
Binære data skal betragtes som en lang række af bits. Ikke noget med tegn
og bogstaver. Man kan definere indholdet i et program, der giver mening for
de binære data. I Jespers gif tilfælde, Gif87a, se:
<ftp://ftp.ncsa.uiuc.edu:/misc/file.formats/graphics.formats/gif87a.doc>

DVS, BinaryWrite har til formål at sende data råt,ufortolket og uændret til
modtageren.

Base 64:
Når man skal transportere binære data over et 'tekst-medie', kan man i
sagens natur kun benytte tegn, der ikke består af kontrol tegn(0-31), CR LF
Xon Xoff osv.
Man har derfor defineret en tabel, der mapper 6 bits ad gangen over til et
tegn se:
<http://www.freesoft.org/CIE/RFC/1521/7.htm>
Det vil sige følgende forløb:
Binær fil --> Base64 encode --> I* transport --> Base 64 decode --> Binær
fil.
Se evt. også (anbefalet max linie på 76 tegn):
<http://www.freesoft.org/CIE/RFC/1521/44.htm>

Afslutningsvis:
Hvis man skal læse binære filer, så brug en god hex viewer/editor.

--
Med venlig hilsen / Best regards
Stig Johansen


Jakob Møbjerg Nielse~ (27-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-01-02 20:33

> 7-bit:
> Det stammer fra dengang...

Ja, det fik jeg en fornemmelse af, da jeg læste tråden på Google.

> Base 64:
> Når man skal transportere binære data over et 'tekst-medie',
> kan man i sagens natur kun benytte tegn, der ikke består af
> kontrol tegn(0-31), CR LF Xon Xoff osv.

Netop. Det var også det jeg mente da jeg skrev "ignorerer linjeskift".
Jeg tilstår gerne at det var en dårlig formulering, men jeg havde lidt
travlt

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jesper Stocholm (27-01-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 27-01-02 16:49

Jakob Møbjerg Nielsen wrote in news:a316rg$io9$1@sunsite.dk:

>> Svaret var, at man bruger BASE64 til at "flytte" en 8-bit
>> streng ned i et "sikkert" 7-bit område, da man kan risikere,
>> at kommunikationen undervejs imellem modtager og afsender
>> kommer igennem et 7-bit netværk ... og så vil en del af
>> informationen gå tabt.
>
> Et 7-bit netværk? Det har jeg aldrig hørt om. I sådan et tilfælde vil
> jeg da gå ud fra at konverteringen fra 8 til 7 bit skulle foregå i et
> lag under transportlaget, da TCP, som bekendt, benytter byte streams.
>

jeg fandt lige tråden fra dengang. Den kan ses på

http://groups.google.com/groups?hl=en&th=4aa1f08a1f4bd02&seekm=91ebrtcid1oroba2t6q7d9gnu5e8339sg1%40news.stofanet.dk&frame=off

--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Jakob Møbjerg Nielse~ (27-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-01-02 16:33

> Hvorfor det? Du ved hvornår dataene starter, og du ved hvornår de
> slutter.

Jeg sidder lige og kigger i Tanenbaums "Computer Networks" 3. edition.
Under sin forklaring om HTTP sriver han:

"As an aside, the MIME /Content-Transfer-Encoding/ header is not needed
because TCP allows arbitrary byte streams, even pictures, to be sent
without modification."

Jeg tror UTF-8 bliver brugt.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jesper Stocholm (27-01-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 27-01-02 11:27

Jakob Møbjerg Nielsen wrote in news:a2s33k$8m7$1@sunsite.dk:

>> Jeg er dermed kommet til at tænke på, hvad metoden
> response.binarywrite()
>> egentlig gør. Den kan jo - som navnet ellers antyder - ikke skrive
> binære
>> data til min browser ... da webserveren jo kun kan sende TCP/IP-pakker
>> afsted - evt. MIME-kodede.
>
> Den sender dataene af sted i "råt" format, dvs. uden der er blevet
> ændret i den. Når vi er helt nede i det niveau hvor TCP/IP ligger,

hvorfor blander du TCP/IP ind i det ? TCP/IP er transportlaget, hvormed
informationerne sendes imellem browser og server. Opbygning og rendering
af websider ligger i HTTP 1.0/1.1-laget ... hvor også outputtet fra
BinaryWrite() ligger. Derfor kan jeg ikke se, at TCP/IP er relevant ...
kommunikationen kunne vel sådan set også ske via NETBIOS.

> skelnes der ikke længere mellem binære og ikke-binære data. Man kan fx
> bruge BinaryWrite til at sende et billede med.
>

jaja ... men jeg spørger om: Hvordan ?

--
Jesper Stocholm - http://stocholm.dk

Synes du også, at Britney trods alt er meget lækker - men dog
på grænsen til det kvalmende ? http://stocholm.dk/britney.txt

Jakob Møbjerg Nielse~ (27-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-01-02 14:59

> hvorfor blander du TCP/IP ind i det ?

Jeg forstod dig som om du troede at TCP/IP ikke kan sende binære data
afsted.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Søg
Reklame
Statistik
Spørgsmål : 177506
Tips : 31968
Nyheder : 719565
Indlæg : 6408561
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste