HTTP協(xié)議學習筆記

熟悉HTTP/HTTPS 等網(wǎng)絡基本知識

一 什么是協(xié)議

1.什么是協(xié)議侦镇?通信雙方預先定義好的通信規(guī)范或規(guī)則

2.HTTP協(xié)議(超文本傳輸協(xié)議)的歷史版本

HTTP / 0.9:
GET index.html

HTTP / 1.0
增加 POST
POST /index.html HTTP/1.0
If-Modified-Since 緩存相關
Authorization 身份認證
Connection 默認值close

HTTP/1.1
GET /index.html HTTP/1.1
Host 指定請求域名
Range 指定請求范圍
Connection : 默認值 是 keep-alive
請求結束后磷支,保持一段時間谜嫉。默認keep-alive以便網(wǎng)頁中嵌入的樣式等繼續(xù)使用連接沦泌。
Transfer-Encoding: chunked 分塊傳輸

二 HTTP 通信交互流程

1.URL 規(guī)范
http://
username:passwd 一般不要
@www.un.org
/subdir/file.html
?var=value&var2=value2
#hash

2.HTTP工作流程 簡要
1.輸入域名,回車
2.解析域名屁药,獲取IP, 通過DNS
3.建立TCP連接
4.向服務器發(fā)送GET請求
5.返回內容
根據(jù)conection配置看是否斷開連接于颖。

一般是
客戶端 —— 代理服務器 —— 應用服務器

三 常見的HTTP header 的含義及作用

1.fiddler 小工具 是一個http協(xié)議調試代理工具
瀏覽器抓包和調試工具

2.HTTP請求
①請求行
GET /dir/1.html HTTP/1.1

②請求頭
通用header
請求header
實體header

③請求體

3.HTTP/1.1 規(guī)范中的8個請求方法
GET URL 規(guī)范最長是255個字符,實際支持1024字符

POST 提交大塊數(shù)據(jù) 成功返回200

HEAD 檢測服務器
PUT 類似post請求消请,目的是向服務器發(fā)送允許保存的數(shù)據(jù) 成功返回201 只能通過程序或工具發(fā)送

DELETE 刪除服務器資源

TRACE 用于診斷網(wǎng)絡

OPTIONS 查詢指定資源有哪些請求方法可以使用
CONNECT 用于代理服務器和應用服務器之間
用于建立一個僅用于數(shù)據(jù)傳輸?shù)乃淼?/p>

4.請求頭
Accept:
text/html栏笆,application/xhtml+xml,application/xml; q=0.9; /;q=0.8

瀏覽器接受的內容類型
參數(shù)為 Content Type
q 指定優(yōu)先級[0-1] 0為不接受臊泰, 默認為1
如果不指定 / , 則其他類型優(yōu)先級為0蛉加;

Accept-Charset: 瀏覽器接受的字符集
utf-8;q=0.66,*;0.6

Accept-Encoding:
gzip,deflate,sdch 瀏覽器接受的壓縮格式

Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
瀏覽器接受的語言

Authorization:發(fā)送身份驗證信息的
Basic
QW….Q== 用戶名和密碼的basic64編碼
如果響應指定的話
401 Unauthorized
瀏覽器就可以繼續(xù)發(fā)送請求

Cookie :
version=1;skin=new

Cache-Control: 控制緩存策略
public,max-age=86400

Host:
www.xxx.com:8080
If-Match:
“aetaghash”
類似隨機字符串缸逃,hash 僅在指定的值匹配
服務器已有內容的hash碼针饥,瀏覽器提交md5值,服務器檢查該值需频,則進行操作丁眼。
如果匹配,則執(zhí)行

If-Modified-Since:
Sun , 11 may
指定時間后昭殉,內容又被修改了苞七,則請求git, 否則返回304

If-None-Match
“aetaghash”
如果不匹配挪丢,則執(zhí)行

If-Range
“aetaghash”
Sun , 11 may
如果沒有變化蹂风,則返回指定的
檢查分段內容有沒有變化,斷點續(xù)傳乾蓬。如果沒有變化硫眨,就發(fā)送請求的,如果變了就給全部內容

If-Unmoidified-Since:
沒有變化巢块,則給到

Range: 可以發(fā)送片段請求
bytes=0-499,1000-

Referer :
http:// xxx.com
點擊頁面的url,來源

Upgrade:
HTTP/2.0
客戶端向服務器請求切換協(xié)議

2.0 規(guī)范已經出了,但是應用不廣泛

Via:
192.168.11.22巧号,ex.com
發(fā)送trace 請求時族奢,追蹤

X-Requested-With: XML
Ajax 請求時會用到,判斷AJAX請求

X-Forwarded-For:
client1,proxy1,192.168.2.125
經常用于代理服務器轉發(fā)客戶端ip地址

四 常見HTTP相應狀態(tài)碼的含義

響應行
HTTP/1.1 200 OK

