[各層設備]php
[!NOTE]
HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。它是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。HTTP是一個無狀態的協議。html
數據包細節web
重點
Get請求能緩存,Post不能重點
POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)反作用和冪等的概念面試
[!NOTE]ajax
[!NOTE]
在規範的應用場景上說,Get 多用於無反作用,冪等的場景,例如搜索關鍵字。Post 多用於反作用,不冪等的場景,例如註冊。瀏覽器
表示請求已接收,繼續處理緩存
[!NOTE]
HTTP協議採用「請求-應答」模式,而且HTTP是基於TCP進行鏈接的。普通模式(非keep-alive)時,每一個請求或應答都須要創建一個鏈接,完成以後當即斷開。安全
當使用Conection: keep-alive
模式(又稱持久鏈接、鏈接重用)時,keep-alive使客戶端道服務器端鏈接持續有效,即不關閉底層的TCP鏈接,當出現對服務器的後繼請求時,keep-alive功能避免從新創建鏈接。服務器
管線化後,請求和響應再也不是依次交替的了。他能夠支持一次性發送多個請求,並一次性接收多個響應。cookie
在客戶端向服務端發送請求的時候,客戶端會申明能夠接受的數據格式和數據相關的一些限制是什麼樣的;服務端在接受到這個請求時他會根據這個信息進行判斷到底返回怎樣的數據。
application/x-www-form-urlencoded
multipart/form-data
text/plain
// 原生ajax 方式對get的url,使用POST請求方式進行發送 document.querySelector("#btnAjax").onclick = function () { var ajax = new XMLHttpRequest(); // 使用post請求 ajax.open('post','ajax_post.php'); // 若是 使用post發送數據 必須 設置 以下內容 // 修改了 發送給 服務器的 請求報文的 內容 // 若是須要像 HTML 表單那樣 POST 數據,請使用 setRequestHeader() 來添加 HTTP 頭。而後在 send() 方法中規定您但願發送的數據: ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // 發送 // post請求 發送的數據 寫在 send方法中 // 格式 name=jack&age=18 字符串的格式 ajax.send('name=jack&age=998'); // 註冊事件 ajax.onreadystatechange = function () { if (ajax.readyState==4&&ajax.status==200) { console.log(ajax.responseText); } } }
CSP Content-Security-Policy
例子:
Content-Security-Policy: default-src http: https:
表示只容許經過http、https的方式加載資源'Content -Security-Policy': 'default-src' \'self\'; form-action\'self\' '
表示只能加載本域下的資源,只能向本域發送表單請求經過以上步驟可知,在 TLS 握手階段,兩端使用非對稱加密的方式來通訊,可是由於非對稱加密損耗的性能比對稱加密大,因此在正式傳輸數據時,兩端使用對稱加密的方式通訊。
[!NOTE]
HTTP 2.0 相比於 HTTP 1.X,能夠說是大幅度提升了 web 的性能。
在 HTTP 1.X 中,爲了性能考慮,咱們會引入雪碧圖、將小圖內聯、使用多個域名等等的方式。這一切都是由於瀏覽器限制了同一個域名下的請求數量,當頁面中須要請求不少資源的時候,隊頭阻塞(Head of line blocking)會致使在達到最大請求數量時,剩餘的資源須要等待其餘資源請求完成後才能發起請求。
HTTP 2.0 中全部增強性能的核心點在於此。在以前的 HTTP 版本中,咱們是經過文本的方式傳輸數據。在 HTTP 2.0 中引入了新的編碼機制,全部傳輸的數據都會被分割,並採用二進制格式編碼。
在 HTTP 2.0 中,有兩個很是重要的概念,分別是幀(frame)和流(stream)。
幀表明着最小的數據單位,每一個幀會標識出該幀屬於哪一個流,流也就是多個幀組成的數據流。
多路複用,就是在一個 TCP 鏈接中能夠存在多條流。換句話說,也就是能夠發送多個請求,對端能夠經過幀中的標識知道屬於哪一個請求。經過這個技術,能夠避免 HTTP 舊版本中的隊頭阻塞問題,極大的提升傳輸性能。
在 HTTP 1.X 中,咱們使用文本的形式傳輸 header,在 header 攜帶 cookie 的狀況下,可能每次都須要重複傳輸幾百到幾千的字節。
在 HTTP 2.0 中,使用了 HPACK 壓縮格式對傳輸的 header 進行編碼,減小了 header 的大小。並在兩端維護了索引表,用於記錄出現過的 header ,後面在傳輸過程當中就能夠傳輸已經記錄過的 header 的鍵名,對端收到數據後就能夠經過鍵名找到對應的值。
在 HTTP 2.0 中,服務端能夠在客戶端某個請求後,主動推送其餘資源。
能夠想象如下狀況,某些資源客戶端是必定會請求的,這時就能夠採起服務端 push 的技術,提早給客戶端推送必要的資源,這樣就能夠相對減小一點延遲時間。固然在瀏覽器兼容的狀況下你也可使用 prefetch。
通用字段 | 做用 |
---|---|
Cache-Control | 控制緩存的行爲 |
Connection | 瀏覽器想要優先使用的鏈接類型,好比 keep-alive |
Date | 建立報文時間 |
Pragma | 報文指令 |
Via | 代理服務器相關信息 |
Transfer-Encoding | 傳輸編碼方式 |
Upgrade | 要求客戶端升級協議 |
Warning | 在內容中可能存在錯誤 |
請求字段 | 做用 |
---|---|
Accept | 能正確接收的媒體類型 |
Accept-Charset | 能正確接收的字符集 |
Accept-Encoding | 能正確接收的編碼格式列表 |
Accept-Language | 能正確接收的語言列表 |
Expect | 期待服務端的指定行爲 |
From | 請求方郵箱地址 |
Host | 服務器的域名 |
If-Match | 兩端資源標記比較 |
If-Modified-Since | 本地資源未修改返回 304(比較時間) |
If-None-Match | 本地資源未修改返回 304(比較標記) |
User-Agent | 客戶端信息 |
Max-Forwards | 限制可被代理及網關轉發的次數 |
Proxy-Authorization | 向代理服務器發送驗證信息 |
Range | 請求某個內容的一部分 |
Referer | 表示瀏覽器所訪問的前一個頁面 |
TE | 傳輸編碼方式 |
響應字段 | 做用 |
---|---|
Accept-Ranges | 是否支持某些種類的範圍 |
Age | 資源在代理緩存中存在的時間 |
ETag | 資源標識 |
Location | 客戶端重定向到某個 URL |
Proxy-Authenticate | 向代理服務器發送驗證信息 |
Server | 服務器名字 |
WWW-Authenticate | 獲取資源須要的驗證信息 |
實體字段 | 做用 |
---|---|
Allow | 資源的正確請求方式 |
Content-Encoding | 內容的編碼格式 |
Content-Language | 內容使用的語言 |
Content-Length | request body 長度 |
Content-Location | 返回數據的備用地址 |
Content-MD5 | Base64加密格式的內容 MD5檢驗值 |
Content-Range | 內容的位置範圍 |
Content-Type | 內容的媒體類型 |
Expires | 內容的過時時間 |
Last_modified | 內容的最後修改時間 |
參考文章: http://www.javashuo.com/article/p-mjsgoetv-bt.html
參考連接:https://blog.csdn.net/sinat_21455985/article/details/53508115