HTTP入門php
一、簡介css
HTTP(HyperText Transfer Protocol)超文本傳輸協議,是一種無狀態的應用層協議,主要用於傳輸超文本。無狀態是指協議對於事務處理沒有記憶能力,同一個會話的連續兩個請求互相不瞭解。(爲了支持客戶端與服務器之間的動態交互,產生了Cookie和Session技術,Cookie和Session能夠爲HTTP會話保持狀態)服務器
二、消息格式測試
HTTP消息包括客戶端發送到服務器的請求消息和服務器發送到客戶端的響應消息兩種。HTTP會話通常由客戶端經過發送請求消息而發起。編碼
HTTP消息的格式是(請求消息和響應消息的格式大體相同,只是在開始行上有一些差異): 開始行(對於請求消息,開始行就是請求行,對於響應消息,開始行就是狀態行) 零個或更多個頭域(常常被稱做「頭」),事務
一個指示頭域結束的空行ip
一個無關緊要的消息主體(message-body)資源
三、請求消息it
請求消息格式:io
請求行
零個或更多個頭域(常常被稱做「頭」),
一個指示頭域結束的空行
一個無關緊要的消息主體(message-body)
其中請求行的格式是:
請求方法+請求URL+HTTP-Version+換行回車
一個請求報文的例子:
GET /index.php HTTP/1.1\r\n //請求行,下面兩行是對第一行的解釋
Request Method: GET
Request Version: HTTP/1.1
Accept: */*\r\n //如下是頭域部分
ThreadID: 1880\r\n
Accept-Language: zh-cn\r\n
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; SE 2.X; .NET CLR 2.0.50727)\r\n
Host: 172.16.1.139\r\n
Connection: Keep-Alive\r\n
Cookie: VWPHPSESSID=057c990f7e67d06b1f5ad001e70e69dc\r\n
\r\n //空行,表示頭域結束
//消息體爲空
請求方法:
GET 請求獲取Request-URI所標識的資源
POST 在Request-URI所標識的資源後附加新的數據,好比提交留言
HEAD 只請求響應消息的報頭,不要消息主體
PUT 請求服務器存儲一個資源,並用Request-URI做爲其標識,就是建立資源
DELETE 請求服務器刪除Request-URI所標識的資源
TRACE 請求服務器回送收到的請求信息,主要用於測試或診斷
CONNECT 保留未來使用
OPTIONS 請求查詢服務器的能力,或者查詢與資源相關的選項和需求
四、響應消息
響應消息格式:
狀態行
零個或更多個頭域(常常被稱做「頭」),
一個指示頭域結束的空行
一個無關緊要的消息主體(message-body)
其中狀態行的格式是:
HTTP-Version +狀態碼+緣由描述+換行回車
一個響應報文的例子:
HTTP/1.1 200 OK\r\n //狀態行,後兩行是對第一行的解釋
Request Version: HTTP/1.1
Response Code: 200
Content-Type: text/css\r\n //頭域開始
Accept-Ranges: bytes\r\n
ETag: "1576843214"\r\n
Last-Modified: Sat, 01 Jan 2000 00:00:04 GMT\r\n
Content-Length: 2850
Date: Thu, 10 Mar 2011 09:16:18 GMT\r\n
Server: lighttpd/1.4.19\r\n
\r\n //空行,表示頭域結束
+Line-based text data: text/css //消息主體,此處省略一部分
狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態代碼、狀態描述、說明:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經受權,
403 Forbidden //服務器收到請求,可是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後,
//可能恢復正常
五、頭域類型
HTTP經過頭域來傳遞一些參數,好比客戶端支持的字符集、語言、壓縮方法、服務器提供的驗證信息、實體的長度信息、編碼信息等等。
HTTP的頭域分爲經常使用頭、請求頭、響應頭和實體頭。
經常使用頭域既能用於請求消息也能用於響應消息,可是不能用於實體。下面是一些經常使用頭域:general-header = Cache-Control
| Connection
| Date
| Pragma
| Trailer
| Transfer-Encoding
| Upgrade
| Via
| Warning
請求頭域容許客戶端傳遞請求的附加信息和客戶端本身的附加信息給服務器。這些頭域做爲請求的修飾符。請求頭域只能用於請求消息。下面是一些請求頭域:
請求頭(request-header) = Accept
| Accept-Charset
|Accept-Encoding
|Accept-Language
|Authorization
|Expect
|From
|Host
|If-Match
|If-Modified-Since
| If-None-Match
| If-Range
| If-Unmodified-Since
| Max-Forwards
| Proxy-Authorization
| Range
| Referer
|TE
| User-Agent
響應頭域容許服務器傳送響應的附加信息,這些信息不能放在狀態行(Status-Line)裏。這些頭域給出有關服務器的信息以及請求URI(Request-URI)指定的資源的一些信息。response-header = Accept-Ranges
|Age
|Etag
|Location
|Proxy-Autenticate
|Retry-After
|Server
|Vary
|WWW-Authenticate
實體包括實體頭域(entity-header)與實體主體(entity-body)。消息主體通過傳輸譯碼以後就成爲實體主體。就是說實體主體在服務器端先經過傳輸編碼轉換成消息體,而後消息體在客戶端經過傳輸譯碼轉換爲實體主體。下面是一些實體頭域:
entity-header = Allow
| Content-Encoding
| Content-Language
| Content-Length
| Content-Location
| Content-MD5
| Content-Range
| Content-Type
| Expires
| Last-Modified