HTTP要求方法詳解

來源:互聯網
上載者:User

標籤:

HTTP要求方法詳解

要求方法:指定了用戶端想對指定的資源/伺服器作何種操作
 下面我們介紹HTTP/1.1中可用的要求方法:


【GET:擷取資源】
     GET方法用來請求已被URI識別的資源。指定的資源經伺服器端解析後返迴響應內容(也就是說,如果請求的資源是文本,那就保持原樣返回;如果是CGI[通用閘道介面]那樣的程式,則返回經過執行後的輸出結果)。
     最常用於向伺服器查詢某些資訊。必要時,可以將查詢字串參數追加到URL末尾,以便將資訊發送給伺服器。
     使用GET請求時經常會發生的一個錯誤,就是查詢字串的格式有問題。查詢字串中每個參數的名稱和值都必須使用encodeURLComponent()進行編碼,然後才能放到URL的末尾;而且所有的名-值對都必須由(&)分離,如下面的例子:
         xhr.open("get","01.php?name=foodoir&age=21",true);
     下面這個函數可以輔助現有URL的末尾添加查詢字串參數:

     function addURLParam(url,name,value){        url += (url.indexOf("?") == -1 ? "?" : "&");        url += encodeURIComponent(name) + "=" + encodeURIComponent(value);        return url;    }

    這個addURLParam函數接受三個參數:要添加參數的URL、參數的名稱和參數的值。
    下面是使用這個函數來構建URL的樣本

    var url = "example.php";    //添加參數    url = addURLParam(url,"name","foodoir");    url = addURLParam(url,"age","21");    //初始化請求    xhr.open("get",url,false);

   
【POST:傳輸實體文本】
    POST方法用來傳輸實體的主體。
    雖然用GET方法也可以傳輸實體的主體,但一般不用GET方法進行傳輸,而是用POST方法;雖然GET方法和POST方法很相似,但是POST的主要目的並不是擷取響應的主體內容。
    POST請求的主體可以包含非常多的資料,而且格式不限。下面舉一個例子:
         xhr.open("post","01.php",true);
    發送POST請求的第二步就是向send方法中傳入某些資料,由於XHR最初的設計是為了處理XML,因此也可以在此處理XML DOM文檔,傳入的文檔經過序列化之後將作為請求主體被提交到伺服器。
    預設情況下,伺服器對於POST請求和提交WEB表單的請求並不會一視同仁,我們來看下面一段代碼:

function(){    var xhr = CreateXHR();    xhr.onreadystatechange = function(){        if(xhr.readyState == 4){//檢測XHR的readyState屬性            if((xhr.status >= 200 && xhr.status <= 300) || xhr.status == 304){                alert(xhr.responseText);            }else{                alert("Request was unsuccessful:" + xhr.status);            }        }    };        xhr.open("post","post.php",true);    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");    var form = document.getElementById("ID");    xhr.send(serialize(form));}

    我們可以模仿XHR表單提交:首先將Content-Type頭部資訊設定為application/x-www-form-urlencoded,也就是表單提交時的類型,其次是以適當的格式建立一個字串(POST資料格式與查詢字串的格式相同),如果需要將頁面中表單的資料進行序列化,然後再通過XHR函數發送到伺服器,那麼可以使用序列化函數serialize(),(表單序列化,這裡不作具體介紹)

在這裡我們來比較GET方法和POST方法本質上的區別:

  1、GET方法用於資訊擷取,它是安全的(安全:指非修改資訊,如資料庫方面的資訊),而POST方法是用於修改伺服器上資源的請求;

  2、GET請求的資料會附在URL之後,而POST方法提交的資料則放置在HTTP報文實體的主體裡,所以POST方法的安全性比GET方法要高;

  3、GET方法傳輸的資料量一般限制在2KB,其原因在於:GET是通過URL提交資料,而URL本身對於資料沒有限制,但是不同的瀏覽器對於URL是有限制的,比如IE瀏覽器對於URL的限制為2KB,而Chrome,FireFox瀏覽器理論上對於URL是沒有限制的,它真正的限制取決於作業系統本身;POST方法對於資料大小是無限制的,真正影響到資料大小的是伺服器處理常式的能力。
    
【HEAD:獲得報文首部】
    HEAD方法和GET方法一樣,知識不返回豹紋的主體部分,用於確認URI的有效性及資源更新的日期時間等。
    具體來說:1、判斷類型; 2、查看響應中的狀態代碼,看對象是否存在(響應:請求執行成功了,但無資料返回); 3、測試資源是否被修改過
    HEAD方法和GET方法的區別: GET方法有實體,HEAD方法無實體。

【PUT:傳輸檔案】
    PUT方法用來傳輸檔案,就像FTP協議的檔案上傳一樣,要求在請求報文的主體中包含檔案內容,然後儲存在請求URI指定的位置。但是HTTP/1.1的PUT方法自身不帶驗證機制,任何人都可以上傳檔案,存在安全問題,故一般不用。

【DELETE:刪除檔案】
    指明用戶端想讓伺服器刪除某個資源,與PUT方法相反,按URI刪除指定資源
    
【OPTIONS:詢問支援的方法】
    OPTIONS方法用來查詢針對請求URI指定資源支援的方法(用戶端詢問伺服器可以提交哪些要求方法)
    
【TRACE:追蹤路徑】
    用戶端可以對請求訊息的傳輸路徑進行追蹤,TRACE方法是讓Web伺服器端將之前的請求通訊還給用戶端的方法
    
【CONNECT:要求用隧道協議串連代理】
    CONNECT方法要求在與Proxy 伺服器通訊時建立隧道,實現用隧道協議進行TCP通訊。主要使用SSL(安全套接層)和TLS(傳輸層安全)協議把通訊內容加密後經網路隧道傳輸。

更多參考資料:

  《Javascript進階程式設計(第三版)》第21章;

  《圖解HTTP》第二章;

HTTP要求方法詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.