HTTP是hypertext transfer protocol(超文本傳輸協議)的簡寫,它是TCP/IP協議的一個應用層協議,用於定義WEB瀏覽器與WEB服務器之間數據交換的過程。
1.Http1.0和1.1
Http1.0:請求一次,連接自動斷開。
Http1.1:一次連接,可以發起多次請求。
2.在windows中使用telnet發起Http請求
telnet localhost 8080 //連上服務器
GET /abc/1.html HTTP/1.1 // 編寫HTTP請求
Host: // 輸入服務器名
3.HTTP請求的格式
【一個請求行】換行
【若干個請求頭】換行
換行
【post消息】
例如:
GET /books/abc.html HTTP/1.1
Accept:image/webp,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:uuid_tt_dd=1603386812225897869_20161020; __message_sys_msg_id=0; __message_gu_msg_id=0; __message_cnel_msg_id=0; __message_district_code=000000; __message_in_school=0; dc_tos=ofbqa0; dc_session_id=1476929736226
Host:dc.csdn.net
Referer:http://www.csdn.net/article/2014-09-17/2821721
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
// 說明
//第一行是請求行 格式為:【請求方式 資源URL HTTP版本號】
// 請求方式共有7種,常用的是GET和POST兩種,GET常用來從服務器得到信息,POST主要用來向服務器提交信息
// GET請求提交給服務器的信息被寫在URL的“?“后面,使用“&”分隔多個鍵值對,不具有保密性,通常該信息容量最大不超過1K
// POST請求發給服務器端的信息無容量限制,該信息被放在請求體里發給服務器。POST請求通常通過form表單提交。
//第二行開始是多條請求頭信息
2.常用請求頭
Accept:客戶支持的數據類型,全支持是"*/*",部分支持比如"text/html image"表示支持HTML和圖片
Accept-Charset:客戶機采用的編碼方式
Accept-Language:客戶機語言環境,用來提示服務器進行正確的國際化,如"zh-cn"表示中文中國地區
Accept-Encoding:客戶端支持的壓縮格式,服務器端可根據該信息,將響應內容壓縮至該格式進行傳輸
Host:請求哪個主機的資源
If-Modified-Since:如果服務器端相應資源的最后修改日期比這個日期新,就發送新的相應,否則就讀取客戶機瀏覽器緩存
Referer:表明當前的請求是從哪個頁面發送出來的,用來支持服務器端做防盜鏈工作。
User-Agent:客戶機的軟件環境,如瀏覽器品牌及版本,操作系統品牌及版本等
Cookie:Cookie信息
Connection:用來告訴服務器端,當響應完成以后連接是關閉還是保持。常用的值兩個:close/Keep-Alive
Date:客戶機的時間
5.響應的格式
【一行狀態行】換行
【若干個響應頭】換行
換行
【實體內容】
舉例:
HTTP/1.1 200 OK
Access-Control-Allow-Credentials:true
Access-Control-Allow-Methods:GET,POST
Access-Control-Allow-Origin:http://so.csdn.net
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/plain;charset=UTF-8
Date:Thu, 20 Oct 2016 02:15:38 GMT
Expires:Thu, 01-Jan-1970 00:00:00 GMT
Keep-Alive:timeout=20
Server:openresty
Set-Cookie:dc_session_id=1476929736226;Path=/;Domain=csdn.net;Expires=Thu, 20-Oct-2016 02:45:38 GMT
Transfer-Encoding:chunked
Vary:Accept-Encoding
//說明
// 第一行是狀態行 格式為【HTTP版本號 狀態碼 原因敘述】
// 狀態碼用於表示服務器對請求的處理結果,它是一個三位的十進制數,響應狀態碼分為5類
// 100~199:表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程。不常見。
// 200~299:表示成功接收請求並已完成整個處理過程,常用200
// 300~399:為完成請求,客戶機需要繼續細化請求。例如:請求的資源已經移動到一個新地址。常用302、304和307
// 302:請求被服務器重定向到新的URL,與響應頭中的Location頭配合使用
// 307和304:服務器要求客戶機去拿緩存
// 400~499:客戶端的請求有錯誤。常用404、403。404表示請求的資源不存在。403表示用戶沒有訪問該資源的權限。
// 500~599:服務器端有錯誤產生,常用500。
6.常用響應頭
Location:客戶發來的請求,服務器端告訴客戶端,你要的東西我沒有,你可以去找某某,這個過程術語叫做請求重定向,而Location就是這個某某。
Server:服務器的類型
Content-Encoding:數據壓縮格式
Content-Length:數據長度
Content-type:數據類型
Last-Modified:資源緩存時間
Refresh:連命令瀏覽器多長時間刷新一次
Content-Disposition:是否以下載的方式打開資源
Transfer-Encoding:數據傳送格式
ETag:緩存內容的頭
Expires:緩存過期時間
Cache-Control:no-cache是否要緩存
Pragma:no-cache是否需要緩存