響應頭
通用header丹鸿, 響應header越走,實體header
響應體
html代碼等

響應狀態(tài)碼:
100-199 :參考信息
200-299:成功 成功獲取或成功創(chuàng)建
300-399: 重定向
400-499:客戶端錯誤
500-599:服務器錯誤

常見碼
200 ok
201 已創(chuàng)建 通常put請求
206 片段內容 請求range
301 已永久移動到其他位置,通常配合Location使用
SEO適用,無結尾/請求目錄時也會自動產生此響應廊敌,盡量戴上斜線
302 Found 找到了
按HTTP規(guī)范铜跑,
304 Not Modified
未修改,無變動(用緩存中的吧)

400 Bad Request 請求錯誤
401 Unauthorized 未被授權
瀏覽器收到此響應會彈出一個輸入用戶名骡澈、密碼的對話框
403 禁止訪問 驗證失敗或重試次數(shù)過多也會導致此響應
404 Not Found
405 Method Not Allowed
訪問方法不對
服務器禁止以所請求的方法訪問锅纺,同時一般會通過Allow 告知允許的方法:
Allow: GET ,POST,HEAD

406 Not Acceptable
無法接受
當請求中的Accept系列header 中列出的條件無法滿足時,會產生此響應

408 Request timeout
請求超時
服務器一直沒遇到 connection:close 會產生此響應并關閉連接
416 Request range not satisfiable
Range請求片段無法滿足
418 i m a teapot
用茶壺煮咖啡的時候

愚人節(jié)的玩笑

500 服務器錯誤
502 bad gateway
網(wǎng)管錯誤肋殴。代理服務器從上游服務器收到一個無效響應時囤锉,會給客戶端返回此響應

503 service unavailable 服務暫不可用

如上游服務器超載或暫時停機維護等,代理服務器則返回此響應护锤」俚兀可附帶retry-after頭
通常網(wǎng)站訪問壓力大時

504 gateway timeout
網(wǎng)關超時 代理服務器無法在限定時間內從上游服務器收到一個有效響應
通常網(wǎng)站訪問壓力大時

響應header
ETag:”ab….sertag“
跟客戶端配合,檢查客戶端緩存是否超時
Location: 指定新的位置
Refresh: 指定重新刷新的時間和地址
Set-Cookie:服務器讓客戶端設置cookie
Vary 客戶端瀏覽器保存緩存時烙懦,根據(jù)這些header 存儲緩存驱入。

五 Cookie、Session 的原理

cookie 是什么?
cookie使用來跟蹤用戶會話的技術.cookie本身是一小段文本信息,它存在與http協(xié)議header頭域里,通過http協(xié)議來傳遞.
cookie 用來干什么?
http協(xié)議是一種無狀態(tài)協(xié)議,客戶端和服務端完成一次會話后,服務器端不知道下次連接到服務端的是不是同一個客戶端,需要有個標識能告訴服務端,是哪個客戶端連接上了服務端.例如登錄用戶,需要有個東西標識,那就在客戶端保存一個cookie,下次訪問的時候隨http header一起發(fā)到服務端,服務端根據(jù)cookie的內容知道了這是某個用戶的請求,服務端根據(jù)cookie取到該用戶的信息,返回給客戶端

session是什么
Session是另一種記錄客戶狀態(tài)的機制氯析,不同的是Cookie保存在客戶端瀏覽器中亏较,而Session保存在服務器上∑茄唬客戶端瀏覽器訪問服務器的時候宴杀,服務器把客戶端信息以某種形式記錄在服務器上。這就是Session拾因。
session能干什么
cookie能做的他能做,cookie不能做的他也能做!
session是怎么工作的
用戶請求login.php填寫數(shù)據(jù)后提交
服務器收到提交的數(shù)據(jù)取得用戶信息,將用戶信息存入session,并將session_id通過cookie的形式發(fā)給客戶端
客戶端將session_id存入瀏覽器cookie文件
用戶再次訪問其他頁面時,將有session_id的cookie通過header頭發(fā)給服務端
服務端拿到session_id從session中取到用戶信息并返回

問題1:session的有效期旺罢?
由php.ini 中的session配置決定(session.cookie_lifetime=0 session.gc_maxlifetime ==600 )
問題2:關閉客戶端可以刪除session或者使session失效嗎?
不能刪除session,但是有可能使session失效绢记。使其失效的原因是如果配置的session有效期是cookie隨瀏覽器失效扁达。
問題3:
如果瀏覽器不支持cookie,session能正常使用嗎蠢熄?
可以跪解,將session通過url傳遞

問題4:
如果服務器有多臺服務器,session如何共享签孔?
nfs 將多臺服務器所在的session存儲目錄設為mount掛載的目錄
memcache session.save_handle=memcache并設置路徑session_path = ‘tcp://192.168.1.101:11211’

