摘要:端口為只是通信接口部分用和協(xié)議替代。直接和通信,而使用所以是先和通信,再由和通信。
來一篇串通,一個http全過程的問題,把所有HTTP相關知識點都帶過一遍
http全過程輸入域名(url)-->DNS映射為IP-->TCP三次握手-->HTTP請求-->HTTP響應-->(瀏覽器跟蹤重定向地址)-->服務器處理請求-->服務器返回一個html響應-->(視情況決定釋放TCP連接)-->客戶端解析HTML-->獲取嵌入在HTML中的對象重新發(fā)起http請求
輸入域名(url)在域名這里有很多可以聊的:
域名級數(shù)判別
域名服務器及域名這里有詳細解釋,即“計算機網(wǎng)絡技術(shù)”的第九章Domain Name System
一個點分隔一級(域名由分量組成,一級為一個分量),通俗易懂如下:
...三級域名.二級域名.頂級域名 WWW.baidu.com com為頂級域名(通常依據(jù)組織和地理分為兩類),baidu為二級域名,WWW網(wǎng)站 www.pic.baidu.com pic為三級域名 所謂降域,如pic.baidu.com/a.txt baidu.com/b.txt中a和b在不同的域下面,都降域為baidu.com..如下詳細解釋
同源策略
同源需滿足的條件:
協(xié)議相同
域名相同:a.b.c.com a.b.d.com域名相同嗎
端口相同
非同源受限制的行為:
cookie localStorage indexDB無法獲取
DOM無法獲得
ajax請求不能發(fā)送
跨域方法:
雙向跨域
1.降域(二級和以上有共同部分)
所謂降域就是尋找到最后面的域名相同的部分留下 a.b.c.com d.b.c.com 降域后統(tǒng)統(tǒng)改為b.c.com或者c.com
存在的問題:
安全性,當一個站點被攻擊,相同域名的站點也會被攻擊
重復性,所有需要跨域的都要修改document.domain=""
ajax不受降域影響,還是需要iframe在一個頁面引入另一頁面的形式
不可更改性,一旦降域就無法回去
2.location.hash(FIM---fragment itentitier messaging)
a向b傳送數(shù)據(jù) baidu.com/a.html中的iframe的src="google.com/b.html#paco",b.html監(jiān)聽到 url發(fā)生變化觸發(fā)相應操作 b向a傳送數(shù)據(jù) google.com/b.html中隱藏一個iframe,設置src="baidu.com/proxy.html#data" data為要傳輸?shù)臄?shù)據(jù),proxy.html是和a.html同域名下的,是a b之間的代理,負責監(jiān)聽utl變化就修改a的url,a監(jiān)聽到url變化了就做出相應操作
b.html:
try { parent.location.hash = "data"; } catch (e) { // ie、chrome的安全機制無法修改parent.location.hash, var ifrproxy = document.createElement("iframe"); ifrproxy.style.display = "none"; ifrproxy.src = "http://www.baidu.com/proxy.html#data"; document.body.appendChild(ifrproxy); }
proxy.html:
//因為parent.parent(即baidu.com/a.html)和baidu.com/proxy.html屬于同一個域,所以可以改變其location.hash的值 parent.parent.location.hash = self.location.hash.substring(1);
問題:數(shù)據(jù)暴露在URL中,數(shù)據(jù)大小格式受限
3.HTML5的postMessage方法
a向b發(fā)送數(shù)據(jù)
baidu.com/a.html
window.onload = function() { var ifr = document.getElementById("ifr"); var targetOrigin = "http://www.google.com"; ifr.contentWindow.postMessage("hello world!", targetOrigin); };
google.com/b.html
var onmessage = function (event) { var data = event.data;//消息 var origin = event.origin;//消息來源地址 var source = event.source;//源Window對象 if(origin=="http://www.baidu.com"){ console.log(data);//hello world! } }; if (typeof window.addEventListener != "undefined") { window.addEventListener("message", onmessage, false); } else if (typeof window.attachEvent != "undefined") { //for ie window.attachEvent("onmessage", onmessage); }
同理可以b向a postMessage
單向跨域
1.jsonp
先看兩種用法
回調(diào)函數(shù)
參數(shù)
問題:只支持get請求
2.服務器代理
服務器沒有同源策略,在數(shù)據(jù)提供方?jīng)]有jsonp,window.name協(xié)議的支持下,使用服務器代理。 在baidu.com下配置一個代理proxy即baidu.com/proxy/將ajax綁定到代理下發(fā)送http請求,此時http請求是在服務端進行的,無同源限制
3.CORS
var url = "http://api.alice.com/cors"; var xhr = createCORSRequest("GET", url); xhr.send(); //非簡單請求 var url = "http://api.alice.com/cors"; var xhr = createCORSRequest("PUT", url); xhr.setRequestHeader( "X-Custom-Header", "value"); xhr.send();
另外:對于CORS的支持需要服務器和客戶端之間的協(xié)調(diào)
4.window.name
5.webSocket
需要服務器的支持,源在白名單
6.Access-Controll-Allow-Origin
http和https協(xié)議有什么區(qū)別,重點解釋https
http+加密+認證+完整性保護=https
http:應用層的無狀態(tài),超文本傳輸協(xié)議。端口為80
HTTPS:只是http通信接口部分用SSL和TLS協(xié)議替代。http直接和TCP通信,而HTTPS使用SSL所以是先和SSL通信,再由SSL和TCP通信。端口為443
cookie sessionStorage localStorage有什么不同
cookie存儲在客戶端,可以發(fā)送給服務器,數(shù)據(jù)大小限制為4K
sessionStorage,localStorage存儲在本地,不可以發(fā)送給服務器,數(shù)據(jù)大小為5M
localStorage只能手動清除數(shù)據(jù)
sessionStorage關閉會話窗,數(shù)據(jù)就被清除了
HTML5本地存儲分為
webStorage(localStorage,sessionStorage)
indexDB
DNS解析域名為IP瀏覽器緩存中找
系統(tǒng)緩存中找
路由器緩存中找
ISP DNS緩存中找
TCP三次握手client----->server:SYN(發(fā)起一個TCP連接,同步報文)
server----->client:SYN+ACK(應答報文,表示已創(chuàng)建連接)
client----->server:ACK(應答報文,表示收到已連接)
四次揮手: 由客戶端發(fā)起的關閉連接 * client----->server:FIN(請求關閉連接) * server----->client:ACK(收到了連接,但不會立即關閉,等到報文都發(fā)送完再回復一個FIN) * server----->client:FIN * client----->server:ACK(收到關閉) 由服務端發(fā)起的關閉連接 * 當http設置了keepalive定時關閉,服務端會在結(jié)束數(shù)據(jù)傳送后關閉TCP連接http請求
請求行
請求頭
空行
請求包體(只有POST請求有包體)
get/post區(qū)別
請求參數(shù):get參數(shù)附在URL后面?隔開,POST參數(shù)放在包體中
大小限制:GET限制為2048字符,post無限制
安全問題:GET參數(shù)暴露在URL中,不如POST安全
瀏覽器歷史記錄:GET可以記錄,POST無記錄
緩存:GET可被緩存,post無
書簽:GET可被收藏為書簽,post不可
數(shù)據(jù)類型:GET只能ASCII碼,post無限制
http響應狀態(tài)行
響應頭
響應包體
http狀態(tài)碼
1XX:表示可續(xù)發(fā)請求
2XX:表示成功
* 202成功 * 204成功 不返回實體主體 * 206成功 執(zhí)行了一個范圍請求
3XX:表示重定向
* 301永久重定向,增加SEO排名 * 302臨時重定向 禁止POST變?yōu)镚ET * 303另外一個URI * 304判斷是否要更新緩存 請求頭部攜帶if-modified-since自從上次更新距這次多久 * 307臨時重定向
4XX:表示客戶端錯誤
* 400客戶端語法錯誤 * 401請求未經(jīng)授權(quán) * 403服務器拒絕服務 * 404請求資源不存在
5XX:服務端錯誤
* 500不可預期的錯誤 * 503此時不能提供服務 稍后恢復正常釋放TCP連接
header中的connecton:close
服務器主動關閉TCP連接,客戶端被動關閉連接
header中的connecton:keepalive
連接保持一段時間,可以連續(xù)發(fā)送http請求客戶端解析HTML
onload ready區(qū)別:
ready表示文檔加載完畢,不包括圖片
onload表示都加載完畢
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/80544.html
摘要:這是一次失敗的面經(jīng)但是吃一塹才能長一智不是嗎字節(jié)跳動校招面經(jīng)前端開發(fā)崗一介紹以及項目經(jīng)歷吧啦吧啦此處省略字面試官會從項目經(jīng)歷入手,考察項目中遇到的難題,以及解決方法,強調(diào)個人的努力以及在解決過程中扮演的角色是主導還是參與。 這是一次失敗的面經(jīng)……但是吃一塹才能長一智不是嗎? 字節(jié)跳動2019校招面經(jīng) - 前端開發(fā)崗(一) 1. 介紹以及項目經(jīng)歷 吧啦吧啦……此處省略10000字 面試官...
摘要:年求職面經(jīng)及總結(jié)我的求職之路差不多走到盡頭了感覺真是精疲力盡了把這大半年的經(jīng)歷和面試總結(jié)寫下來希望能給和我一樣在求職路上煎熬的人一點幫助先說背景微電子科學與工程專業(yè)學過兩門和相關的課程語言和單片機這個專業(yè)的唯一好處就是大部分人并不知道這個專 18年求職面經(jīng)及總結(jié) 我的求職之路差不多走到盡頭了,感覺真是精疲力盡了.把這大半年的經(jīng)歷和面試總結(jié)寫下來,希望能給和我一樣在求職路上煎熬的人一點幫...
摘要:年求職面經(jīng)及總結(jié)我的求職之路差不多走到盡頭了感覺真是精疲力盡了把這大半年的經(jīng)歷和面試總結(jié)寫下來希望能給和我一樣在求職路上煎熬的人一點幫助先說背景微電子科學與工程專業(yè)學過兩門和相關的課程語言和單片機這個專業(yè)的唯一好處就是大部分人并不知道這個專 18年求職面經(jīng)及總結(jié) 我的求職之路差不多走到盡頭了,感覺真是精疲力盡了.把這大半年的經(jīng)歷和面試總結(jié)寫下來,希望能給和我一樣在求職路上煎熬的人一點幫...
摘要:拿到秋招的同學,如確定入職需與用人單位簽署三方協(xié)議,以保證雙方的利益不受損失。當然每個崗位所要求的側(cè)重點不同,但卻百變不離其宗。方法論要想達成某個目標都有其特定的方法論,學習技術(shù)也不例外,掌握適當?shù)膶W習方法才能事半功倍。 寫在前面的話 筆者從17年的2月份開始準備春招,其中遇到不少坑,也意識到自己走過的彎路。故寫了這篇文章總結(jié)一番,本文適合主動學習的,對自己要學的課程不明確的,對面試有...
閱讀 3713·2023-04-26 00:56
閱讀 2693·2021-09-30 10:01
閱讀 969·2021-09-22 15:30
閱讀 3926·2021-09-07 10:21
閱讀 1526·2021-09-02 15:40
閱讀 2762·2021-08-30 09:47
閱讀 1246·2021-08-16 10:57
閱讀 1871·2019-08-30 14:01