python/http協議


python/http協議

http協議 :

http就是一個通信規矩,通信規矩規定了客戶端發送給服務器的內容格式,也規定了服務器發送給客戶端的內容格式。其實我們要學習的就是這個倆個格式!客戶端發送給服務器的格式加‘請求協議‘;服務端發送給客戶端的格式叫‘響應協議’

http特點:

http的特點:

全稱是超文本傳輸協議,基於請求/響應模式

http是無狀態協議。

無狀態就是,你多次訪問,第一次訪問和第二次訪問沒有任何關系

url:統一資源定位符,就是一個網址:協議名://域名:端口/路徑。例如:http://www.baidu.com:80/index.html

url,訪問時輸入的是url,服務端會把url解析成IP地址

請求協議格式:

1 請求首行;  // 請求方式 請求路徑 協議和版本,例如:GET /index.html HTTP/1.1
2 請求頭信息;// 請求頭名稱:請求頭內容,即為key:value格式,例如:Host:localhost
3 空行;     // 用來與請求體分隔開
4 請求體。   // GET沒有請求體,只有POST有請求體。

客戶端(瀏覽器)向服務端(server)發送協議(server查看)

 1 1、請求首行   (GET請求方式,直接把數據暴露在url后面) GET/數據內容,http協議版本
 2      GET /favicon.ico HTTP/1.1     
 3 2、請求頭信息
 4      Host: 127.0.0.1:8800            #訪問的IP和端口
 5      Connection: keep-alive
 6      User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) 
 7      Accept: image/webp,image/*,*/*;q=0.8
 8      Referer: http://127.0.0.1:8800/             #查看訪問鏈接和路徑(查看客戶量是通過自己鏈接還是別的地轉過來的)           
 9      Accept-Encoding: gzip, deflate, sdch, br
10      Accept-Language: zh-CN,zh;q=0.8                     #支持的語言
11      因為http協議是無狀態的,又想結果信息保存的功能,就可以通過       
12      Cookie容器訪問,Cookie是一個字典,內容是服務端返回給我們的
13      Cookie就是一個容器,也是一個字典
14 3、空行(為了讓請求解釋信息和請求數據區分開,加一個空行)
15 
16 4、請求體(數據)-----------(GET請求體不存在)post會把數據放在請求體,get會把數據放在URL地址欄后邊

 post比get安全系數高,get把數據放在url通過?隔開,url的長度有個限制。

post把數據放在請求體內,數據長度沒有限制

GET請求:

HTTP默認的請求方法就是GET

GET沒有請求體

數據必須在1K之內

GET請求數據會暴露在瀏覽器的地址欄中

GET請求常用的操作:

1、在瀏覽器的地址欄中字節給出URL,name就一定是GET請求

2、點擊頁面上超鏈接也一定是GET請求

3、提交表單時,表單默認使用GET請求,但可以設置為POST