mysql session.save_handler=user 叉讥,然后建立session表,建立php文件用于對數(shù)據(jù)庫表操作session數(shù)據(jù)饥追,最后用session的都引入上一步中的php文件

六 HTTP緩存策略

性能優(yōu)化

緩存 Cache-control图仓、 If-Modified-Since、ETag

Cache-Control: max-age=600, no-cache="Set-Cookie"

no-cache="xxx":緩存但绕,但在發(fā)回客戶端前先作檢查救崔,傳值則表示不緩存指定的header
no-store:不緩存任何內容惶看,在IE中=no-cache。
max-age=120: 緩存最大有效期六孵,秒(Age response header)
max-stale=600:在緩存過期后還可以繼續(xù)保存600秒纬黎,不賦值則表示可一直有效
no-transform:禁止緩存代理修改內容
only-if-cached: 禁止緩存代理訪問應用服務器,僅在有緩存時返回內容劫窒。
public: 任何客戶端(代理服務器或瀏覽器)均可緩存
private: 僅限私有客戶端(一般是瀏覽器)可緩存內容
must-revalidate: 必須重新驗證緩存有效性(默認行為)本今,此指令目的在于顯式指明
proxy-revalidate:代理服務器需要重新驗證緩存有效性,瀏覽器不需要
s-maxage:指定public客戶端上的maxage烛亦,private 上忽略诈泼。

第一次請求,服務器響應:
Last-Modified: 時間A

第二次請求煤禽,附加 header铐达,檢查是否從上次修改時間點后又有過新的修改:
If-Modified-Since: 時間A

ETag:
If-None-Match:

Vary: Accept-Encoding
告知緩存代理服務器,客戶端請求中發(fā)送了不同的 Accept-Encoding 就要緩存不同的版本
Vary: User-Agent 合理嗎? back

連接

Connection: keep-alive
Keep-Alive: 10

壓縮

Accept-Encoding檬果、Content-Encoding
ob_start("ob_gzhandler");

片段請求

Range: bytes=0-1023

分塊傳輸

Transfer-Encoding: chunked

七 HTTP安全瓮孙、常見攻擊方式及防范策略

XSS 跨站腳本共計

被攻擊的網(wǎng)站上注入了可執(zhí)行的js,通過js盜取cookie选脊,發(fā)送到第三方網(wǎng)站

CRSF 跨站請求偽造

在用戶不知情的情況下杭抠,通過第三方網(wǎng)站插入圖片或JS提交POST請求的方式執(zhí)行有害操作
POST 請求帶hash值來防止

Sniffer 嗅探

各種監(jiān)聽、假冒

HTTP和HTTPS

HTTP原先 直接建立在tcp協(xié)議上
HTTPS 建立在ssl協(xié)議上,當然ssl協(xié)議也是建立在tcp協(xié)議上
SSL協(xié)議的工作流程
客戶端向服務器請求獲取證書+公鑰
客戶端通過CA驗證收到證書的合法性
客戶端通過收到的公鑰加密一個字符串恳啥,作為后續(xù)通信密鑰偏灿,發(fā)送給服務器
服務器通過私鑰解密,得到通信密鑰
后續(xù)HTTP協(xié)議通過通信密鑰加密進行

八 PHP中HTTP相關應用實戰(zhàn)

使用 fsockopen 函數(shù)來模擬實現(xiàn)HTTP協(xié)議
或curl擴展

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末钝的,一起剝皮案震驚了整個濱河市翁垂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硝桩,老刑警劉巖沿猜,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碗脊,居然都是意外死亡啼肩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門衙伶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祈坠,“玉大人,你說我怎么就攤上這事矢劲“渑埃” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵卧须,是天一觀的道長。 經常有香客問我,道長花嘶,這世上最難降的妖魔是什么笋籽? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮椭员,結果婚禮上车海,老公的妹妹穿的比我還像新娘。我一直安慰自己隘击,他們只是感情好侍芝,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著埋同,像睡著了一般州叠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凶赁,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天咧栗,我揣著相機與錄音,去河邊找鬼虱肄。 笑死致板,一個胖子當著我的面吹牛,可吹牛的內容都是我干的咏窿。 我是一名探鬼主播斟或,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼集嵌!你這毒婦竟也來了萝挤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤纸淮,失蹤者是張志新(化名)和其女友劉穎平斩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咽块,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡绘面,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侈沪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揭璃。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖亭罪,靈堂內的尸體忽然破棺而出瘦馍,到底是詐尸還是另有隱情,我是刑警寧澤应役,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布情组,位于F島的核電站燥筷,受9級特大地震影響,放射性物質發(fā)生泄漏院崇。R本人自食惡果不足惜肆氓,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望底瓣。 院中可真熱鬧谢揪,春花似錦、人聲如沸捐凭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茁肠。三九已至患民,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間官套,已是汗流浹背酒奶。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奶赔,地道東北人惋嚎。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像站刑,于是被迫代替她去往敵國和親另伍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容