1. 程式人生 > >HTTP的請求方法一共有9種,有OPTIONS, HEAD, GET, POST等等(消息頭有圖,十分清楚)

HTTP的請求方法一共有9種,有OPTIONS, HEAD, GET, POST等等(消息頭有圖,十分清楚)

ram () 哪些 ive 十分 enc set utf-8 cat

請求方法:指定了客戶端想對指定的資源/服務器作何種操作
下面我們介紹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方法要求在與代理服務器通信時建立隧道,實現用隧道協議進行TCP通信。主要使用SSL(安全套接層)和TLS(傳輸層安全)協議把通信內容加密後經網絡隧道傳輸。

更多參考資料:

  《Javascript高級程序設計(第三版)》第21章;

  《圖解HTTP》第二章;

http://www.cnblogs.com/foodoir/p/5911099.html

客戶端連上服務器後,向服務器發出獲取某個 Web 資源的消息,稱之為客戶端向服務器發送了一個 HTTP 請求。一個完整的 HTTP 請求包括如下內容:
①請求行
②若幹消息頭(請求頭)
③實體內容(請求體) 有可能沒有

技術分享

技術分享

  • 請求方式

HTTP 中定義了 7 種請求方式:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT。其中最常用的是 GET 和 POST

1,GET 請求

[1]從字面意思來說,GET 請求是用來向服務器端獲取信息而發送的請求。
[2]沒有特殊設置, 默認情況下瀏覽器發送的都是 GET 請求, 具體的一共有5種,點擊超鏈接,表單提交沒有設置method,表單提交設置method為get方式,在瀏覽器地址欄直接輸入地址訪問,ajax中設置請求方式為get。
[3]GET 請求也可以向服務器端發送請求參數, 形式是在 URL 地址後面加上?,請求參數名和值用=連接,多個請求參數之間使用&分隔。例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1。

需要註意的是:GET 方式所能夠攜帶的數據是由限制的,其數據大小通常不能超過 4K, 不適於提交大量表單數據, 故而在表單的提交方式中首選 POST 方式。

2,POST 請求

[1]POST 請求的字面含義是向服務器端發送數據,僅在表單中設置method=”post”時,請求方式為 POST 方式,另外在 Ajax 應用中,可以指定請求方式為 POST。
[2]POST 請求會將請求參數放在請求體中,而不是 URL 地址後面,並且發送數據的大小是沒有限制的。
關於GET和POST2個請求方式,記住一句話就好了:GET一般用來從服務器獲取數據,POST一般用來向服務器發送數據。

  • 請求消息頭

請求消息頭簡稱請求頭,用來向服務器報告瀏覽器端的一些基本信息。
常用請求頭
代碼 說明
Accept: text/html,image/* 我支持的數據類型
Accept-Charset: utf-8 支持的數據的編碼字符集
Accept-Encoding: gzip 支持的壓縮方式
Accept-Language: en-us,zh-cn 支持的語言
Host: localhost:8888 請求的主機名
Referer: http://www.baidu.com/index.jsp 發送請求的界面對應的 url 防盜鏈
User-Agent: Mozilla/4.0 瀏覽器的相關信息
Connection: keep-Alive 請求完成後,到是斷開呢還是連接著
Date: Tue, 11 Jul 2000 18:23:51 GMT 發送請求的時間
Cookie: tt=123 對具體客戶端所做的標記

  • 請求體

GET 請求沒有請求體,POST 請求: 如果 form 表單提交的方式為 post,則表單項的數據以請求體的形式發送給服務器,沒有大小限制。

http://blog.csdn.net/u011794238/article/details/46408051

HTTP的請求方法一共有9種,有OPTIONS, HEAD, GET, POST等等(消息頭有圖,十分清楚)