HTTP协议实体的基本讲解
HTTP協(xié)議是基于請求/響應范式的。一個客戶機與服務器建立連接后,發(fā)送一個請求給服務器,請求方式的格式為,統(tǒng)一資源標識符、協(xié)議版本號,后邊是MIME信息包括請求修飾符、客戶機信息和可能的內(nèi)容。服務器接到請求后,給予相應的響應信息,其格式為一個狀態(tài)行包括信息的協(xié)議版本號、一個成功或錯誤的代碼,后邊是MIME信息包括服務器信息、實體信息和可能的內(nèi)容。 許多HTTP通訊是由一個用戶代理初始化的并且包括一個申請在源服務器上資源的請求。最簡單的情況可能是在用戶代理(UA)和源服務器(O)之間通過一個單獨的連接來完成。
當一個或多個中介出現(xiàn)在請求/響應鏈中時,情況就變得復雜一些。中介由三種:代理(Proxy)、網(wǎng)關(guān)(Gateway)和通道(Tunnel)。一個代理根據(jù)URI的絕對格式來接受請求,重寫全部或部分消息,通過URI的標識把已格式化過的請求發(fā)送到服務器。網(wǎng)關(guān)是一個接收代理,作為一些其它服務器的上層,并且如果必須的話,可以把請求翻譯給下層的服務器協(xié)議。一個通道作為不改變消息的兩個連接之間的中繼點。當通訊需要通過一個中介(例如:防火墻等)或者是中介不能識別消息的內(nèi)容時,通道經(jīng)常被使用.
HTTP協(xié)議實體
請求消息和響應消息都可以包含實體信息,實體信息一般由實體頭域和實體組成。實體頭域包含關(guān)于實體的原信息,實體頭包括Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。extension-header允許客戶端定義新的實體頭,但是這些域可能無法未接受方識別。實體可以是一個經(jīng)過編碼的字節(jié)流,它的編碼方式由Content-Encoding或Content-Type定義,它的長度由Content-Length或Content-Range定義。
Content-Type實體頭
Content-Type實體頭用于向接收方指示實體的介質(zhì)類型,指定HEAD方法送到接收方的實體介質(zhì)類型,或GET方法發(fā)送的請求介質(zhì)類型Content-Range實體頭 Content-Range實體頭用于指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在服務器向客戶返回一個部分響應,它必須描述響應覆蓋的范圍和整個實體長度。
一般格式: Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth 例如,傳送頭500個字節(jié)次字段的形式:Content-Range:bytes0-499/1234如果一個http消息包含此節(jié)(例如,對范圍請求的響應或?qū)σ幌盗蟹秶闹丿B請求),Content-Range表示傳送的范圍,Content-Length表示實際傳送的字節(jié)數(shù)。
Last-modified實體頭
Last-modified實體頭指定服務器上保存內(nèi)容的最后修訂時間。 例如,傳送頭500個字節(jié)次字段的形式:Content-Range:bytes0-499/1234如果一個http消息包含此節(jié)(例如,對范圍請求的響應或?qū)σ幌盗蟹秶闹丿B請求),Content-Range表示傳送的范圍,Content-Length表示實際傳送的字節(jié)數(shù)。
首先解釋下form的enctype屬性的問題:
該屬性為提交表單瀏覽器對數(shù)據(jù)的編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認為application/x-www-form-urlencoded。
當action為get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form數(shù)據(jù)轉(zhuǎn)換成一個字串(name1=value1&name2=value2...),然后把這個字串a(chǎn)ppend到url后面,用?分割,加載這個新的url。
當action為post時候,瀏覽器把form數(shù)據(jù)封裝到http body中,然后發(fā)送到server。
如果沒有type=file的控件,用默認的application/x-www-form-urlencoded就可以了。
但是如果有type=file的話,就要用到multipart/form-data了。瀏覽器會把整個表單以控件為單位分割,并為每個部分加上Content-Disposition(form-data或者file),Content-Type(默認為text/plain),name(控件name)等信息,并加上分割符(boundary)。
如果有以下form,并選擇了file1.txt上傳
<form action="http://server.com/cgi/handle"
?????? enctype="multipart/form-data"
?????? method="post">
?? <input type="text" name="submit-name" value="chmod777"><br />
?? What files are you sending? <input type="file" name="files"><br />
< /form>
則有如下body:
Content-Type: multipart/form-data; boundary=AaB03x
?? --AaB03x
?? Content-Disposition: form-data; name="submit-name"
?? chmod777
?? --AaB03x
?? Content-Disposition: form-data; name="files"; filename="file1.txt"
?? Content-Type: text/plain
?? ... contents of file1.txt ...
?? --AaB03x--
那么如何解決圖片問題呢?(ajax的httpxmlrequest無法上傳文件的)
| 先創(chuàng)建一個Iframe,然后form的target指向它。 |
<form?? action="upload.jsp"?? enctype="multipart/form-data"?? method="post"? target="ifm" >
< /form>
< iframe id='ifm' name='ifm' style="display:none"/>
后臺處理完后可以輸出:
<script type="text/javascript">alert("'+message+'")</script>;
這樣便可完成判斷上傳是否成功的功能。
轉(zhuǎn)載于:https://www.cnblogs.com/jackljf/archive/2012/07/24/3589366.html
總結(jié)
以上是生活随笔為你收集整理的HTTP协议实体的基本讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript DOM对属性的操作
- 下一篇: ASP.NET MVC3 中设置html