學習 HTTP

HTTP 簡介

HTTP 協議是 Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫, 是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。html

HTTP是一個基於 TCP/IP 通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。web


HTTP 工做原理

HTTP協議工做於客戶端-服務端架構上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。
Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。
Web服務器根據接收到的請求後,向客戶端發送響應信息。
HTTP默認端口號爲80,可是你也能夠改成8080或者其餘端口。算法

HTTP協議通訊流程

HTTP 消息結構

客戶端請求消息

請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成
請求報文的通常格式segmentfault

服務端響應消息

HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文 瀏覽器

HTTP 響應的起始行被稱做 狀態行 (status line),包含如下信息:
一、協議版本,一般爲 HTTP/1.1。
二、狀態碼 (status code),代表請求是成功或失敗。常見的狀態碼是 200,404,或 302。
三、狀態文本 (status text)。一個簡短的,純粹的信息,經過狀態碼的文本描述,幫助人們理解該 HTTP 消息。
一個典型的狀態行看起來像這樣:HTTP/1.1 404 Not Found。緩存

響應報文

實例

客戶端請求:安全

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

服務端響應:服務器

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

HTTP 方法

一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的 查,改,增,刪 4個操做.網絡


GET --------- 從指定的資源請求數據
HEAD -------- 與 GET 相同,但只返回 HTTP 報頭,不返回文檔主體
POST -------- 向指定的資源提交要被處理的數據
PUT --------- 未來自客戶端的數據存儲到一個命名的服務器資源中去
DELETE ------ 刪除指定資源
CONNECT ----- 把請求鏈接轉換到透明的 TCP/IP 通道
OPTIONS ----- 返回服務器支持的 HTTP 方法
TRACE ------- 沿着到目標資源的路徑執行一個消息環回測試
PATCH ------- 用於對資源應用部分修改架構

GET 和 POST 的區別

  • (瀏覽器回退/刷新) GET在瀏覽器回退時是無害的,而POST會再次提交請求。
  • (書籤) GET產生的URL地址能夠被 Bookmark,而POST不能夠。
  • (緩存) GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
  • (編碼類型) GET請求只能進行url編碼(application/x-www-form-urlencoded),而POST支持多種編碼方式。
  • (瀏覽器歷史記錄) GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
  • (對數據長度的限制) GET請求在URL中傳送的參數是有長度限制的,而POST麼有。
  • (對數據類型的限制) 對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。
  • (安全性) GET比POST更不安全,由於參數直接暴露在URL上,因此不能用來傳遞敏感信息。
  • (可見性) GET參數經過URL傳遞,POST放在Request body中。

GET和POST本質上就是TCP連接,並沒有差異。可是因爲HTTP的規定和瀏覽器/服務器的限制,致使他們在應用過程當中體現出一些不一樣。
GET和POST還有一個重大區別,簡單的說:
GET產生一個TCP數據包;POST產生兩個TCP數據包。
長的說:
對於GET方式的請求,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據);
而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。

本模塊原文地址: https://mp.weixin.qq.com/s?__...

HTTP 請求頭

HTTP 響應頭

應答頭 說明
Allow 服務器支持哪些請求方法(如GET、POST等)。
Content-Encoding 文檔的編碼方法。
Content-Length 內容長度。
Date 當前的 GMT 時間。
Expires 文檔過時時間
Last-Modified 文檔的最後改動時間。
Location 表示客戶應當到哪裏去提取文檔。
Refresh 表示瀏覽器應該在多少時間以後刷新文檔,以秒計。
Server 服務器名字
Set-Cookie 設置和頁面關聯的 Cookie
WWW-Authenticate 客戶應該在 Authenticate 頭中提供什麼類型的受權信息

本模塊原文地址:http://www.runoob.com/http/ht...

Cache-Contol:

private  ---  客戶端能夠緩存
public  ---  客戶端和代理服務器均可緩存
max-age = XXX ---  緩存的內容將在 XXX 秒後失效
no-cache  ---  須要使用 對比緩存 來驗證緩存數據 
no-store  ---  全部內容都不會緩存
must-revalidate  ---  必須先驗證它的狀態

對比緩存 的兩種標識

一、Etag / If-None-Match
二、Last-Modified / If-Modified-Since

強制緩存

  • Expires
  • Cache-Control

from disk cache
from memory cache

對於強制緩存,服務器通知瀏覽器一個緩存時間,在緩存時間內,下次請求,直接用緩存,不在時間內,執行比較緩存策略。
對於比較緩存,將緩存信息中的Etag和Last-Modified經過請求發送給服務器,由服務器校驗,返回304狀態碼時,瀏覽器直接使用緩存。

瀏覽器第一次請求:
瀏覽器緩存_第一次請求

瀏覽器再次請求:
瀏覽器緩存_第二次請求

HTTPS

