URL:
url概述:
URL(Uniform / Universal Resource Locator 的縮寫):統一資源定位符,是用於完整地描述 Internet 上網頁和其他資源的地址的一種標識方法。
url的作用:
用來定位互聯網上的【任意】資源的【位置】。
url的組成:
https://www.baidu.com/s?wd=python&rsv_spt=1
https://www.baidu.com/index.html
協議:https/http
netloc(網絡地址):ip:port
ip主要用來定位電腦(網卡)。
port主要用來定位應用。mysql(3306),mongo(27017)----相當於一個門戶。
path:資源在服務器的相對路徑。---路由(router)
url中的特殊符號:
?:get請求的參數在?后面
&:get請求的多個參數用&連接
#:錨點,定位到頁面中任意位置。
url基本格式:
http://localhost:8080/index
http:協議
localhost:域名,也可以是IP地址
port:服務器的端口
path:訪問資源的路徑
基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]
scheme:協議(例如:http, https, ftp)
host:服務器的 IP 地址或者域名
port:服務器的端口(如果是走協議默認端口,缺省端口 80) path:訪問資源的路徑
query-string:參數,發送給 http 服務器的數據
anchor:錨(跳轉到網頁的指定錨點位置)
python中用來解析url的模塊 urllib
from urllib import parse url = 'https://www.baidu.com:8888/index.html?username=222&password=123#abc' result = parse.urlparse(url) print(result) ''' ParseResult( scheme='https', # 協議 netloc='www.baidu.com:8888', # 域名 path='/index.html', # 路徑 params='', # 路徑參數 query='username=222&password=123', # 查詢參數 fragment='abc') # 片段 ''' print(result.scheme) print(result.netloc)
http工作過程:
1.地址解析
2.封裝HTTP請求數據包
3.封裝成TCP包,建立TCP連接(TCP的三次握手)
4.客戶機發送請求
5.服務器響應
6.服務器關閉TCP連接
HTTP常見請求方式:
客戶端HTTP請求:
URL 只是標識資源的位置,而 HTTP 是用來提交和獲取資源。客戶端發送一個 HTTP
請求到服務器的請求消息,包括以下格式:
請求行、請求頭部、空行、請求數據四個部分組成,下圖給出了請求報文的一般格式。
請求行:協議,url,請求方法。
請求頭:主要的作用就是來限定這個請求的詳細信息。
請求數據:post請求的數據是放到這里面的。
重要請求頭(針對於爬蟲而言)
user-agent:客戶端標識 cookie:請求的狀態信息,很重要 Referer:表示產生請求的網頁來源於哪里。 防盜鏈。 accept:允許傳入的文件類型。 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3。 x-requested-with:ajax請求必須要封裝的頭 -------------------------- content-type:post請求的數據類型 content-length:post請求數據的長度
請求方法:
get/post/put(推送)/delete(刪除)/trace(診斷)/options(性能)/connect(連接,預留字段)。 get方法:get獲取--從服務器獲取資源--條件(請求參數)---請求參數是拼接到url里面的?后面--不安全(容易被別人獲取:用戶名和密碼)---大小受限。 post方法:post傳遞--向服務器傳遞數據--請求數據是放在實體里面。----安全---大小不受限
服務器響應:
(1)組成:
狀態行:狀態碼
消息報頭:
空行
響應正文
(2)響應頭
Content-Type: text/html;charset=utf-8:響應的類型
(3)狀態碼(狀態碼)
100~199:表示服務器成功接收部分請求,要求客戶端繼續提交其余請求才能完成整個處理過程。 200~299:表示服務器成功接收請求並已完成整個處理過程。常用200(OK 請求成功)。 300~399:為完成請求,客戶需進一步細化請求。例如:請求的資源已經移動一個新地址、常用302(所請求的頁面已經臨時轉移至新的url)、307和304(使用緩存資源)。 400~499:客戶端的請求有錯誤,常用404(服務器無法找到被請求的頁面)、403(服 務器拒絕訪問,權限不夠---DDos)。 500~599:服務器端出現錯誤,常用500(請求未完成。服務器遇到不可預知的情況)。
當我們在客戶端輸入一個url,客戶端是如何請求加載出整個頁面的?
(1)客戶端解析url,封裝數據包,發送請求給服務器。
(2)服務器從請求中解析出客戶端想要內容,比如index.html,就把該頁面封裝成響應數據包,發送給客戶端。
(3)客戶端檢查該inde.html中是否有靜態資源需要繼續請求,比如js,css,圖片,如果有繼續請求獲取靜態資源。
(4)客戶端按照html的語法結合靜態資源將頁面完美的顯示出來。