了解HTTP Headers的方方面面(2)
被稱作「first line」的第一行包含三個部分:
剩下的部分每行都是一個「Name:Value」對。它們包含了各式各樣關於請求和你瀏覽器的信息。例如」User-Agent「就表明了你瀏覽器版本和你所用的操作系統。」Accept-Encoding「會告訴伺服器你的瀏覽可以接受類似gzip的壓縮輸出。
這些headers大部分都是可選的。HTTP 請求甚至可以被精簡成這樣子:
GET/tutorials/other/top-20-mysql-best-practices/HTTP/1.1Host:net.tutsplus.com
並且你仍舊可以從伺服器收到有效的響應。
請求類型三種最常見的請求類型是:GET,POST 和 HEAD ,從html的編寫過程中你可能已經熟悉了前兩種。
GET:獲取一個文檔大部分被傳輸到瀏覽器的html,images,js,css, … 都是通過GET方法發出請求的。它是獲取數據的主要方法。
例如,要獲取Nettuts+ 的文章,http request的第一行通常看起來是這樣的:
GET/tutorials/other/top-20-mysql-best-practices/HTTP/1.1
一旦html載入完成,瀏覽器將會發送GET 請求去獲取圖片,就像下面這樣:
GET/wp-content/themes/tuts_theme/images/header_bg_tall.pngHTTP/1.1
表單也可以通過GET方法發送,下面是個例子:
<form action="foo.php" method="GET">First Name: <input name="first_name" type="text" />Last Name: <input name="last_name" type="text" /><input name="action" type="submit" value="Submit" /></form>
當這個表單被提交時,HTTP request 就會像這樣:
GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1...
你可以將表單輸入通過附加進查詢字元串的方式發送至伺服器。
POST:發送數據至伺服器儘管你可以通過GET方法將數據附加到url中傳送給伺服器,但在很多情況下使用POST發送數據給伺服器更加合適。通過GET發送大量數據是不現實的,它有一定的局限性。
用POST請求來發送表單數據是普遍的做法。我們來吧上面的例子改造成使用POST方式:
<form action="foo.php" method="POST">First Name: <input name="first_name" type="text" />Last Name: <input name="last_name" type="text" /><input name="action" type="submit" value="Submit" /></form>
提交這個表單會創建一個如下的HTTP 請求:
POST /foo.php HTTP/1.1Host: localhostUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveReferer: http://localhost/test.phpContent-Type: application/x-www-form-urlencodedContent-Length: 43first_name=John&last_name=Doe&action=Submit
這裡有三個需要注意的地方:
POST方式的請求也可用在AJAX,應用程序,cURL … 之上。並且所有的文件上傳表單都被要求使用POST方式。
HEAD:接收頭部信息HEAD和GET很相似,只不過HEAD不接受HTTP響應的內容部分。當你發送了一個HEAD請求,那就意味著你只對HTTP頭部感興趣,而不是文檔本身。
這個方法可以讓瀏覽器判斷頁面是否被修改過,從而控制緩存。也可判斷所請求的文檔是否存在。
例如,假如你的網站上有很多鏈接,那麼你就可以簡單的給他們分別發送HEAD請求來判斷是否存在死鏈,這比使用GET要快很多。
推薦閱讀:
※Go Programming Language http
※特殊的Http請求multipart
※前端工程師應該對 HTTP 了解到什麼程度?從哪些途徑去熟悉更好?
※大誤-用FreeBSD的ports安裝apache+php+mysql
※共用的抽象模型(客戶及伺服器端)- (編集/反編集)過程