淺談HTTP協議
阿新 • • 發佈:2018-05-20
其他 沒有 not ref 小寫 dir 子類 使用 val
1 HTTP概念
把握三個點:
1 HTTP協議(超文本傳輸協議) HTTP是一個基於TCP/IP通信協議來傳遞數據,默認端口80
2 HTTP是無連接(限制每次連接只處理一個請求),無狀態的(對於事務處理沒有記憶能力)
3 HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和建立連接。
2 HTTP協議結構
HTTP是基於客戶端/服務端(C/S)的架構模型,通過一個可靠的鏈接來交換信息,是一個無狀態的請求/響應協議。流程大致 : web Browser -- HTTP Protocol -- HTTP Server -- CGI Program -- Database 客戶端 c:request 請求行 request line 請求方法 url 協議版本 請求頭 header 頭部字段名 : 值 請求主體 例如 GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 Host: www.example.com Accept-Language: en, mi 服務端 s:response 狀態行 HTTP/1.1 200 OK 協議 狀態碼 註釋 消息報頭 Date Content-Type content-Lnegth 響應正文 content 例如: HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain
3 HTTP協議請求方式
PUT 創建資源
從客戶端向服務器傳送的數據取代指定的文檔的內容。
POST 更新資源
post請求有消息體,可以攜帶大量數據,數據放在消息體中
GET 獲取資源
get請求無消息體,只能攜帶少量數據,數據放在url中
HEAD 獲取報頭資源
OPTIONS 允許客戶端查看服務器的性能。
DELETE 刪除指定頁面資源
TRACE 回顯服務器收到的請求,主要用於測試或診斷
CONNECT HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。
4 HTTP響應頭信息
Allow 服務器支持的方法 content-encoding 文檔編碼方法 content-length 內容長度 content-type 文檔所屬類型 date 當前的時間 location 客戶端去哪提取文檔 reflesh 瀏覽器應在多少時間刷新文檔 server 服務器名字 set-cookie 設置頁面關聯的cookie last-modified 文檔最後的改動時間 Host 域名 Date 時間 User-Agent 瀏覽器版本
5 HTTP狀態碼
5 種類型
1** 信息,服務器收到請求,需要請求者繼續執行操作
2** 成功,操作被成功接收並處理
3** 重定向,需要進一步尋找資源
4** 客戶端錯誤,請求包含語法錯誤或無法完成請求
5** 服務器錯誤,服務器在處理請求的過程中發生了錯誤
常見的http狀態碼
200- 請求成功
301-資源被永久轉移到其他URL
404 請求資源頁面不在
500 內部服務器錯誤
6 HTTP對象HttpRequest
HttpRequest代表來自客戶端的Http請求 原理:request與response是頁面發生請求時,Django內置模塊把data數據包裝成HttpRequest對象,然後Django加載合適的view方法,將HttpRequest對象作為第一個參數傳給view方法,則其返回的結果就是HttpResponse對象. HttpRequest屬性列表: path 請求頁面的全路徑,不包括域名—例如, "/django/student/" method 請求類型,大寫表示, GET,POST 等 GET 包含所有HTTP GET參數的Queryset對象,獲取通過找到key獲取value POST 包含所有HTTP POST參數的Queryset對象,獲取通過找到key獲取value COOKIES 包含所有cookies的Python字典對象,鍵值對Keys和values都是字符串 META 包含所有可用HTTP頭部信息的字典(端口,主機名,主機頭信息等) FILES 包含所有上傳文件的Queryset對象,對應 <input type="file" name="" />標簽中name屬性的值 註意:只有在請求方法是POST,並且在<form>有enctype="multipart/form-data"屬性時FILES才擁有 數據。否則,FILES 為空 user 是一個django.contrib.auth.models.User 對象,代表當前登錄的用戶,需要引入使用 from django.contrib.auth import User 實例化 user = User() session 唯一可讀寫的屬性,代表當前會話的字典對象。只有激活Django中的session支持時該屬性才可用 當服務器session存儲數據時,可以在request中調用 request.session[‘key‘]
7 HTTP對象HttpResponse
HttpResponse代表來自服務端的Http響應
HttpResquest是由Django自動創建,但是HttpResponse則必須由我們自己創建,每個view方法必須返回一個HttpResponse對象 from django.http.response import HttpResponse
HttpResponse常見的方法
HttpResponse.has_header(header) 判斷響應頭是否有給定的名稱,返回True or False,不區分大小寫
HttpResponse.set_cookie() 通知客戶端設置cookie信息,一般存儲sessionid+value用於session取值
HttpResponse.delete_cookie 清除cookie信息
HttpResponse.write(content) 寫入content至報文中
HttpResponse.flush() 將緩存區的內容寫入報文
HttpResponse.tell() 移動文件中的操作指針
HttpResponse 子類
class HttpResponseRedirect 資源重定向
class HttpResponseNotFound 資源未找到 404
class HttpResponseBadRequest 錯誤請求 400
class HttpResponseForbidden 無權限訪問 403
class HttpResponseServerError 服務器錯誤 500
淺談HTTP協議