Showing posts with label Web. Show all posts
Showing posts with label Web. Show all posts

Web: Content Type

Content type คือค่าที่บอกให้ browser รู้ว่าเนื้อหาที่ server ส่งกลับมาเป็นประเภทไหน เราอาจจะเคยเห็นว่าเืมื่อการคลิ๊ก pdf ไฟล์ browser บางตัว จะทำการเปิดไฟล์ pdf ในหน้า browser ให้เลย นั้นก็เพราะ browser รู้ว่าไฟล์เนื้อหานี้จะต้องจัดการอย่างไร เพื่อแสดงผลได้อย่างถูกต้อง โดย browser จะดูจาก content type (หรือบางครั้งก็ดูจาก นามสกุลของไฟล์) สำหรับข้อมูลบางประเภทที่ browser รู้จักและสามารถแสดงผลได้ มันก็จะแสดงผลให้ แต่สำหรับข้อมูลที่มันไม่สามารถจัดการได้ มันก็จะต้อง pop-up ให้เรา download ลงมาไว้ที่เครื่อง เพื่อเราจะได้นำไปใช้ต่อไป

โดย Content type ก็คือ MIME type นะเอง MIME หรือ Multipurpose Internet Mail Extensions ดูจากชื่อ ก็คงพอเดาได้นะค่ะ ว่า MIME ที่นำมาใช้ครั้งแรก เพื่อใช้ักับ e-mail สำหรับบอกว่าเนื้อหาของ e-mail เป็นรูปแบบไหน เพื่อให้ e-mail client สามารถแสดงผลได้ แต่มันก็ถูกขยายมาให้ใ้ช้เพื่อจุดประสงค์อื่นๆ ต่อมา เช่นการใช้เป็น Content type บน internet เพื่อระุบุ response ที่ server ตอบกลับมาเป็นต้น

ค่าของ MIME type หรือ Content type โดยทั่วไป เช่น

text/plain
text/html
multipart/mixed - text ผสมกับไฟล์แนบ ใช้สำหรับการ download หรือ upload ไฟล์ พร้อมกับแสดงผล HTML หรือ plain text
image/jpeg
image/jpg
audio/mp3
video/mp4
video/quicktime
application/pdf
application/java
application/jar
application/octet-stream
application/x-zip
application/msword


Reference:
MIME - Wikipedia

TCP: default port

port number ก็คือเลข 16-bit (0 - 65535) ที่ใช้บอก application ที่จะใช้

เนื่องจากในการส่งข้อมูลภายใน internet (หรือเครือข่ายที่ใช้ TCP protocol) นั้นสามารถนำไปใช้กับ application ได้หลากหลาย ซึ่งแต่ละ application ก็สามารถใช้ protocol ที่แตกต่างกันออกไปในการตีความข้อมูลที่ส่งไป-มาใน network เช่น เราส่ง HTML โดยใช้ protocol HTTP หรือการส่งไฟล์โดยใช้ protocol FTP เป็นต้น ดังนั้นเพื่อจะบอก server ได้ว่าข้อมูลที่ส่งมานั้นเป็น application อะไร จะต้องใช้ protocol ตัวไหน จึงต้องมีการกำหนดหมายเลข port ขึ้นมา

ทั้งนี้ทั้งนั้น ตอนที่เรา config application เราสามารถกำหนดได้เองว่า จะใช้ application นั้นๆ ใช้ port หมายเลขอะไร แต่โดยทั่วไปแล้ว application ซึ่งเป็นที่รู้จักกันโดยทั่วไปจะมี ค่า default ของ application นั้นๆ อยู่ เช่น

port 21 เป็น FTP
port 22 เป็น SSH
port 23 เป็น Telnet
port 25 เป็น SMTP
port 80 เป็น HTTP
port 110 เป็น POP3
port 443 เป็น HTTPS

นอกจากนี้ยังมี applicatoin อื่นๆ อีก ซึ่ง port 0 - 1023 จะถูกสำรองไว้สำหรับ application ที่เป็นที่รู้จักเหล่านี้ ดังนั้นถ้าเรามีการสร้าง application ของเราเองที่ใช้อยู่บน TCP ก็ควรจะหลีกเลี่ยงการใช้ port เหล่านี้

HTTP and HTML introduction and architecture

อย่างที่เรารู้กันว่า เราส่ง HTML ไปด้วย protocol HTTP โดย HTML นั้นจะถูกหุ้มด้วย HTTP header อีกทีหนึ่ง ซึ่งตัว header ที่ว่านี้ก็อาจจะแตกต่างกันไปเล็กน้อยแล้วแต่ HTTP method

เช่น Get request method


GET /select/selectBeerTaste.jsp?color=dark&taste=malty
HTTP/1.1 Host: www.wickedlysmart.com
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4) Gecko/ 20030624 Netscape/7.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/ plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-aliv
e



หรือ Post request method

POST /advisor/selectBeerTaste.do HTTP/1.1
Host: www.wickedlysmart.com
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4) Gecko/ 20030624 Netscape/7.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/ plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive


color=dark&taste=malty

ข้อแตกต่างของ get กับ post ที่เห็นได้ชัดๆ ก็คือ post จะสามารถมี body ได้ (บรรทัดสุดท้าย color=dark... คือส่วนของ body) โดย get method จะส่ง parameter ตามหลัง URL เลยทำให้ไม่สามารถส่งค่าที่มีความยาวมากๆ ได้ แต่ว่า post จะส่งโดยผ่าน body ทำให้มีความยาวได้ไม่จำกัด

นอกจาก post และ get แล้ว ยังมี HTTP method อื่นๆ อีก ดังนี้ HEAD, TRACE, OPTIONS, PUT,
DELETE และ CONNECT

ดูในส่วนของ request ไปแล้ว ทีนี้มาดูตัวอย่างของ response ที่ server ตอบกลับไปที่ client กันบ้าง


HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=0AAB6C8DE415E2E5F307CF334BFCA0C1; Path=/testEL
Content-Type: text/html
Content-Length: 397 Date: Wed, 19 Nov 2003 03:25:40 GMT Server: Apache-Coyote/1.1 Connection: close
<html>
...
</html>



ด้านล่างก็เป็นส่วน body ของ respond ซึ่งโดยส่วนใหญ่ก็จะเป็น HTML ที่นำมาแสดงในหน้า browser กันนะเอง โดย browser จะอ่าน message ในส่วนของ body และตีความและแสดงให้เราเห็น ดังนั้นเราจึงมี HTML standard ที่กำหนดว่า tag อะไรจะต้องแสดงผลแบบไหน ซึ่ง browser แต่ละ version ก็จะมีการบอกไว้ว่าตัวนี้ comply กับ HTML version อะไร ก็คือเป็น standard version นะเอง