ello,everyone!
我們的自然拼讀小課堂今天開課啦!按照我之前列出來的課程計劃,今天是我們的第一課,我們一起來學習字母A、B、C三個字母在單詞中的發音。請跟著我的語音講解,一起來看今天的圖文內容。
Step 1 視頻熱身
首先熱身一下,我們看一看這個Oxford Phonics World小視頻https://v.qq.com/x/page/l0349ghhzp6.html,用幾分鐘來熟悉一下這三個字母在單詞中都是如何發音的呢?
第二步,學習每個字母的基本發音和常見代表詞
讓我們挨個認識一下這三個字母和它們的常見發音、代表單詞吧。
A makes a,a,a,apple. This is an apple, an angry apple.(這里的a,要張大嘴巴,發成apple單詞的第一個音哦)
除了apple,還有哪些單詞是以大口a開頭的呢?
從左到右,依次是ant,apple,alligator,ax,爸爸媽媽們可以讓小朋友變看圖,邊用手指指著具體的圖片說出這個單詞的發音,試著拉長第一個a的音,讓小朋友們關注到這個特點,它們都是a開頭的單詞。
接下啦,該認識Bb了。
B makes b, b, b, bear. This is a bear, a big bear.(這里的b,要發成bear單詞的第一個音哦)
b家族有哪些小伙伴呢?
從左到右,分別是bed,bear,banana,bird
最后,讓我們一起和C打個招呼吧。
C makes c,c,c,cat. This is a cool cat. (這里的c,要發成輕聲k的音,就像在單詞cat里面的第一個音一樣)
爸爸媽媽們還可以舉出很多c開頭和cat同押頭韻的單詞,比如下面這張圖:
從左到右分別是cat,cup,computer,car
Step 3 你指我讀,我讀你指
如果家里有類似的物品,家長們就可以直接拿出實物指給小朋友們看,讓小朋友主動說出這些物品的發音,這樣對應更直觀,記憶更深刻。
或者家長可以找出一堆ABC開頭的物品,然后念出其中一個物品的發音,讓小朋友根據發音,把這樣物品找出來。
Step 4 字母書寫和認讀
學習完每個字母,視頻中還要求小朋友們學習用筆書寫這些字母的大小寫,如果小朋友還沒有辦法握筆或者寫字,可以先要求他們認識這些字母的大小寫即可,如果小朋友已經會寫字了,就不妨在家中的白紙、黑板或者白板上,試著寫一寫這些字母的大小寫吧。
Step 5 練習鞏固
多多練習和重復,小朋友們才能更深刻的理解這三個字母和單詞發音之間的神秘規律。
接下來給大家提供三頁關于A、B、C 的練習小活動:
我們從E練習開始:每個E練習都是讓小朋友們一邊指著圖片,一邊讀出這個單詞,讀的時候因為很有節奏,所以叫chant
D練習,主要鍛煉小朋友們的聽讀和認讀能力,比如A的這頁練習D,爸爸媽媽可以自己念一個字母的letter sound,注意不是letter name,讓小朋友判斷是不是A,如果是就寫上A,如果不是,就畫個叉子。
B這頁的D練習,讓小朋友連線,把所有B開頭的單詞都用線條連在一起,右上角寫上Bb的大小寫。
C這頁的D練習,也是同樣的連線活動,爸爸媽媽不要越俎代庖,可以試著幫小朋友們把每個單詞的發音讀出來,讓他們自己判斷這個單詞是不是c開頭的單詞。
A題,要圈出方框里面首音相同的詞。
B題,爸爸媽媽可以分別讀出b,c,a三個letter sound,讓小朋友根據發音,圈出來它們對應的大小寫字母。建立聲音和拼寫的聯系。
C題,鍛煉眼力的時候到了,每個背面都露出來了一些小細節,讓小朋友們猜一猜分別是哪些單詞藏在后面呢,試著寫出來它們的首字母吧。
Step 6 最后一個環節Story Time
視頻結尾還有一個很有趣的小故事,幫助我們一起練習這三個字母的代表性單詞和sight word哦。
爸爸媽媽打開視頻的第6分30秒左右(騰訊視頻鏈接https://v.qq.com/x/page/l0349ghhzp6.html),會看到一個短短的四格故事,讓小朋友listen聽,look看圖,and repeat the sentences.跟著朗讀一起讀出來。這四句話,可以學到四個很常見的sight word:an,a,it,is,大家可以重復播放幾遍,讓小朋友大膽跟讀。
今天的Lesson 1就學習到這里,下一節課我們將學習字母D E F。很期待下一次的小課堂哦,See you soon!
、HTTP簡介
HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,“超文本”即不僅僅是文本,還可以傳輸HTML 文件, 圖片文件等。
HTTP協議工作于客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。Web服務器根據接收到的請求后,向客戶端發送響應信息。
簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。由于HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
無狀態:HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
支持B/S及C/S模式。
URI 包含 URL 和 URN,目前 WEB 只有 URL 比較流行,所以見到的基本都是 URL。
URI(Uniform Resource Identifier,統一資源標識符)
URL(Uniform Resource Locator,統一資源定位符)
URN(Uniform Resource Name,統一資源名稱)
URI用來唯一的標識一個資源。Web上可用的每種資源如HTML文檔、圖像、視頻片段、程序等都是一個來URI來標識的。URI一般由三部組成: ①訪問資源的命名機制 ②存放資源的主機名 ③資源自身的名稱,由路徑表示,著重強調于資源。
URL是一種具體的URI,即URL可以用來標識一個資源,而且還指明了如何locate這個資源。采用URL可以用一種統一的格式來描述各種信息資源,包括文件、服務器的地址和目錄等。URL一般由三部組成: ①協議(或稱為服務方式) ②存有該資源的主機IP地址(有時也包括端口號) ③主機資源的具體地址。如目錄和文件名等
URN是通過名字來標識資源,比如mailto:java-net@java.sun.com。
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL可以看出,一個完整的URL包括以下幾部分:
1.協議部分: 該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"后面的“//”為分隔符
2.域名部分: 該URL的域名部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為域名使用
3.端口部分: 跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個URL必須的部分,如果省略端口部分,將采用默認端口
4.虛擬目錄部分: 從域名后的第一個“/”開始到最后一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”
5.文件名部分: 從域名后的最后一個“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名后的最后一個“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那么從域名后的最后一個“/”開始到結束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名
6.錨部分: 從“#”開始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分
7.參數部分: 從“?”開始到“#”為止之間的部分為參數部分,又稱搜索部分、查詢部分。本例中的參數部分為“boardID=5&ID=24618&page=1”。參數可以允許有多個參數,參數與參數之間用“&”作為分隔符。
請求報文由請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成。
第一部分:請求行,用來說明請求類型,要訪問的資源以及所使用的HTTP版本
GET說明請求類型為GET,[/562f25980001b1b106000338.jpg]為要訪問的資源,該行的最后一部分說明使用的是HTTP1.1版本。
第二部分:請求頭部,緊接著請求行(即第一行)之后的部分,用來說明服務器要使用的附加信息
從第二行起為請求頭部,HOST將指出請求的目的地.User-Agent,服務器端和客戶端腳本都能訪問它,它是瀏覽器類型檢測邏輯的重要基礎.該信息由你的瀏覽器來定義,并且在每個請求中自動發送等等
第三部分:空行,請求頭部后面的空行是必須的
即使第四部分的請求數據為空,也必須有空行
第四部分:請求數據也叫主體,可以添加任意的其他數據
HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
第一部分:狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。
第一行為狀態行,(HTTP/1.1)表明HTTP版本為1.1版本,狀態碼為200,狀態消息為(ok)
第二部分:消息報頭,用來說明客戶端要使用的一些附加信息
第二行和第三行為消息報頭, Date:生成響應的日期和時間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8
第三部分:空行,消息報頭后面的空行是必須的
第四部分:響應正文,服務器返回給客戶端的文本信息。
空行后面的html部分為響應正文。
根據HTTP標準,HTTP請求可以使用多種請求方法。HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。后來又引入了PATCH方法,是對PUT方法的補充。
請求指定的頁面信息,并返回實體主體。
類似于get請求,只不過返回的響應中沒有具體的內容,用于獲取報頭。主要用于確認 URL 的有效性以及資源更新的日期時間等。
POST 主要用來傳輸數據,而 GET 主要用來獲取資源。POST請求可能會導致新的資源的建立和/或已有資源的修改。
從客戶端向服務器傳送的數據取代指定的文檔的內容。由于自身不帶驗證機制,任何人都可以上傳文件,因此存在安全性問題,一般不使用該方法。
請求服務器刪除指定的頁面。與 PUT 功能相反,并且同樣不帶驗證機制。
要求在與代理服務器通信時建立隧道
使用 SSL(Secure Sockets Layer,安全套接層)和 TLS(Transport Layer Security,傳輸層安全)協議把通信內容加密后經網絡隧道傳輸。
CONNECT www.example.com:443 HTTP/1.1
查詢支持的方法
查詢指定的 URL 能夠支持的方法。
會返回 Allow: GET, POST, HEAD, OPTIONS 這樣的內容。
追蹤路徑
服務器會將通信路徑返回給客戶端。
發送請求時,在 Max-Forwards 首部字段中填入數值,每經過一個服務器就會減 1,當數值為 0 時就停止傳輸。
通常不會使用 TRACE,并且它容易受到 XST 攻擊(Cross-Site Tracing,跨站追蹤)。主要用于測試或診斷。
對資源進行部分修改
PUT 也可以用于修改資源,但是只能完全替代原始資源,PATCH 允許部分修改。
服務器返回的 響應報文 中第一行為狀態行,包含了狀態碼以及原因短語,用來告知客戶端請求的結果。
狀態碼類別原因短語1XXInformational(信息性狀態碼)接收的請求正在處理2XXSuccess(成功狀態碼)請求正常處理完畢3XXRedirection(重定向狀態碼)需要進行附加操作以完成請求4XXClient Error(客戶端錯誤狀態碼)服務器無法處理請求5XXServer Error(服務器錯誤狀態碼)服務器處理請求出錯
100 Continue :表明到目前為止都很正常,客戶端可以繼續發送請求或者忽略這個響應。
200 OK
204 No Content :請求已經成功處理,但是返回的響應報文不包含實體的主體部分。一般在只需要從客戶端往服務器發送信息,而不需要返回數據時使用。
206 Partial Content :表示客戶端進行了范圍請求,響應報文包含由 Content-Range 指定范圍的實體內容。
301 Moved Permanently :永久性重定向
302 Found :臨時性重定向
303 See Other :和 302 有著相同的功能,但是 303 明確要求客戶端應該采用 GET 方法獲取資源。
注:雖然 HTTP 協議規定 301、302 狀態下重定向時不允許把 POST 方法改成 GET 方法,但是大多數瀏覽器都會在 301、302 和 303 狀態下的重定向把 POST 方法改成 GET 方法。
304 Not Modified :如果請求報文首部包含一些條件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不滿足條件,則服務器會返回 304 狀態碼。
307 Temporary Redirect :臨時重定向,與 302 的含義類似,但是 307 要求瀏覽器不會把重定向請求的 POST 方法改成 GET 方法。
400 Bad Request :請求報文中存在語法錯誤。
401 Unauthorized :該狀態碼表示發送的請求需要有認證信息(BASIC 認證、DIGEST 認證)。如果之前已進行過一次請求,則表示用戶認證失敗。
403 Forbidden :請求被拒絕。
404 Not Found
500 Internal Server Error :服務器正在執行請求時發生錯誤。
503 Service Unavailable :服務器暫時處于超負載或正在進行停機維護,現在無法處理請求。
有 4 種類型的首部字段:通用首部字段、請求首部字段、響應首部字段和實體首部字段。
各種首部字段及其含義如下(不需要全記,僅供查閱):
首部字段名說明Cache-Control控制緩存的行為Connection控制不再轉發給代理的首部字段、管理持久連接Date創建報文的日期時間Pragma報文指令Trailer報文末端的首部一覽Transfer-Encoding指定報文主體的傳輸編碼方式Upgrade升級為其他協議Via代理服務器的相關信息Warning錯誤通知
首部字段名說明Accept用戶代理可處理的媒體類型Accept-Charset優先的字符集Accept-Encoding優先的內容編碼Accept-Language優先的語言(自然語言)AuthorizationWeb 認證信息Expect期待服務器的特定行為From用戶的電子郵箱地址Host請求資源所在服務器If-Match比較實體標記(ETag)If-Modified-Since比較資源的更新時間If-None-Match比較實體標記(與 If-Match 相反)If-Range資源未更新時發送實體 Byte 的范圍請求If-Unmodified-Since比較資源的更新時間(與 If-Modified-Since 相反)Max-Forwards最大傳輸逐跳數Proxy-Authorization代理服務器要求客戶端的認證信息Range實體的字節范圍請求Referer對請求中 URI 的原始獲取方TE傳輸編碼的優先級User-AgentHTTP 客戶端程序的信息
首部字段名說明Accept-Ranges是否接受字節范圍請求Age推算資源創建經過時間ETag資源的匹配信息Location令客戶端重定向至指定 URIProxy-Authenticate代理服務器對客戶端的認證信息Retry-After對再次發起請求的時機要求ServerHTTP 服務器的安裝信息Vary代理服務器緩存的管理信息WWW-Authenticate服務器對客戶端的認證信息
首部字段名說明Allow資源可支持的 HTTP 方法Content-Encoding實體主體適用的編碼方式Content-Language實體主體的自然語言Content-Length實體主體的大小Content-Location替代對應資源的 URIContent-MD5實體主體的報文摘要Content-Range實體主體的位置范圍Content-Type實體主體的媒體類型Expires實體主體過期的日期時間Last-Modified資源的最后修改日期時間
當瀏覽器訪問一個包含多張圖片的 HTML 頁面時,除了請求訪問 HTML 頁面資源,還會請求圖片資源。如果每進行一次 HTTP 通信就要新建一個 TCP 連接,那么開銷會很大。
長連接只需要建立一次 TCP 連接就能進行多次 HTTP 通信。
從 HTTP/1.1 開始默認是長連接的,如果要斷開連接,需要由客戶端或者服務器端提出斷開,使用 Connection : close;
在 HTTP/1.1 之前默認是短連接的,如果需要使用長連接,則使用 Connection : Keep-Alive。
那么http如何判斷一個報文結束? 所有http不外乎2情況:
參考http消息包的結束標記
默認情況下,HTTP 請求是按順序發出的,下一個請求只有在當前請求收到響應之后才會被發出。由于會受到網絡延遲和帶寬的限制,在下一個請求被發送到服務器之前,可能需要等待很長時間。
流水線是在同一條長連接上發出連續的請求,而不用等待響應返回,這樣可以避免連接延遲。
HTTP 協議是無狀態的,主要是為了讓 HTTP 協議盡可能簡單,使得它能夠處理大量事務。HTTP/1.1 引入 Cookie 來保存狀態信息。
Cookie 是服務器發送到用戶瀏覽器并保存在本地的一小塊數據,它會在瀏覽器之后向同一服務器再次發起請求時被攜帶上,用于告知服務端兩個請求是否來自同一瀏覽器。由于之后每次請求都會需要攜帶 Cookie 數據,因此會帶來額外的性能開銷(尤其是在移動環境下)。
Cookie 曾一度用于客戶端數據的存儲,因為當時并沒有其它合適的存儲辦法而作為唯一的存儲手段,但現在隨著現代瀏覽器開始支持各種各樣的存儲方式,Cookie 漸漸被淘汰。新的瀏覽器 API 已經允許開發者直接將數據存儲到本地,如使用 Web storage API(本地存儲和會話存儲)或 IndexedDB。
會話狀態管理(如用戶登錄狀態、購物車、游戲分數或其它需要記錄的信息)
個性化設置(如用戶自定義設置、主題等)
瀏覽器行為跟蹤(如跟蹤分析用戶行為等)
服務器發送的響應報文包含 Set-Cookie 首部字段,客戶端得到響應報文后把 Cookie 內容保存到瀏覽器中。
HTTP/1.0 200 OKContent-type: text/htmlSet-Cookie: yummy_cookie=chocoSet-Cookie: tasty_cookie=strawberry[page content]
客戶端之后對同一個服務器發送請求時,會從瀏覽器中取出 Cookie 信息并通過 Cookie 請求首部字段發送給服務器。
GET /sample_page.html HTTP/1.1Host: www.example.orgCookie: yummy_cookie=choco; tasty_cookie=strawberry
會話期 Cookie:瀏覽器關閉之后它會被自動刪除,也就是說它僅在會話期內有效。
持久性 Cookie:指定一個特定的過期時間(Expires)或有效期(max-age)之后就成為了持久性的 Cookie。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
Domain 標識指定了哪些主機可以接受 Cookie。如果不指定,默認為當前文檔的主機(不包含子域名)。如果指定了 Domain,則一般包含子域名。例如,如果設置 Domain=mozilla.org,則 Cookie 也包含在子域名中(如 developer.mozilla.org)。
Path 標識指定了主機下的哪些路徑可以接受 Cookie(該 URL 路徑必須存在于請求 URL 中)。以字符 %x2F ("/") 作為路徑分隔符,子路徑也會被匹配。例如,設置 Path=/docs,則以下地址都會匹配:
/docs
/docs/Web/
/docs/Web/HTTP
通過 document.cookie 屬性可創建新的 Cookie,也可通過該屬性訪問非 HttpOnly 標記的 Cookie。
document.cookie = "yummy_cookie=choco";document.cookie = "tasty_cookie=strawberry";console.log(document.cookie);
標記為 HttpOnly 的 Cookie 不能被 JavaScript 腳本調用。跨站腳本攻擊 (XSS) 常常使用 JavaScript 的 document.cookie API 竊取用戶的 Cookie 信息,因此使用 HttpOnly 標記可以在一定程度上避免 XSS 攻擊。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
標記為 Secure 的 Cookie 只能通過被 HTTPS 協議加密過的請求發送給服務端。但即便設置了 Secure 標記,敏感信息也不應該通過 Cookie 傳輸,因為 Cookie 有其固有的不安全性,Secure 標記也無法提供確實的安全保障。
除了可以將用戶信息通過 Cookie 存儲在用戶瀏覽器中,也可以利用 Session 存儲在服務器端,存儲在服務器端的信息更加安全。
Session 可以存儲在服務器上的文件、數據庫或者內存中。也可以將 Session 存儲在 Redis 這種內存型數據庫中,效率會更高。
使用 Session 維護用戶登錄狀態的過程如下:
用戶進行登錄時,用戶提交包含用戶名和密碼的表單,放入 HTTP 請求報文中;
服務器驗證該用戶名和密碼,如果正確則把用戶信息存儲到 Redis 中,它在 Redis 中的 Key 稱為 Session ID;
服務器返回的響應報文的 Set-Cookie 首部字段包含了這個 Session ID,客戶端收到響應報文之后將該 Cookie 值存入瀏覽器中;
客戶端之后對同一個服務器進行請求時會包含該 Cookie 值,服務器收到之后提取出 Session ID,從 Redis 中取出用戶信息,繼續之前的業務操作。
應該注意 Session ID 的安全性問題,不能讓它被惡意攻擊者輕易獲取,那么就不能產生一個容易被猜到的 Session ID 值。此外,還需要經常重新生成 Session ID。在對安全性要求極高的場景下,例如轉賬等操作,除了使用 Session 管理用戶狀態之外,還需要對用戶進行重新驗證,比如重新輸入密碼,或者使用短信驗證碼等方式。
此時無法使用 Cookie 來保存用戶信息,只能使用 Session。除此之外,不能再將 Session ID 存放到 Cookie 中,而是使用 URL 重寫技術,將 Session ID 作為 URL 的參數進行傳遞。
Cookie 只能存儲 ASCII 碼字符串,而 Session 則可以存取任何類型的數據,因此在考慮數據復雜性時首選 Session;
Cookie 存儲在瀏覽器中,容易被惡意查看。如果非要將一些隱私數據存在 Cookie 中,可以將 Cookie 值進行加密,然后在服務器進行解密;
對于大型網站,如果用戶所有的信息都存儲在 Session 中,那么開銷是非常大的,因此不建議將所有的用戶信息都存儲到 Session 中。
緩解服務器壓力;
降低客戶端獲取資源的延遲:緩存通常位于內存中,讀取緩存的速度更快。并且緩存在地理位置上也有可能比源服務器來得近,例如瀏覽器緩存。
讓代理服務器進行緩存;
讓客戶端瀏覽器進行緩存。
HTTP/1.1 通過 Cache-Control 首部字段來控制緩存。
no-store 指令規定不能對請求或響應的任何一部分進行緩存。
Cache-Control: no-store
no-cache 指令規定緩存服務器需要先向源服務器驗證緩存資源的有效性,只有當緩存資源有效才將能使用該緩存對客戶端的請求進行響應。
Cache-Control: no-cache
private 指令規定了將資源作為私有緩存,只能被單獨用戶所使用,一般存儲在用戶瀏覽器中。
Cache-Control: private
public 指令規定了將資源作為公共緩存,可以被多個用戶所使用,一般存儲在代理服務器中。
Cache-Control: public
max-age 指令出現在請求報文中,并且緩存資源的緩存時間小于該指令指定的時間,那么就能接受該緩存。
max-age 指令出現在響應報文中,表示緩存資源在緩存服務器中保存的時間。
Cache-Control: max-age=31536000
Expires 首部字段也可以用于告知緩存服務器該資源什么時候會過期。
Expires: Wed, 04 Jul 2012 08:26:05 GMT
在 HTTP/1.1 中,會優先處理 max-age 指令;
在 HTTP/1.0 中,max-age 指令會被忽略掉。
需要先了解 ETag 首部字段的含義,它是資源的唯一標識。URL 不能唯一表示資源,例如 http://www.google.com/ 有中文和英文兩個資源,只有 ETag 才能對這兩個資源進行唯一標識。
ETag: "82e22293907ce725faf67773957acd12"
可以將緩存資源的 ETag 值放入 If-None-Match 首部,服務器收到該請求后,判斷緩存資源的 ETag 值和資源的最新 ETag 值是否一致,如果一致則表示緩存資源有效,返回 304 Not Modified。
If-None-Match: "82e22293907ce725faf67773957acd12"
Last-Modified 首部字段也可以用于緩存驗證,它包含在源服務器發送的響應報文中,指示源服務器對資源的最后修改時間。但是它是一種弱校驗器,因為只能精確到一秒,所以它通常作為 ETag 的備用方案。如果響應首部字段里含有這個信息,客戶端可以在后續的請求中帶上 If-Modified-Since 來驗證緩存。服務器只在所請求的資源在給定的日期時間之后對內容進行過修改的情況下才會將資源返回,狀態碼為 200 OK。如果請求的資源從那時起未經修改,那么返回一個不帶有消息主體的 304 Not Modified 響應。
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
通過內容協商返回最合適的內容,例如根據瀏覽器的默認語言選擇返回中文界面還是英文界面。
客戶端設置特定的 HTTP 首部字段,例如 Accept、Accept-Charset、Accept-Encoding、Accept-Language,服務器根據這些字段返回特定的資源。
它存在以下問題:
服務器很難知道客戶端瀏覽器的全部信息;
客戶端提供的信息相當冗長(HTTP/2 協議的首部壓縮機制緩解了這個問題),并且存在隱私風險(HTTP 指紋識別技術);
給定的資源需要返回不同的展現形式,共享緩存的效率會降低,而服務器端的實現會越來越復雜。
服務器返回 300 Multiple Choices 或者 406 Not Acceptable,客戶端從中選出最合適的那個資源。
Vary: Accept-Language
在使用內容協商的情況下,只有當緩存服務器中的緩存滿足內容協商條件時,才能使用該緩存,否則應該向源服務器請求該資源。
例如,一個客戶端發送了一個包含 Accept-Language 首部字段的請求之后,源服務器返回的響應包含 Vary: Accept-Language 內容,緩存服務器對這個響應進行緩存之后,在客戶端下一次訪問同一個 URL 資源,并且 Accept-Language 與緩存中的對應的值相同時才會返回該緩存。
內容編碼將實體主體進行壓縮,從而減少傳輸的數據量。
常用的內容編碼有:gzip、compress、deflate、identity。
瀏覽器發送 Accept-Encoding 首部,其中包含有它所支持的壓縮算法,以及各自的優先級。服務器則從中選擇一種,使用該算法對響應的消息主體進行壓縮,并且發送 Content-Encoding 首部來告知瀏覽器它選擇了哪一種算法。由于該內容協商過程是基于編碼類型來選擇資源的展現形式的,在響應的 Vary 首部至少要包含 Content-Encoding。
如果網絡出現中斷,服務器只發送了一部分數據,范圍請求可以使得客戶端只請求服務器未發送的那部分數據,從而避免服務器重新發送所有數據。
在請求報文中添加 Range 首部字段指定請求的范圍。
GET /z4d4kWk.jpg HTTP/1.1Host: i.imgur.comRange: bytes=0-1023
請求成功的話服務器返回的響應包含 206 Partial Content 狀態碼。
HTTP/1.1 206 Partial ContentContent-Range: bytes 0-1023/146515Content-Length: 1024...(binary content)
響應首部字段 Accept-Ranges 用于告知客戶端是否能處理范圍請求,可以處理使用 bytes,否則使用 none。
Accept-Ranges: bytes
在請求成功的情況下,服務器會返回 206 Partial Content 狀態碼。
在請求的范圍越界的情況下,服務器會返回 416 Requested Range Not Satisfiable 狀態碼。
在不支持范圍請求的情況下,服務器會返回 200 OK 狀態碼。
Chunked Transfer Coding,可以把數據分割成多塊,讓瀏覽器逐步顯示頁面。
一份報文主體內可含有多種類型的實體同時發送,每個部分之間用 boundary 字段定義的分隔符進行分隔,每個部分都可以有首部字段。
例如,上傳多個表單時可以使用如下方式:
Content-Type: multipart/form-data; boundary=AaB03x--AaB03xContent-Disposition: form-data; name="submit-name"Larry--AaB03xContent-Disposition: form-data; name="files"; filename="file1.txt"Content-Type: text/plain... contents of file1.txt ...--AaB03x--
HTTP/1.1 使用虛擬主機技術,使得一臺服務器擁有多個域名,并且在邏輯上可以看成多個服務器。
代理服務器接受客戶端的請求,并且轉發給其它服務器。
使用代理的主要目的是:
緩存
負載均衡
網絡訪問控制
訪問日志記錄
代理服務器分為正向代理和反向代理兩種:
用戶察覺得到正向代理的存在。
而反向代理一般位于內部網絡中,用戶察覺不到。
與代理服務器不同的是,網關服務器會將 HTTP 轉化為其它協議進行通信,從而請求其它非 HTTP 服務器的服務。
使用 SSL 等加密手段,在客戶端和服務器之間建立一條安全的通信線路。
HTTP 有以下安全性問題:
使用明文進行通信,內容可能會被竊聽;
不驗證通信方的身份,通信方的身份有可能遭遇偽裝;
無法證明報文的完整性,報文有可能遭篡改。
HTTPs 并不是新協議,而是讓 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是說 HTTPs 使用了隧道進行通信。
通過使用 SSL,HTTPs 具有了加密(防竊聽)、認證(防偽裝)和完整性保護(防篡改)。
對稱密鑰加密(Symmetric-Key Encryption),加密和解密使用同一密鑰。
優點:運算速度快;
缺點:無法安全地將密鑰傳輸給通信方。
非對稱密鑰加密,又稱公開密鑰加密(Public-Key Encryption),加密和解密使用不同的密鑰。
公開密鑰所有人都可以獲得,通信發送方獲得接收方的公開密鑰之后,就可以使用公開密鑰進行加密,接收方收到通信內容后使用私有密鑰解密。
非對稱密鑰除了用來加密,還可以用來進行簽名。因為私有密鑰無法被其他人獲取,因此通信發送方使用其私有密鑰進行簽名,通信接收方使用發送方的公開密鑰對簽名進行解密,就能判斷這個簽名是否正確。
優點:可以更安全地將公開密鑰傳輸給通信發送方;
缺點:運算速度慢。
HTTPs 采用混合的加密機制,使用非對稱密鑰加密用于傳輸對稱密鑰來保證傳輸過程的安全性,之后使用對稱密鑰加密進行通信來保證通信過程的效率。(下圖中的 Session Key 就是對稱密鑰)
通過使用 證書 來對通信方進行認證。
數字證書認證機構(CA,Certificate Authority)是客戶端與服務器雙方都可信賴的第三方機構。
服務器的運營人員向 CA 提出公開密鑰的申請,CA 在判明提出申請者的身份之后,會對已申請的公開密鑰做數字簽名,然后分配這個已簽名的公開密鑰,并將該公開密鑰放入公開密鑰證書后綁定在一起。
進行 HTTPs 通信時,服務器會把證書發送給客戶端??蛻舳巳〉闷渲械墓_密鑰之后,先使用數字簽名進行驗證,如果驗證通過,就可以開始通信了。
通信開始時,客戶端需要使用服務器的公開密鑰將自己的私有密鑰傳輸給服務器,之后再進行對稱密鑰加密。
SSL 提供報文摘要功能來進行完整性保護。
HTTP 也提供了 MD5 報文摘要功能,但不是安全的。例如報文內容被篡改之后,同時重新計算 MD5 的值,通信接收方是無法意識到發生了篡改。
HTTPs 的報文摘要功能之所以安全,是因為它結合了加密和認證這兩個操作。試想一下,加密之后的報文,遭到篡改之后,也很難重新計算報文摘要,因為無法輕易獲取明文。
因為需要進行加密解密等過程,因此速度會更慢;
需要支付證書授權的高額費用。
HTTP/1.x 實現簡單是以犧牲性能為代價的:
客戶端需要使用多個連接才能實現并發和縮短延遲;
不會壓縮請求和響應首部,從而導致不必要的網絡流量;
不支持有效的資源優先級,致使底層 TCP 連接的利用率低下。
HTTP/2.0 將報文分成 HEADERS 幀和 DATA 幀,它們都是二進制格式的。
在通信過程中,只會有一個 TCP 連接存在,它承載了任意數量的雙向數據流(Stream)。
一個數據流(Stream)都有一個唯一標識符和可選的優先級信息,用于承載雙向信息。
消息(Message)是與邏輯請求或響應對應的完整的一系列幀。
幀(Frame)是最小的通信單位,來自不同數據流的幀可以交錯發送,然后再根據每個幀頭的數據流標識符重新組裝。
HTTP/2.0 在客戶端請求一個資源時,會把相關的資源一起發送給客戶端,客戶端就不需要再次發起請求了。例如客戶端請求 page.html 頁面,服務端就把 script.js 和 style.css 等與之相關的資源一起發給客戶端。
HTTP/1.1 的首部帶有大量信息,而且每次都要重復發送。
HTTP/2.0 要求客戶端和服務器同時維護和更新一個包含之前見過的首部字段表,從而避免了重復傳輸。
不僅如此,HTTP/2.0 也使用 Huffman 編碼對首部字段進行壓縮。
詳細內容請見上文
默認是長連接
支持流水線
支持同時打開多個 TCP 連接
支持虛擬主機
新增狀態碼 100
支持分塊傳輸編碼
新增緩存處理指令 max-age
GET提交的數據會放在URL之后,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456。 POST方法是把提交的數據放在HTTP包的Body中。(一個形象地比喻是:當執行GET請求的時候,要給汽車貼上GET的標簽(設置method為GET),而且要求把傳送的數據放在車頂上(url中)以方便記錄。如果是POST請求,就要在車上貼上POST的標簽,并把貨物放在車廂里。)
因為 URL 只支持 ASCII 碼,因此 GET 的參數中如果存在中文等字符就需要先進行編碼。例如 中文 會轉換為 %E4%B8%AD%E6%96%87,而空格會轉換為 %20。POST 參考支持標準字符集。
GET方式提交數據,會帶來安全問題,比如一個登錄頁面,通過GET方式提交數據時,用戶名和密碼將出現在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該用戶的賬號和密碼
但是,不能因為 POST 參數存儲在實體主體中就認為它的安全性更高,因為照樣可以通過一些抓包工具(Fiddler)查看。
冪等的 HTTP 方法,同樣的請求被執行一次與連續執行多次的效果是一樣的,服務器的狀態也是一樣的。換句話說就是,冪等方法不應該具有副作用(統計用途除外)。
所有的安全方法也都是冪等的。
在正確實現的條件下,GET,HEAD,PUT 和 DELETE 等方法都是冪等的,而 POST 方法不是。
首先聲明:HTTP協議沒有對傳輸的數據大小進行限制,HTTP協議規范也沒有對URL長度進行限制。
而在實際開發中存在的限制主要有:
**GET:**特定瀏覽器和服務器對URL長度有限制,例如 IE對URL長度的限制是2083字節(2K+35)。對于其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決于操作系 統的支持。
因此對于GET提交時,傳輸數據就會受到URL長度的 限制。
**POST:**由于不是通過URL傳值,理論上數據不受 限。但實際各個WEB服務器會規定對post提交數據大小進行限制,Apache、IIS6都有各自的配置。
安全的 HTTP 方法不會改變服務器狀態,也就是說它只是可讀的。
GET 方法是安全的,而 POST 卻不是,因為 POST 的目的是傳送實體主體內容,這個內容可能是用戶上傳的表單數據,上傳成功之后,服務器可能把這個數據存儲到數據庫中,因此狀態也就發生了改變。
安全的方法除了 GET 之外還有:HEAD、OPTIONS。
不安全的方法除了 POST 之外還有 PUT、DELETE。
GET產生一個TCP數據包;POST產生兩個TCP數據包。
對于GET方式的請求,瀏覽器會把http header和data一并發送出去,服務器響應200(返回數據);而對于POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。
關于HTTP協議,一篇就夠了HTTPGET和POST兩種基本請求方法的區別
本文來源:http://8rr.co/zgQS
最后
剛整理 2020 年全套最新精品技術資料免費發給你! (原價最少8999元,超2000G!)
領取 看看下面?。?/strong>
1、點贊 + 評論 (勾選 “轉發” )
2、關注小編私信。點擊頭像,關注。并私信回復關鍵詞: 1024
編碎碎念
JavaScript已經不是那個被人不看好的玩具語言了,瀏覽器,手機,服務器端都可以看到JS的身影,前端的崛起就是他的功勞。
小編跟BOSS軟磨硬泡
申請了【JavaScript課程】限時免費的特權。
前端新手和想要入門的猿族,JavaScript是重中之重,是必修且必精的語言!
課程介紹
JavaScript 是一種輕量級的編程語言,開發過程較容易。
JavaScript 也是一種腳本語言,它采用小程序段的方式實現編程。
JavaScript 可以插入到 HTML 頁面代碼中,可由所有的現代瀏覽器執行。
它的出現彌補了HTML語言的缺陷,它是Java與HTML折衷的選擇。
JavaScript 可以直接嵌入HTML頁面,但寫成單獨的js文件有利于結構和行為的分離。
JavaScript 可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等) 。
學習目標
系統掌握Javascript技術,學會如何利用Dreamweaver相關技術開發網站
課程特色
通過多個實例的講解,由淺入深講授各知識點
課程列表
JavaScript 初級
探索JavaScript的神奇世界
第一個網頁Hello,JavaScript程序
DreamweaverCS5和EditPlus的安裝與使用一
變量和數據類型和運算符以及數組
函數的有參和無參以及匿名函數
For循環結構
Switch選擇結構
If-else選擇結構
While和do-while循環
Break和continue語句以及程序調試
Document,Window等對象方法(一)
Document,Window等對象方法(二)
簡易計算器的編寫
猜數字小游戲的編寫
課程鏈接:http://ean.haorenao.cn/static/ean-pc/html/courses/search-courses.html?namekeyword=JavaScript
*請認真填寫需求信息,我們會在24小時內與您取得聯系。