HTTPS(Hypertext Transfer Protocol Secure:超文本傳輸安全協議)是一種透過計算機網絡進行安全通訊的傳輸協議。HTTPS 經由 HTTP 進行通訊,但利用 SSL/TLS 來加密數據包。HTTPS 開發的主要目的,是提供對網站服務器的身份認證,保護交換數據的隱私與完整性。

HTTPS 默認工做在 TCP 協議 443 端口,它的工做流程通常如如下方式:
一、TCP 三次同步握手
二、客戶端驗證服務器數字證書
三、DH 算法協商對稱加密算法的密鑰、hash 算法的密鑰
四、SSL 安全加密隧道協商完成
五、網頁以加密的方式傳輸,用協商的對稱加密算法和密鑰加密,保證數據機密性;用協商的hash算法進行數據完整性保護,保證數據不被篡改。

HTTP 與 HTTPS 的區別

  • (數據是否加密) HTTP 明文傳輸,數據都是未加密的,安全性較差,HTTPS(SSL+HTTP) 數據傳輸過程是加密的,安全性較好。
  • (證書) 使用 HTTPS 協議須要到 CA(Certificate Authority,數字證書認證機構) 申請證書,通常免費證書較少,於是須要必定費用。證書頒發機構如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
  • (響應速度) HTTP 頁面響應速度比 HTTPS 快,主要是由於 HTTP 使用 TCP 三次握手創建鏈接,客戶端和服務器須要交換 3 個包,而 HTTPS除了 TCP 的三個包,還要加上 ssl 握手須要的 9 個包,因此一共是 12 個包。
  • (鏈接方式&端口) HTTP 和 HTTPS 使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是 80,後者是 443。

HTTPS 其實就是建構在 SSL/TLS 之上的 HTTP 協議,因此,要比較 HTTPS 比 HTTP 要更耗費服務器資源。

HTTPS 的缺陷

  • 通訊的速度變慢,因爲須要加密,一個握手就多了好幾個往返
  • 對用戶的機器負載的增長

本模塊原文地址: http://www.runoob.com/w3cnote...
其餘資料地址:https://www.jb51.net/yunying/...

其餘

URI、URL、URN

URI = Universal Resource Identifier 統一資源標誌符
URL = Universal Resource Locator 統一資源定位符
URN = Universal Resource Name 統一資源名稱

「A Uniform Resource Identifier (URI) 是一個緊湊的字符串用來標示抽象或物理資源。」

「A URI 能夠進一步被分爲定位符、名字或二者都是. 術語「Uniform Resource Locator」 (URL) 是 URI 的子集, 除了肯定一個資源,還提供一種定位該資源的主要訪問機制(如其網絡「位置」)。」

「URI 能夠分爲 URL, URN 或同時具有 locators 和 names 特性的一個東西。URN 做用就好像一我的的名字,URL 就像一我的的地址。換句話說:URN肯定了東西的身份,URL提供了找到它的方式。」 ———— 維基百科

URI、URN、URL關係圖

URI 例子:

- ftp://ftp.is.co.za/rfc/rfc1808.txt
- http://www.ietf.org/rfc/rfc2396.txt
- ldap://[2001:db8::7]/c=GB?objectClass?one
- mailto:John.Doe@example.com
- news:comp.infosystems.www.servers.unix
- tel:+1-816-555-1212
- telnet://192.0.2.16:80/
- urn:oasis:names:specification:docbook:dtd:xml:4.1.2

本模塊原文地址:https://www.cnblogs.com/wuyun...

URL

URL - Universal Resource Locator 統一資源定位符

Web 瀏覽器經過 URL 從 Web 服務器請求頁面。
當您點擊 HTML 頁面中的某個連接時,對應的 <a> 標籤指向萬維網上的一個地址。

一個 URL 用於定位萬維網上的文檔。

一個網頁地址實例: http://www.runoob.com/html/html-tutorial.html

語法規則:

scheme://host.domain:port/path/filename

說明:

  • scheme - 定義因特網服務的類型。最多見的類型是 http
  • host - 定義域主機(http 的默認主機是 www)
  • domain - 定義因特網域名,好比 runoob.com
  • :port - 定義主機上的端口號(http 的默認端口號是 80)
  • path - 定義服務器上的路徑(若是省略,則文檔必須位於網站的根目錄中)。
  • filename - 定義文檔/資源的名稱

常見的 URL Scheme:

Scheme 訪問 用於...
http 超文本傳輸協議 http:// 開頭的普通網頁。不加密。
https 安全超文本傳輸協議 安全網頁,加密全部信息交換。
ftp 文件傳輸協議 用於將文件下載或上傳至網站。
file 您計算機上的文件。

URL 字符編碼

URL 只能使用 ASCII 字符集. ASCII 集合以外的字符,URL 必須轉換爲有效的 ASCII 格式。

URL 編碼使用 "%" 其後跟隨兩位的十六進制數來替換非 ASCII 字符。

URL 不能包含空格。URL 編碼一般使用 + 來替換空格。

本模塊原文地址: http://www.runoob.com/html/ht...

相關文章
相關標籤/搜索