pythonweb滲透測試工具學習2Web應用互動1HTTP基礎
Web應用互動
- HTTP協議基礎
- HTTP請求
- requests
- 分析HTTP響應
HTTP協議基礎
超文字傳輸協議(HyperText Transfer Protocol,縮寫:HTTP)是一種用於分散式、協作式和超媒體資訊系統的應用層協議。HTTP是全球資訊網的資料通訊的基礎。
設計HTTP最初的目的是為了提供一種釋出和接收HTML頁面的方法。通過HTTP或者HTTPS協議請求的資源由統一資源識別符號(Uniform Resource Identifiers,URI)來標識。
HTTP的發展是由蒂姆·伯納斯-李於1989年在歐洲核子研究組織(CERN)所發起。HTTP的標準制定由全球資訊網協會(World Wide Web Consortium,W3C)和網際網路工程任務組(Internet Engineering Task Force,IETF)進行協調,最終釋出了一系列的RFC,其中最著名的是1999年6月公佈的 RFC 2616,定義了HTTP協議中現今廣泛使用的一個版本——HTTP 1.1。
2014年12月,網際網路工程任務組(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小組將HTTP/2標準提議遞交至IESG進行討論[2],於2015年2月17日被批准。HTTP/2標準於2015年5月以RFC 7540正式發表,取代HTTP 1.1成為HTTP的實現標準。
HTTP是一個客戶端終端(使用者)和伺服器端(網站)請求和應答的標準(TCP)。通過使用網頁瀏覽器、網路爬蟲或者其它的工具,客戶端發起HTTP請求到伺服器上指定埠(預設埠為80)。我們稱這個客戶端為使用者代理程式(user agent)。應答的伺服器上儲存著一些資源,比如HTML檔案和影象。我們稱這個應答伺服器為源伺服器(origin server。在使用者代理和源伺服器中間可能存在多個“中間層”,比如代理伺服器、閘道器或者隧道(tunnel)。
儘管TCP/IP協議是網際網路上最流行的應用,HTTP協議中,並沒有規定必須使用它或它支援的層。事實上,HTTP可以在任何網際網路協議上,或其他網路上實現。HTTP假定其下層協議提供可靠的傳輸。因此,任何能夠提供這種保證的協議都可以被其使用。因此也就是其在TCP/IP協議族使用TCP作為其傳輸層。
通常,由HTTP客戶端發起請求,建立到伺服器指定埠(預設是80埠)的TCP連線。HTTP伺服器則在那個埠監聽客戶端的請求。一旦收到請求,伺服器會向客戶端返回狀態,比如"HTTP/1.1 200 OK",以及返回的內容,如請求的檔案、錯誤訊息、或者其它資訊。
版本
超文字傳輸協議已經演化出了很多版本,它們中的大部分都是向下相容的。在 RFC 2145 中描述了HTTP版本號的用法。客戶端在請求的開始告訴伺服器它採用的協議版本號,而後者則在響應中採用相同或者更早的協議版本。
HTTP/0.9
已過時。只接受GET一種請求方法,沒有在通訊中指定版本號,且不支援請求頭。由於該版本不支援POST方法,因此客戶端無法向伺服器傳遞太多資訊。
HTTP/1.0
這是第一個在通訊中指定版本號的HTTP協議版本,至今仍被廣泛採用,特別是在代理伺服器中。
HTTP/1.1
持久連線被預設採用,並能很好地配合代理伺服器工作。還支援以管道方式在同時傳送多個請求,以便降低線路負載,提高傳輸速度。
HTTP/1.1相較於HTTP/1.0協議的區別主要體現在:
- 快取處理
- 頻寬優化及網路連線的使用
- 錯誤通知的管理
- 訊息在網路中的傳送
- 網際網路地址的維護
- 安全性及完整性
HTTP/2
當前版本,於2015年5月作為網際網路標準正式釋出。
HTTP是無狀態的,伺服器和客戶端只有請求時知道對方,為此很容易發動攻擊。所有的通訊是明文,易受擷取和篡改。

image.png
1994年引入了HTTPS以增強安全性。 HTTPS是基於SSL(Secure Socket Layer)或TLS(Transport Layer Security)的HTTP。
HTTPS在不安全的網路上建立安全通道,免受竊聽者和中間人攻擊。
在HTTP中,方法指示要對所選資源執行的操作,也稱為HTTP動詞。 HTTP / 1.0定義了三種方法:
- HEAD:只返回標題和狀態程式碼而不是內容
- GET:這是用於檢索給定URI的標準方法
- POST:向伺服器提交內容,表單資料,檔案等的方法,
HTTP / 1.1引入了以下方法:
- OPTIONS:這為目標資源提供了通訊選項
- PUT:此請求儲存由給定URI標識的資源
- DELETE:請求伺服器刪除Request-URI所標識的資源。
- TRACE:回顯伺服器收到的請求,主要用於測試或診斷。
- CONNECT:HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。通常用於SSL加密伺服器的連結(經由非加密的HTTP代理伺服器)。
- PATCH:用於將區域性修改應用到資源。
按照慣例,HEAD,GET,OPTIONS和TRACE是安全的,它們僅用於資訊檢索,不應更改伺服器狀態。POST,PUT,DELETE和PATCH等方法則可能更改伺服器狀態。
- 技術支援qq群: 144081101(後期會錄製視訊存在該群群檔案) 591302926 567351477 釘釘免費群:21745728

image.png
HTTP頭的常見內容:
User-agent使用者代理:通知伺服器作業系統,瀏覽器和外掛等資訊。
Accept-encoding:瀏覽器支援的編碼,通常是GZip或Deflate。會壓縮內容以減少每次傳輸的頻寬時間。
Referer:它包含referer URL,一般為來源頁面。
Cookie:如果瀏覽器有該站點的Cookie,則會將其新增到Cookie頭。還有伺服器端標頭,由web伺服器設定。
Cache-Control:快取指令。
Location::用於重定向。301或302響應,伺服器必須傳送。
Set-Cookie:在使用者的瀏覽器中設定cookie。
WWW-Authenticate:請求認證。當瀏覽器看到此標頭時,它將開啟登入名視窗要求使用者名稱和密碼。
比如訪問 ofollow,noindex">https://www.jianshu.com/p/77b013a2a556 的HTTP頭:

image.png
$ telnet www.so.com 80 Trying 125.88.193.243... Connected to so.qss-lb.com. Escape character is '^]'. GET /help/help_1_1.html HTTP/1.0 HTTP/1.1 200 OK Server: openresty Date: Mon, 16 Jul 2018 08:30:24 GMT Content-Type: text/html ...