http請求分析

一個Http請求通常始於以下幾種方式:json

  1.在瀏覽器中輸入一個URL地址瀏覽器

  2.網頁中的一個超連接服務器

  3.Response.Redirect("http://www.sohu.com")在後臺進行重定向app

  4.Form表單提交異步

  前三種方式都是以Get方式發起請求。第四種方式能夠以Get方式發起請求,也能夠以Post方式發起請求,只須要設置<form action="" method="Get/Post"></form>的method屬性便可,默認該屬性值爲Get.post

  當客戶端發起一個Http請求到服務端時,會傳輸一個Http請求消息給服務端,標準的Http請求消息格式以下:編碼

    請求行(request-line)——請求行的格式爲:請求方式_資源路徑_http版本號(Get http://www.sohu.com/Default.aspx HTTP/1.1)
    消息頭(headers)——說明服務器要使用的附加信息(ContentType:application/json Content_Length:18 等等其餘頭信息)
    回車換行(CRLF)——代表頭部信息結束
    主體數據(request-body)——須要傳輸到服務端的數據內容,以Post方式請求時纔會有該項數據。(username=tom&age=21)
    回車換行(CRLF)——代表主體數據信息結束    

  須要說明的是:url

    1.當一個Http請求時Get方式的請求時,請求消息中只有前三項,而沒有主體數據。當以Post方式請求時,會包含上述五項信息。spa

    2.不管是Get請求仍是Post請求,請求行中的資源路徑必須是application/x-www-form-urlencoded方式編碼。Get請求時,瀏覽器會自動對其進行UrlEncode。Post請求時,瀏覽器不會自動進行UrlEncode,全部須要手動對資源路徑進行UrlEncode.code

    3.Post請求時,請求消息中存在主體數據,主體數據的編碼方式由消息頭中的ContentType屬性來設置,主體數據的長度由Content_Length來設置。故在進行一些異步的Post請求時,須要設置ContentType屬性。若是使用form表單進行Post請求時,只須要設置form元素的encType屬性便可,瀏覽器會在請求消息的消息頭中加入ContentType屬性,而且值爲encType的值。若是沒有設置encType屬性值,默認會將ContentType設置爲application/x-www-form-urlencoded。

    4.form元素進行請求時,若是是Get方式進行請求,action標籤屬性中若是存在"?子句",GET方式將會忽略這個子句。瀏覽器會自動將表單域的元素的name和value組成鍵值對放在請求的Url後面,如http://localhost/Default.aspx?age=21。若是以Post方式進行請求,action標籤屬性中存在"?子句",Post方式會保留這個子句,服務端也能夠得到這個子句。

    5.若是form元素進行請求時,form內含有文件上傳控件,須要上傳文件數據是,encType要設置成"multipart/form-data"。

注:

  在Form元素的語法中,EncType表示提交數據的格式。 Enctype 屬性指定將數據回發到服務器時瀏覽器使用的編碼類型。
  下邊是說明: 
    application/x-www-form-urlencoded: 窗體數據被編碼爲名稱/值對。這是標準的編碼格式。 
    multipart/form-data: 窗體數據被編碼爲一條消息,頁上的每一個控件對應消息中的一個部分。 
    text/plain: 窗體數據以純文本形式進行編碼,其中不含任何控件或格式字符。

  Form的enctype屬性爲編碼方式,經常使用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認爲application/x-www-form-urlencoded。

  當action爲get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form數據轉換成一個字串(name1=value1&name2=value2...),而後把這個字串append到url後面,用?分割,加載這個新的url。

  當action爲post時候,瀏覽器把form數據封裝到http body中,而後發送到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)。

相關文章
相關標籤/搜索