浏览器接收响应数据过大_DOM总结:数据通信(HTTP协议和Ajax)
HTTP協議:
一個完整的HTTP請求的過程:1、瀏覽器會向服務器端發送給一個包含命令和URL的HTTP請求報文;2、當服務器端接收到這個請求報文之后,會進行一系列的計算,向瀏覽器返回一個包含事務結果的HTTP響應報文;3、瀏覽器接收到響應報文之后,會將報文的主體顯示在瀏覽器端上。
HTTP報文分為請求報文和響應報文。都是由三部分組成:頭行、頭部和主體。
頭行由三部分構成:方法、主機地址、HTTP的版本
頭部:許多的鍵值對構成
Accept:瀏覽器端可以接收的媒體類型
Accept-Encoding:瀏覽器端可以接收的媒體類型的編碼的方式
Accept-Language:瀏覽器端可以接收的語言類型
Cache-Control:緩存策略
Connection:keep-alive
Cookie:瀏覽器端向服務器端發送的cookie值
Host:主機
Pragma:頭域用來包含實現特定的指令,最常用的是no-cache
User-Agent:當前瀏覽器的版本
GET方法,請求體為空。
響應報文的格式:也是由三部分組成 頭行 頭部 和主體
頭行:HTTP協議版本、HTTP狀態碼、HTTP狀態碼描述
expires:緩存的有效時間,如果緩存策略設置了緩存的話,可以設置下expires,賦一個時間戳。
server:服務器端的HTTP服務器使用的是Nginx服務器。
主體:因為訪問的是一個頁面,所以返回的是一個完整的xml文件。
常見的HTTP方法:
URL構成
protocol + host(hostname + port )+ pathname + search + hash
port、pathname、search、hash都是不必須的。
HTTP版本
1991年,HTTP的原型,有很多設計缺陷 HTTP/0.9
HTTP/1.0版本很快取代了0.9,成為了第一個廣泛應用的版本。
HTTP/1.0+ 添加持久的keep-alive連接、虛擬主機支持,以及代理連接支持,稱為非官方的事實標準。
HTTP/1.1 校正了結構性缺陷,明確語義,引入重要的性能優化措施,刪除不好特性。
常見HTTP狀態碼
HTTP協議在前端開發中的應用
Asynchronous Javascript and XML
完整的Ajax通信流程
1、創建一個Ajax對象 XHR(readyState:0,status: responseText:)當XHR初始化的時候,readyState=0,另外兩個屬性的值為空。
2、調用XHR對象的open方法,readyState=1,開啟一個請求,以備發送。但是沒有向服務器端發請求。xhr.open(method,url [ , async = true]) 默認是異步請求。
調用open方法之后調用xhr.setRequestHeader(header, value),也不一定非要調用它。調用這個方法可以在請求體頭部設置頭部字段,比如把header的值設為content-type 。如果當前這個請求是表單編碼的、文件上傳
3、調用send方法,readyState=2,正式向服務器端發送請求。xhr.send([data = null])向服務器端發送請求的請求體里的數據。這個數據可以是string類型,也可以是formdata類型的。
4、當服務器端開始返回數據的時候,瀏覽器接收到這個數據,readyState=3。
5、瀏覽器端結束請求時,readyState=4,status=200,responseText=<!DOCTYPE html>
在HTTP2.0的標準里面,我們還可以監聽它的xhr.onload事件,可以代替onreadystatechange事件,當readyState=4,&&status=200的時候才會觸發。
請求參數序列化:
如果是get請求:需要把查詢參數作為字符串,跟在URL后面,
如果這個查詢參數是個對象,就需要把這個對象轉換成這樣一個字符串。
通過這個函數,我們傳入一個對象,就會返回我們需要的那個字符串。
GET請求參數序列化
請求體里為null。
POST請求參數序列化
查詢參數會作為send的參數。
同源策略:
兩個頁面擁有相同的協議(protocol)、端口(port)、主機(host),那么這兩個頁面就屬于同一個源(origin)。
如果不滿足同源策略的訪問,稱為:跨域資源訪問,W3C定義了CORS,現代瀏覽器已經實現了對CORS的支持。
CORS標準的原理:
1、瀏覽器會捕獲到A應用往S服務器發起的請求;
2、瀏覽器根據請求的情況,確定是否需要先作為一次預請求來驗證S服務器是否允許發送當前請求過去、如果需要的話,瀏覽器會發起一個option的請求到S服務器來驗證;
3、S服務器會根據瀏覽器發過來的header信息,驗證S服務器對資源的配置信息,然后返回資源的實際控制配置權限,然后瀏覽器驗證請求返回的信息,判斷是否將請求發送到S服務器,4、如果可以的話就發送實際的請求到S服務器;如果不行,則異常退出。
4、如果不需要就跳過第三步;
5、S服務器返回請求數據及資源的配置信息至瀏覽器,然后瀏覽器驗證資源的控制信息是否允許當前實際請求取到數據,
6、如果允許,則發送S服務器,返回數據給A應用。否則就異常退出。
其他跨域技術:
Frame代理
1、A應用要往S服務器取數據時,它會先用iframe請求S服務器上的代理文件,
2、S服務器返回了配置的代理文件,并載入iframe,
3、代理文件載入完成后,A應用將發送的請求通過消息、通信的方式傳遞給代理文件;
4、代理文件驗證A應用是否在預先配置的白名單中,如果在則直接發送請求至S服務器,否則異常退出;
5、服務器返回數據至代理文件,
6、代理文件通過消息機制將請求的結果返回給A應用。
frame代理優點:1、參照cors標準,2、支持各種請求方法、
缺點:需要在目標服務器放置代理文件,它由于首次發起請求需要載入代理文件,在載入代理文件之前的所有請求都會存在一定的延遲,對于低版本瀏覽器受限于消息通信機制的限制,并發量大的請求返回時可能存在較大的延遲。
JSONP
JSON with padding(填充式JSON)
利用的是script可以跨域,利用script標簽,向服務器請求一段JS代碼,然后執行這段JS代碼,實現跨域。
服務器就會返回一個叫json.js的一個文件,這個js文件里就是一段JS代碼。執行handleResponse這個函數。response就是要從服務器端拿取得數據。
Comet
Web Sockets等
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的浏览器接收响应数据过大_DOM总结:数据通信(HTTP协议和Ajax)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python处理字符串效率_Python
- 下一篇: 奈奎斯特采样定理_通俗理解奈奎斯特带宽