前端复习-网络(4-同源策略-协议)
这篇博客基本上是一段纯文字内容,写的时候我的本意是加深印象,但是越写越头疼,以后我会想办法将其再提炼一下。
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)
。所谓同源是指,域名
,协议
,端口
相同。不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况下,不能读写对方的资源。
简单的来说,浏览器不允许包含在腾讯页面的脚本访问阿里巴巴页面的数据资源,会受到同源策略的限制
url
(资源定位器)的构成
协议://域名(端口号、参数、查询等)
协议:http / https
(https代表着经过了安全处理)
域名: zhidao.baidu.com
端口: 80/ 90 / 3000
等
这里的同源指的是:同协议,同域名和同端口
例如:
这里面只有第一个
与例子同源。
域名是倒着解析的
.com
*域名 baidu.com
(一)二级域名 zhidao.baidu.com
(二)三级域名 www
二级域名前缀 表示万维网维护的 www.baidu.com
属于特殊的三级域名
zhidao.baidu.com 属于 百度自己维护的网络地址
域名的划分
com org net
属于*域名,是在全世界范围内解析的,cn hk
是在一个地区解析的,
如cn
中国 .com
(商业机构);
.net
(从事互联网服务的机构); .org
(非赢利性组织); .com.cn
(国内商业机构); .net.cn
(国内互联网机构); .org.cn
(国内非赢利性组织);
dns 先根据*域名判断网络范围在根据域名查找主机ip地址
前缀就不管了,理论上www开头相当于占位用的 在国外一般不写www 国内风气就是写www
www拓展
最开始,Internet提供的主要服务有万维网(WWW)、文件传输(FTP)、电子邮件(E-mail)、远程登录(Telnet)
等。也就是说,那个时候的www(World Wide Web)是标识这是一个需要你用浏览器来访问的网页服务,而不是需要你用telnet访问的bbs,或者ftp工具访问的文件传输服务。所以那个时候,网站主页的域名前面要用www。
baidu
有多个服务区为他服务。不同的子域名对应处理不同服务的服务器现在,把任务分配到多台服务器,不需要通过子域名来区分了。http://goole.com一个地址背后有多台服务器支持运作,www只是尊重用户习惯,方便用户看。国外其实已经不用写www了。
IP
如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有多个
浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“:80
当你在浏览器里输入一个url发生了什么
简单归纳:(画图)
1.浏览器通过DNS域名解析到服务IP(ping www.baidu.com)
2.客户端(浏览器)通过TCP协议建立到服务器的TCP连接 (三次握手)
3.客户端(浏览器)向web服务器端(HTTP服务器)发送HTTP协议包,请求服务器里的资源文档 (telnet 模拟)
4.服务器向客户端发送HTTP协议应答包
5.客户端和服务器断开(四次挥手),客户端开始解释处理HTML文档
每条内容对应的简单解释
什么是三次握手?
三次握手
1.先Client端发送连接、发送一个请求包(SYN)请求报文。
2.Server端接受连接后回复ACK报文(应答包ACK),并为这次连接分配资源。
3.Client端接收到ACK报文后也向Server端发送ACK报文,并分配资源,这样TCP连接就建立了。
TCP(要求更高)、UDP
什么是四次挥手
1.Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭(Socket),可以继续发送数据。
2.server发送ACK,”告诉Client端,你的请求我收到了,但是我还没准备好,请继续等我的消息”。
wait:这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。
3.当Server端确定数据已发送完成,则向Client端发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。
4.Client端收到FIN报文后,”就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,”就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!