来一篇通同,一个http全过程的题目,把一切HTTP相干知识点都带过一遍
http全过程
输入域名(url)–>DNS映照为IP–>TCP三次握手–>HTTP要求–>HTTP响应–>(浏览器跟踪重定向地点)–>效劳器处置惩罚要求–>效劳器返回一个html响应–>(视状况决议开释TCP衔接)–>客户端剖析HTML–>猎取嵌入在HTML中的对象从新提议http要求
输入域名(url)
在域名这里有许多能够聊的:
域名级数鉴别
域名效劳器及域名这里有细致诠释,即“计算机网络技术”的第九章Domain Name System
一个点分开一级(域名由重量构成,一级为一个重量),通俗易懂以下:
...三级域名.二级域名.顶级域名
WWW.baidu.com com为顶级域名(一般根据构造和地舆分为两类),baidu为二级域名,WWW网站
www.pic.baidu.com pic为三级域名
所谓降域,如pic.baidu.com/a.txt baidu.com/b.txt中a和b在差别的域下面,都降域为baidu.com..以下细致诠释
同源战略
同源需满足的前提:
协定雷同
域名雷同:a.b.c.com a.b.d.com域名雷同吗
端口雷同
非同源受限定的行动:
cookie localStorage indexDB没法猎取
DOM没法取得
ajax要求不能发送
跨域要领:
双向跨域
1.降域(二级和以上有配合部份)
所谓降域就是寻觅到最背面的域名雷同的部份留下
a.b.c.com
d.b.c.com
降域后一切改成b.c.com或许c.com
存在的题目:
平安性,当一个站点被进击,雷同域名的站点也会被进击
重复性,一切须要跨域的都要修正document.domain=””
ajax不受降域影响,照样须要iframe在一个页面引入另一页面的情势
不可更改性,一旦降域就没法归去
2.location.hash(FIM—fragment itentitier messaging)
a向b传送数据
baidu.com/a.html中的iframe的src="google.com/b.html#paco",b.html监听到 url发生变化触发响应操纵
b向a传送数据
google.com/b.html中隐蔽一个iframe,设置src="baidu.com/proxy.html#data" data为要传输的数据,proxy.html是和a.html同域名下的,是a b之间的代办,担任监听utl变化就修正a的url,a监听到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);
题目:数据暴露在URL中,数据大小花样受限
3.HTML5的postMessage要领
a向b发送数据
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
先看两种用法
<script>
function foo(data){
console.log(data);
}
</script>
<script type="http://www.google.com/getUsers.js?callback=foo"></script>
回调函数
<script src="http://www.google.com/getUsers.php?flag=do&time=1"></script>
参数
题目:只支撑get要求
2.效劳器代办
效劳器没有同源战略,在数据供应方没有jsonp,window.name协定的支撑下,运用效劳器代办。
在baidu.com下设置一个代办proxy即baidu.com/proxy/将ajax绑定到代办下发送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的支撑须要效劳器和客户端之间的谐和
4.window.name
5.webSocket
须要效劳器的支撑,源在白名单
6.Access-Controll-Allow-Origin
http和https协定有什么区分,重点诠释https
http+加密+认证+完整性庇护=https
http:应用层的无状况,超文本传输协定。端口为80
HTTPS:只是http通讯接口部份用SSL和TLS协定替换。http直接和TCP通讯,而HTTPS运用SSL所以是先和SSL通讯,再由SSL和TCP通讯。端口为443
cookie sessionStorage localStorage有什么差别
cookie存储在客户端,能够发送给效劳器,数据大小限定为4K
sessionStorage,localStorage存储在当地,不能够发送给效劳器,数据大小为5M
localStorage只能手动消灭数据
sessionStorage封闭会话窗,数据就被消灭了
HTML5当地存储分为
webStorage(localStorage,sessionStorage)
indexDB
DNS剖析域名为IP
浏览器缓存中找
体系缓存中找
路由器缓存中找
ISP DNS缓存中找
TCP三次握手
client—–>server:SYN(提议一个TCP衔接,同步报文)
server—–>client:SYN+ACK(应对报文,示意已建立衔接)
client—–>server:ACK(应对报文,示意收到已衔接)
四次挥手:
由客户端提议的封闭衔接
* client----->server:FIN(要求封闭衔接)
* server----->client:ACK(收到了衔接,但不会马上封闭,比及报文都发送完再复兴一个FIN)
* server----->client:FIN
* client----->server:ACK(收到封闭)
由效劳端提议的封闭衔接
* 当http设置了keepalive定时封闭,效劳端会在终了数据传送后封闭TCP衔接
http要求
要求行
要求头
空行
要求包体(只要POST要求有包体)
get/post区分
要求参数:get参数附在URL背面?离隔,POST参数放在包体中
大小限定:GET限定为2048字符,post无限定
平安题目:GET参数暴露在URL中,不如POST平安
浏览器历史纪录:GET能够纪录,POST无纪录
缓存:GET可被缓存,post无
书签:GET可被珍藏为书签,post不可
数据类型:GET只能ASCII码,post无限定
http响应
状况行
响应头
响应包体
http状况码
1XX:示意可续发要求
2XX:示意胜利
* 202胜利
* 204胜利 不返回实体主体
* 206胜利 执行了一个局限要求
3XX:示意重定向
* 301永远重定向,增添SEO排名
* 302暂时重定向 制止POST变成GET
* 303别的一个URI
* 304推断是不是要更新缓存 要求头部照顾if-modified-since自从上次更新距此次多久
* 307暂时重定向
4XX:示意客户端毛病
* 400客户端语法毛病
* 401要求未经受权
* 403效劳器拒绝效劳
* 404要求资本不存在
5XX:效劳端毛病
* 500不可预期的毛病
* 503此时不能供应效劳 稍后恢复一般
开释TCP衔接
header中的connecton:close
效劳器主动封闭TCP衔接,客户端被动封闭衔接
header中的connecton:keepalive
衔接坚持一段时间,能够一连发送http要求
客户端剖析HTML
onload ready区分:
ready示意文档加载终了,不包括图片
onload示意都加载终了