1. 程式人生 > >關於URL和http協議,http消息格式

關於URL和http協議,http消息格式

new chrome 中文名 ring 傳說 socket實現 tex tcp 資訊

轉自:http://crystal2012.iteye.com/blog/1447845

在WWW(全球資訊網)中想要連結到某個網頁,便需要給瀏覽器一個位址,而URL在此的功能就是告知瀏覽器某個資源在那個位置,簡單來說,通常我們在IE或Netscape瀏覽器中所輸入的網址就是URL的其中一種。

HTTP(Hypertext Transfer Protocol)超文字傳輸通訊協定是WWW中伺服器和瀏覽器最主要的溝通方式,而為了能讓瀏覽器正確的在網路上找資料的位置,於是便以URL的方式使瀏覽器確定某一資源的位置。通常URL不一定是指向一份超媒體文件,它也可以是某種網路上的服務,如Ftp、Gopher等。

URL的格式

URL是以「://」為區隔,舉例來說,「http://www.dreye.com/」這個網址,「://」之前的「http」便是Protocol(傳輸或通訊協定),而之後的「www.dreye.com」所指的便是伺服器的位址,其中「www」便是「World Wide Web」,而「dreye」是此站的名稱,而「com」所指的是「網域類型」,由於受限於DNS的型式,所以其中需以「.」點分開;通常還會在後面加上「國別」(如臺灣便是tw)而組成最基本URL的格式:「Protocol://連結類型.站名.網域類型.國別」。

http是通訊方式 他要用url

url簡單說就是網址,URL(Uniform Resource Locator)中文名稱是「全球資源定位器」,也被翻譯做「通用資源位標」,是也就是一個位址,可單獨識別網際網路上的電腦、目錄或檔案位置,也可以指定通訊協定,例如 Gopher、HTTP 等等。URL能讓在Internet上的所有資源都能透過此的方法而找到其位置。

HTTP(Hypertext Transfer Protocol)超文字傳輸通訊協定是WWW中伺服器和瀏覽器最主要的溝通方式,而為了能讓瀏覽器正確的在網路上找資料的位置,於是便以URL的方式使瀏覽器確定某一資源的位置。通常URL不一定是指向一份超媒體文件,它也可以是某種網路上的服務,如Ftp、Gopher等。

URL只是標識資源的位置,HTTP用來提交和獲取資源,URL不僅用戶HTTP還可以用於HTTPS、FTP等.

GET請求和POST請求有什麽區別?GET請求的參數在URL的問號後面顯示,而POST參數不在URL上;POST可以比GET請求更大的數據…一般的回答都是這樣。

但是作為一個高端大氣上檔次的程序員,這樣回答就弱爆了。 為了搞清楚GET和POST的區別,下面寫了一個Java程序來接收HTTP請求。 HTTP是基於TCP協議的,所以可以使用Java最底層的Socket實現。下面的程序僅僅不到10行代碼,舍去了異常處理、資源關閉的代碼,所以它跟真正的HTTP服務器的差距還略遙遠,這裏有點標題黨了。當然,不要在意這些細節。 [java] 技術分享
public static void main(String[] args) throws IOException {  
    // 服務器監聽端口號8081  
    ServerSocket serverSocket = new ServerSocket(8081);  
  
    // 等待接收請求,這是一個阻塞的方法,當請求到來的時候才會繼續向下執行  
    Socket socket = serverSocket.accept();  
  
    // 獲取請求內容  
    InputStream is = socket.getInputStream();  
    InputStreamReader reader = new InputStreamReader(is);  
  
    // 輸出請求內容  
    while (true) {  
        System.out.print((char)reader.read());  
    }  
}  
技術分享

HTTP服務器寫好了,下面是客戶端。瀏覽器就是HTTP客戶端,不用自己去實現了,只需要寫HTML就行。 [html]
<form method="get" action="http://localhost:8081">  
    name:<input type="text" name="name" /><br>  
    age:<input type="text" name="age" /><br>  
    <input type="submit" />  
</form>  
GET請求: 設置form的method="get",啟動Java程序,用瀏覽器打開HTML輸入。 提交後看Java程序輸出: 技術分享
GET /?name=XXG&age=23 HTTP/1.1
Host: localhost:8081
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
技術分享 POST請求: 設置form的method="post",啟動Java程序,用瀏覽器打開HTML輸入提交。 Java程序輸出: 技術分享
POST / HTTP/1.1
Host: localhost:8081
Connection: keep-alive
Content-Length: 15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
 
name=XXG&age=23
技術分享 兩個實驗可以看出,GET和POST參數所在請求數據中的位置不同,這才是GET和POST最基本的區別。 這裏科普一下HTTP協議,HTTP請求一般包含三個部分: Request-Line Header <空行> Message-Body[GET請求不包含Message-Body] 其中Request-Line,就是請求的第一行,例如上面兩個請求: GET /?name=XXG&age=23 HTTP/1.1 POST / HTTP/1.1 它由三部分組成,請求Method(GET/POST/其他)、Request-URI、HTTP-Version,三個部分中間空格隔開。 Header就是傳說中的請求頭,鍵值對的形式,每一條占一行。使用不同瀏覽器這部分的內容也不同。 Message-Body是請求主體,POST請求參數就在這一部分,它與Header之間必須要用空行隔開,這樣服務器才能分清楚Header和Body。Message-Body的長度就是Header中的Content-Length。一般GET請求中是沒有這一部分的。 上面POST請求中的參數就是Message-Body: name=XXG&age=23 所以,如果再有人問GET請求和POST請求的區別,可以回答: GET請求的參數在URL中,在請求的第一行Request-Line中,而POST請求的參數在請求主體Message-Body中。

關於URL和http協議,http消息格式