zoukankan      html  css  js  c++  java
  • 互联网原理

    1互联网原理

    问题:从浏览器输入百度网址,到最终网页的显示,整个过程是什么样?

    浏览器输入网址--->http://www.baidu.com:80 --->域名解析(电脑,路由器,运营商DNS服务器)--->http://202.2.2.2:80,请求包--->百度网关服务器 --->分发给相对应的服务器 ----> 程序(Java)处理请求 ---> 请求登录校验,数据库连接和获取。。。--->服务器程序返回(响应头)百度页面(html--- 浏览器解析响应头和html页面,重复请求html页面所需要的资源,发送--->http://202.2.2.2/css/style.css:80--->html渲染页面过程,先根据html渲染出dom树,然后在根据css样式,渲染出样式树,最终完成渲染。

    修改当前主机的域名解析:

    C:WindowsSystem32driversetchost

    修改方式:

    127.0.0.1 www.xxx.com

    127.0.0.1 www.boidu.com

    127.0.0.1 www.taoboo.com

     

    2 HTTP协议详解

    互联网的发展非常迅速,但是万变不离其宗。学习 web 开发,需要我们对互联的交互机制有一定的了解。需要对 web 开发中客户端和服务器的交互机制以及所涉及的规范(HTTP)进行学习。

    HTTP 协议详解

    1、 web 交互的基本流程

     

     

    图片介绍:

    客户端根据用户输入的地址信息请求服务器,服务器在接收到用户的请求后进行处理,然后将处理结果响应给客户端,客户端将响应结果展示给用户。

    专业术语:

    请求:客户端根据用户地址信息将数据发送给服务器的过程

    响应:服务器将请求的处理结果发送给浏览器的过程

    问题:

    客户端也就是浏览器的版本是有很多的,服务器的版本也是有很多的,如何实现不同版本的浏览器和不同版本的服务器之间的数据交互呢?

    HTTP协议中提供了好多状态码,列举我们常用的:

    200 返回正常

    304 服务端资源无变化,可使用缓存资源

    400 请求参数不合法401 未认证

    403 服务端禁止访问该资源

    404 服务端未找到该资源

    500 服务端异常

    解决:

    规范浏览器和服务器的数据交互的格式。

    实现:

    HTTP 协议

    2、 HTTP 的概念和介绍

    概念:

    超文本传输协议(Hyper Text Transfer Protocol 作用:

    规范了浏览器和服务器的数据交互特点:

    简单快速:客户向服务器请求服务时,只需传送请求方法和路径。

    请求方法常用的有 GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快

    灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记。

    无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

    无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。

    缺少状态意味着如果后续处理需要前面的信息, 则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    3 Ajax

    Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript XML),是指一种创建交互式网页应用的网页开发技术。

    整个过程是异步不需要等待服务器返回数据,才执行后面的内容。

    3-1 创建Ajax

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
        </head>
        <body>
            <script type="text/javascript">
                //1创建xhr对象
                var xhr = new XMLHttpRequest()
                
                //2设置发送的服务器的地址和方法
                xhr.open("GET","helloworld.txt")
                
                //3发送
                xhr.send();
                
                //4 xhr状态改变的事件进行监听
                xhr.onreadystatechange = function(){
                    console.log("readyState"+xhr.readyState)
                    console.log("status"+xhr.status)
                    
                    //显示在网页上
                    if(xhr.status==200&&xhr.readyState==4){
                        var h1 = document.createElement("h1")
                        h1.innerHTML = xhr.responseText;
                        document.body.appendChild(h1)
                    }
                }
                /* 返回的结果如下:
                 *                 readyState2
                    index.html:21 status200        状态200表示OK
                    index.html:20 readyState3      响应已经开始
                    index.html:21 status200        
                    index.html:20 readyState4   完全接收到服务器文件,表示已经完成
                    index.html:21 status200
                */
                
                //将AJAX封装成一个方法
                function ajax(){
                    
                }
                
            </script>
        </body>
    </html>

    3-2  封装Ajax

    <html>
    
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
    
        <body>
            <script type="text/javascript">
                //将AJAX封装成一个方法
                function ajax(url,fn) {
                    //创建xhr对象
                    var xhr = new XMLHttpRequest()
    
                    //设置发送的服务器的地址和方法
                    xhr.open("GET", url)
    
                    //发送
                    xhr.send()
    
                    //xhr状态改变的事件进行监听
                    xhr.onreadystatechange = function() {
                        console.log("readyState" + xhr.readyState)
                        console.log("status" + xhr.status)
                        /* 返回的结果如下:
                         *                 readyState2
                            index.html:21 status200        状态200表示OK
                            index.html:20 readyState3      响应已经开始
                            index.html:21 status200        
                            index.html:20 readyState4   完全接收到服务器文件,表示已经完成
                            index.html:21 status200
                        */
    
                        //显示在网页上
                        if(xhr.status == 200 && xhr.readyState == 4) {
                            fn(xhr)
                            /*封装成一个函数fn()
                             * var h1 = document.createElement("h1")
                             * h1.innerHTML = xhr.responseText;
                             * document.body.appendChild(h1)
                             */
                   
    
                        }
                    }
    
                }

    //JSON数据转换成对象,JSON.pause(josn数据)

    ajax("./recommend.json",function(xhr){
                    console.log(xhr)
                    var jsonObj = JSON.parse(xhr.responseText)
                    console.log(jsonObj)//在页面生成得到的对象
                    var arr = jsonObj.list;
                    arr.forEach(function(item,index){
                        var div = document.createElement("div")
                        div.innerHTML = `<h3>${item.title}</h3><p>${item.description}</p><p>${item.author}</p>`
                        document.body.appendChild(div)
                    })
                })

     实例:用聚合数据作一个查找天气的应用

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
        </head>
        <body>
            <input type="text" name="weather" id="weather" value="" placeholder="请输入要查找天气的城市"/>
            <div class="weather">
                
            </div>
            
            <!--用聚合数据作一个查找天气的应用-->
            <script src="js/weather.js" type="text/javascript" charset="utf-8"></script>
            <script type="text/javascript">
                
                var inputSearch = document.querySelector("#weather")
                inputSearch.onkeypress = function(e){
                    if(e.key=="Enter"&&inputSearch.value!=""){
                        var urlHttp = `https://free-api.heweather.net/s6/weather/now?location=${inputSearch.value}&key=c8b18212397748599a7fb0bfa1022b56`
                        ajax(urlHttp,function(xhr){
                            //console.log(xhr)
                            var jsonObj = JSON.parse(xhr.responseText)
                            console.log(jsonObj)
                            var basic = jsonObj.HeWeather6[0].basic
                            console.log(basic)
                            var now = jsonObj.HeWeather6[0].now
                            console.log(now)
                            var update = jsonObj.HeWeather6[0].update
                            console.log(update)
                            
                            var weather = document.querySelector(".weather")
                            weather.innerHTML = `
                            <h1>城市:${basic.location}</h1>
                            <h3>时间:${update.loc}</h3>
                            <h2>温度:${now.tmp}</h2>
                            <h3>体感温度:${now.fl}</h3>
                            <h3>天气状况:${now.cond_txt}</h3>
                            <img src="https://cdn.heweather.com/cond_icon/${now.cond_code}.png"/>
                            <h3>风向:${now.wind_dir}</h3>`
                            
                            //通过地址从后台得到相应
                            var lifestyleUrl = `https://free-api.heweather.net/s6/weather/lifestyle?location=${inputSearch.value}&key=c8b18212397748599a7fb0bfa1022b56`
                            ajax(lifestyleUrl,function(xhr){
                                //console.log(xhr)
                                var jsonObj = JSON.parse(xhr.responseText)
                                console.log(jsonObj)
                                var lifestyle = jsonObj.HeWeather6[0].lifestyle
                                console.log(lifestyle)
                                
                                weather.innerHTML += `
                                <h2>生活指数:${lifestyle[0].brf}</h2>
                                <h3>生活指数详细:${lifestyle[0].txt}</h3>`
                        
                        })
                            
            
                        })
                    
                        
                    
                    }
                }
                
    
            </script>
        </body>
    </html>
  • 相关阅读:
    Jmeter 将正则表达式提取的参数传给全局(跨线程组使用变量)
    pod的状态分析
    前端 -- html介绍和head标签
    Python ----- 线程和进程
    网络编程 ------ 基础
    面向对象相关操作
    面向对象 --- 进阶篇
    python --- 面向对象
    python的模块和包的详细说明
    常用模块------时间模块 , random模块 ,os模块 , sys模块
  • 原文地址:https://www.cnblogs.com/qq308015824/p/11000355.html
Copyright © 2011-2022 走看看