目錄
前言
我又來了,更新速度有點快,莫得辦法,賊無聊~~~
想不出騷話了,略過~~~~
正文
http的工作流程(快速理解)
什麼是客戶端?
客戶端可以理解成用戶 指瀏覽器
什麼是服務端?
服務端可以理解成商店 指服務器
一個http工作流程
可以看成 “用戶到商店需要買蘋果。然後服務員去拿蘋果給用戶 “ 簡簡單單一句話
用戶到商店買蘋果 這是一個請求
服務員把蘋果給用戶 這是一個迴響
理解的話就已經完全理解了
這就是一個http工作流程,分請求包與迴響包(一般都叫返回包)
(1)客戶端連接到Web服務器
(2)發送HTTP請求
(3)服務器接受請求並返回HTTP響應
(4)釋放連接TCP連接
(5)客戶端瀏覽器解析HTML內容
關於url的構成
http://www.test.com/aboutus.php?id=117 (這個url是我找的,然後我改成www.test.com)
http:// 首先是http協議(protocol)
www.test.com 然後就是主機(host)
aboutus.php 然後再路徑(path)
?id=117 然後就是參數
路徑就是host後面的部分
HTTP請求包與返回包
HTTP/1.1 定義的請求方法有8種:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE
GET: 是最常用的方法,通常用於請求服務器發送某個資源
PUT: 用於向服務端寫入文檔
POST: 是常用的方法之一,用於向服務端提交數據,有主體
HEAD: 與GET類似,但在響應中只有首部,不返回具體數據,可以用來查看資源是否存在
TRACE: 用於跟蹤某個請求
DELETE: 用於刪除服務端某個資源
OPTIONS: 用於查詢服務端支持的方法
請求包:
請求行: POST /users/login/ HTTP/1.1
請求頭: Host: xxxxxxxx.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 250
Origin: http://XXXXXX.net
Connection: close
Referer: http://XXXXXXX.net/users/login/?next=/courses/
Cookie: csrftoken=7nHRuim6Ost14JzABrAy38lb7ZW2PmU5d1LIX99pafrq1MVsTo2APP55duHAj0K8
Upgrade-Insecure-Requests: 1
空行
請求體: csrfmiddlewaretoken=SIQUCuyvhyOpOdwDVVYTyBP0EMtLsf6sYmUL5llODlMOLgSvdSqVkizUKhejWTWv&opt_type=account&redirect_url=%2Fcourses%2F&account=aaaaaa&password=aaaaaa&mobile=&captcha_0=9215a8da15a3412e58477a0a0f1dd748d9211041&captcha_1=aaaaaaaa&mobile_code=
請求包分三個部分,請求行,請求頭,請求體
請求行: POST /users/login/ HTTP/1.1
傳參方式post,然後路徑/users/login/,協議是http 1.1
然後請求頭,我下面貼出了常見head解釋
關於head可以進行head頭注入
然後再請求體,有些表單,或者登陸框登陸的時候用戶名和密碼都會在這裏
爆破的時候也是在這爆破
返回包:
HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Fri, 07 Feb 2020 16:00:11 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
Vary: Cookie
Set-Cookie: csrftoken=7nHRuim6Ost14JzABrAy38lb7ZW2PmU5d1LIX99pafrq1MVsTo2APP55duHAj0K8; expires=Fri, 05-Feb-2021 16:00:11 GMT; Max-Age=31449600; Path=/
Content-Length: 600
<head>
<meta charset="UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
<title>ç»å½ | 红æ¥å®å¨</title>
<link rel="stylesheet" type="text/css" href="/static/css/reset.css">
<link rel="stylesheet" type="text/css" href="/static/css/commons.css">
<link rel="stylesheet" type="text/css" href="/static/js/plugins/toastr-2.1.1/toastr.min.css" />
<style type="text/css">
div.hd-login {
background-image: url('/sssssssso/logo_200_100.jpg');
}
</style>
</head>
返回包先是協議,然後狀態碼,是否正常
然後一些head等等
下面的html就是跳轉返回的頁面,只不過太多了,我就刪掉了好多,這樣看着好看,比較明顯
狀態碼分爲五大類:
信息性狀態碼:100~199
成功狀態碼:200~299
重定向狀態碼:300~399
客戶端錯誤狀態碼:400~499
服務端錯誤狀態碼:500~599
常見的header:
Content-Type |
請求體/響應體的類型,如:text/plain、application/json |
||
Accept |
說明接收的類型,可以多個值,用,(半角逗號)分開 |
||
Content-Length |
請求體/響應體的長度,單位字節 |
||
Content-Encoding |
|
||
Accept-Encoding |
|
||
ETag |
給當前資源的標識,和Last-Modified、If-None-Match、If-Modified-Since配合,用於緩存控制 |
||
Cache-Control |
取值爲一般爲no-cache或max-age=XX,XX爲個整數,表示該資源緩存有效期(秒) |
||
Authorization |
|
||
User-Agent |
|
||
If-Modified-Since |
|
||
If-None-Match |
值爲上一次服務器返回的 ETag 值,一般會和If-Modified-Since一起出現 |
||
Cookie |
已有的Cookie |
||
Referer |
表示請求引用自哪個地址,比如你從頁面A跳轉到頁面B時,值爲頁面A的地址 |
||
Host |
|
||
Date |
服務器的日期 |
||
Last-Modified |
該資源最後被修改時間 |
||
Transfer-Encoding |
取值爲一般爲chunked,出現在Content-Length不能確定的情況下,表示服務器不知道響應版體的數據大小,一般同時還會出現Content-Encoding響應頭 |
||
Set-Cookie |
設置Cookie |
||
Location |
重定向到另一個URL,如輸入瀏覽器就輸入baidu.com回車,會自動跳到 https://www.baidu.com ,就是通過這個響應頭控制的 |
||
Server |
服務器應用程序軟件的名稱和版本 |
接下來就差不多了,就可以理解啦
文末:
歡迎加我微信,一起討論問題。技術有限,根據網上,以及自己理解寫的
如果有什麼不對的話可以評論指出來