面試一 : http 請求頭詳解

         最近開始找實習工做了,就投了幾份簡歷,同時也收到了幾個電話面試,不過面試的結果不是很好,不少東西之前學過的東西如今都忘了,也許是學的時候就沒有認真整理,一直只在作應用,面試官說的很對,咱們是在作應用,可是不少的基礎知識是咱們作應用的基礎,是不可以忽略的,如今我就將我面試中遇到的問題和你們一塊兒分享一下,我也就是一個小本科生,下面是本身的理解,但願你們給出指導意見,不對的地方,但願你們可以給指出。html

        http協議:
面試

        HTTP是一個屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統瀏覽器

        http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的鏈接方式,服務器

        http請求由三部分組成,分別是:請求行、消息報頭、請求正文app

        HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文分佈式

HTTP1.1版本中給出一種持續鏈接的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用ide

        面試官給出的問題是 :
編碼

        http協議請求頭都有哪些:
url

        http 分爲兩部分:請求和響應spa

        HTTP請求的格式以下所示:

        <request-line>
        <headers>
        <blank line>
        [<request-body>]

        在HTTP請求中,第一行必須是一個請求行(request line),用來講明請求類型、要訪問的資源以及使用的HTTP版本。緊接着是一個首部(header)小節,用來講明服務器要使用的附加信息。在首部以後是一個空行,再此以後能夠添加任意的其餘數據[稱之爲主體(body)]。

        在HTTP中,定義了多種請求類型,一般咱們關心的只有GET請求和POST請求。只要在Web瀏覽器上輸入一個URL,瀏覽器就將基於該URL向服務器發送一個GET請求,以告訴服務器獲取並返回什麼資源

        下面咱們看一個GET請求:

        對於www.baidu.com的GET請求以下所示:

        GET / HTTP/1.1
        Host: www.baidu.com

        User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
        Gecko/20050225 Firefox/1.0.1
        Connection: Keep-Alive


        請求行的第一部分說明了該請求是GET請求。該行的第二部分是一個斜槓(/),用來講明請求的是該域名的根目錄。該行的最後一部分說明使用的是HTTP 1.1版本(另外一個可選項是1.0)。那麼請求發到哪裏去呢?這就是第二行的內容。

        第2行是請求的第一個首部,HOST。首部HOST將指出請求的目的地。結合HOST和上一行中的斜槓(/),能夠通知服務器請求的是www.baidu.com/(HTTP 1.1才須要使用首部HOST,而原來的1.0版本則不須要使用)。第三行中包含的是首部User-Agent,服務器端和客戶端腳本都可以訪問它,它是瀏覽器類型檢測邏輯的重要基礎。該信息由你使用的瀏覽器來定義(在本例中是Firefox 1.0.1),而且在每一個請求中將自動發送。最後一行是首部Connection,一般將瀏覽器操做設置爲Keep-Alive(固然也能夠設置爲其餘值)。注意,在最後一個首部以後有一個空行。即便不存在請求主體,這個空行也是必需的。

        要發送GET請求的參數,則必須將這些額外的信息附在URL自己的後面。其格式相似於:

        URL ? name1=value1&name2=value2&..&nameN=valueN


        下面咱們再簡要的看一下另一種請求方式:

        POST請求在請求主體中爲服務器提供了一些附加的信息。一般,當填寫一個在線表單並提交它時,這些填入的數據將以POST請求的方式發送給服務器。

        如下就是一個典型的POST請求:

        POST / HTTP/1.1
        Host: www.baidu.com

        User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
        Gecko/20050225 Firefox/1.0.1
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 40
        Connection: Keep-Alive

        name=Professional%20Ajax&publisher=Wiley

        從上面能夠發現, POST請求和GET請求之間有一些區別。首先,請求行開始處的GET改成了POST,以表示不一樣的請求類型。你會發現首部Host和User-Agent仍然存在,在後面有兩個新行。其中首部Content-Type說明了請求主體的內容是如何編碼的。瀏覽器始終以application/ x-www-form- urlencoded的格式編碼來傳送數據,這是針對簡單URL編碼的MIME類型。首部Content-Length說明了請求主體的字節數。在首部Connection後是一個空行,再後面就是請求主體。

        
HTTP響應

        以下所示,HTTP響應的格式與請求的格式十分相似:
        <status-line>
        <headers>
        <blank line>
        [<response-body>]

        正如你所見,在響應中惟一真正的區別在於第一行中用狀態信息代替了請求信息。狀態行(status line)經過提供一個狀態碼來講明所請求的資源狀況。如下就是一個HTTP響應的例子:

        HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122

        <html>
        <head>
        <title>Wrox Homepage</title>
        </head>
        <body>
        <!-- body goes here -->
        </body>
        </html>

        在本例中,狀態行給出的HTTP狀態代碼是200,以及消息OK。


常見狀態碼信息       
狀態行格式以下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態代碼、狀態描述、說明:
200 OK      //客戶端請求成功
400 Bad Request  //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用 
403 Forbidden  //服務器收到請求,可是拒絕提供服務
404 Not Found  //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable  //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常
eg:HTTP/1.1 200 OK (CRLF)




參考博客:http://blog.csdn.net/kfanning/article/details/6062118

相關文章
相關標籤/搜索