1 GET 127.0.0.1:8090/login  HTTP/1.1:GET請求,請求服務器路徑為  127.0.0.1:8090/login ,協議為1.12 Host:localhost:請求的主機名為localhost;
3 *User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0:與瀏覽器和OS相關的信息。有些網站會顯示用戶的系統版本和瀏覽器版本信息,這都是通過獲取User-Agent頭信息而來的;
4  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8:告訴服務器,當前客戶端可以接收的文檔類型,其實這里包含了*/*,就表示什么都可以接收;
5 Accept-Language: zh-cn,zh;q=0.5:當前客戶端支持的語言,可以在瀏覽器的工具選項中找到語言相關信息;
6 Accept-Encoding: gzip, deflate:支持的壓縮格式。數據在網絡上傳遞時,可能服務器會把數據壓縮后再發送;
7 Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7:客戶端支持的編碼;
8 Connection: keep-alive:客戶端支持的鏈接方式,保持一段時間鏈接,默認為3000ms;
9 Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因為不是第一次訪問這個地址,所以會在請求中把上一次服務器響應中發送過來的Cookie在請求中一並發送去過;這個Cookie的名字為JSESSIONID

post請求

1.數據不會出現在地址欄中

2.數據的大小沒有上限

3.有請求體

4.請求體中如果存在中文,會使用URL編碼

使用表單可以發post請求,但3表單默認是GET

post請求是可以有體的,而GET請求不有請求體

Referer:請求頭,可以查看客流量的來源

     http://localhost:8080/hello/index.jsp:請求來自哪個頁面,例如你在百度上點擊鏈接到了這里,那么Referer:http://www.baidu.com;如果你是在瀏覽器的地址欄中直接輸入的地址,那么就沒有Referer這個請求頭了;

               Content-Type:application/x-www-form-urlencoded:表單的數據類型,說明會使用url格式編碼數據;url編碼的數據都是以“%”為前綴,后面跟隨兩位的16進制。

               Content-Length:13:請求體的長度,這里表示13個字節

               keyword=hello:請求體內容!hello是在表單中輸入的數據,keyword是表單字段的名字

響應協議:

響應協議的格式如下:

響應首行

響應頭信息

空行

響應體

響應內容是由服務器發送給瀏覽器的內容,瀏覽器會根據響應內容來顯示。遇到<img src=''>會開一個新的線程加載,所以有時圖片多的話,內容會先顯示出來,然后圖片才一張一張加載出來

HTTP/1.1 200 OK:響應協議為HTTP1.1, 狀態碼為200 表示請求成功 OK是對狀態碼的解釋

Server:WSGIServer/0.2 CPython/3.5.2:服務器的版本信息;

Content-Type:text/html;charset=UTF-8:響應體使用的編碼為UTF-8;

Content-Length:724 :響應體為724字節

Set-Cookie:JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:響應給客戶端的Cookie

Date:Wed,25 Sep 2012 04:15:03 GMT:響應的時間,這可能會有8小時的時區差

狀態碼:

響應頭對瀏覽器來說說很重要 ,他說明了響應的真正含義。例如200表示響應成功了,302表示重定向,這說明瀏覽器需要再發一個新的請求。

200:請求成功,瀏覽器會把響應體內容(通常是html)顯示在瀏覽器中

302:重定向,當響應碼為302時,表示服務器要求瀏覽器重新再發一個請求,服務器會發送一個響應頭Location,它指定新請求的URL地址

404:請求的資源沒有找到,說明客戶端錯誤的請求了不存在的資源(只要是4開頭的錯誤都是客戶端的問題)

500:請求資源找到了,但服務器內部出現了錯誤(只要是5開頭的錯誤都是服務端的問題)

1 當用戶第一次請求index.html時,服務器會添加一個名為Last-Modified響應頭,
這個頭說明了 index.html的最后修改時間,瀏覽器會把index.html內容,以及最后響應時間緩存下來 。
當做用戶第二次請求index.e=html時,在請求中包含一個名為Tf-Modified請求頭,
它的值就是第一次請求服務器通過Last-Modified響應頭發送給瀏覽器的值,即inde.html最后的修改時間,
If-Modified-Since請求頭就是在告訴服務器,我這里瀏覽器緩存的index.html最后修改時間是這個,
您看看心在的index.html最后修改時間是不是這個,如果還是的話,那么您就不用在響應這個index.html內容了,
我會把緩沖的內容直接顯示出來。而服務器會發響應碼304,表示index.html於瀏覽器上次緩存的相同,
無需再次發送,
瀏覽器可以顯示自己的緩沖頁面,如果比對不同,那么說明index.hrml已經做了修改,服務器會響應200

其他響應頭

告訴瀏覽器不要緩存的響應頭:

  • Expires: -1

  • Cache-Control: no-cache

  • Pragma: no-cache

自動刷新響應頭,瀏覽器會在3秒之后請求http://www.baidu.com

  • Refresh: 3;url=http://www.baidu.com HTML中指定響應頭

HTMl頁面中可以使用<meta http-equiv="" content="">來指定響應頭,例如在index.html頁面中給出<meta http-equiv="Refresh" content="3;url=http://www.baidu.com">,表示瀏覽器只會顯示index.html頁面3秒,然后自動跳轉到http://www.baidu.com.

詳細請查看鏈接:http://www.cnblogs.com/yuanchenqi/articles/6000358.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM