http协议详解

<!-- 一个 http 全过程的问题,把所有HTTP相关知识点都带过一遍 -->
     <!-- http 全过程 -->
     <!-- 
        输入域名(url) -》 DNS映射为IP -》TCP三次握手 -》HTTP响应 -》(浏览器跟踪重定向地址) -》服务器处理请求 -》服务器返回一个html响应 -》(视情况决定释放TCP连接) -》客户端解析HTML -》获取嵌入在HTML中的对象重新发起http请求

      -->
      <!-- 
            同源策略
                同源需满足的条件
                    协议相同
                    域名相同:a.b.c.com 和a.b.d.com域名相同吗?
                    端口相同
                非同源受限的行为:
                    cookie localStorage  indexDB无法获取
                    DOM无法获得
                    ajax请求不能发送
            跨域方法:
                双向跨域:
                    1、降域(二级和以上有共同部分)
                        所谓将于就是寻找到最后面的域名相同的部分留下
                            a.b.c.com
                            d.a.c.com
                            降域后统统改为b.c.com或者c.com
                        存在的问题:
                            安全性,当一个站点被攻击,相同域名的站点也会被攻击
                            重复性,所有需要跨域的都要修改document.domain=‘’
                            ajax不受降域影响,还是需要iframe在一个页面引入另一个页面的形式
                            不可更改性,一旦降域就无法回去
                    2、location.hash
                        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之间的代理,负责监听url变化就修改a的url,a监听到url变化了就做出相应操作

                        b.html
                            try{
                                parent.location.hash='data'
                            }catch(e){
                                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);
                    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 src="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的支持需要服务器和客户端之间的协调
                    4window.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

                        SSL协议提供的安全通道有以下三个特性:
                            机密性:SSL协议使用密钥加密通信数据。
                            可靠性:服务器和客户都会被认证,客户的认证是可选的。
                            完整性:SSL协议会对传送的数据进行完整性检查。


            cookie、sessionStorage、localStorage有什么不同?
                cookie存在客户端,可以发送给服务器,数据大小限制为4k
                seesionStorage,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另一个URL
                    304判断是否要更新缓存 请求头部携带if-modified-slice自从上次更新距这次多久
                    307临时重定向
                4xx:表示客户端错误
                    400客户端语法错误
                    401请求未经授权
                    403服务器拒绝服务
                    404请求资源不存在
                5xx:服务器端错误
                    500不可预期的错误
                    503此时不能提供服务 稍后恢复正常

        释放TCP连接
            header中的connecton:close
                服务器主动关闭TCP,客户端被动关闭连接
            header中的connecton:keeplive
                连接保持一段时间,可以连续发送http请求


        客户端解析HTML
            onload ready区别:
                ready表示文档加载完毕,不包括图片
                onload表示都加载完毕

       -->
       <!-- 
        当输入www.google.com时,页面发生了哪些事情:
            1、域名解析
                域名解析检查顺序为:浏览器自身dns缓存 --》 OS自身的DNS缓存 --》 读取host文件 --》 本地域名服务器 --》 权限域名服务器 --》 根域名服务器。如果有且没有过去,则结束本次域名解析,域名解析成功之后,进行后续操作
            2、tcp 3次握手简历连接
            3、建立连接后,发起http请求
            4、服务器端响应http请求,浏览器得到http请求的内容
            5、浏览器解析html代码,并请求html代码中的资源
            6、浏览器对页面进行渲染,展现在用户面前


        -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值