zoukankan      html  css  js  c++  java
  • 面试题之 HTML && CSS && JavaScript 总结

    小编才疏学浅,若文章、答案有错误之处,欢迎邮件通知小编及时修改,同时也可以面试题投稿。最后祝大家共同进步!

    [HTML && CSS]

    CSS引入的方式有哪些? link和@import的区别是?

    1.使用 LINK标签
    将样式规则写在.css的样式文件中,再以<link>标签引入。

    <link rel=stylesheet type="text/css" href="example.css">
    

    2.使用@import引入
    跟link方法很像,但必须放在<STYLE>...</STYLE>

    <STYLE TYPE="text/css">
    <!--
      @import url(css/example.css);
    -->
    </STYLE>
    

    3.使用STYLE标签
    将样式规则写在<STYLE>...</STYLE>标签之中。

    <STYLE TYPE="text/css">
    <!--
    body {color: #666;background: #f0f0f0;font-size: 12px;}
    td,p {color:#c00;font-size: 12px;}
    -->
    </STYLE>
    

    4.使用STYLE属性
    STYLE属性直接加在个别的元件标签里,<元件(标签) STYLE="性质(属性)1: 设定值1; 性质(属性)2: 设定值2; ...}
    5.使用<span></span>标记引入样式

    <span style="font:12px/20px  #000000;">cnwebshow.com</span>
    

    两者区别:加载顺序的差别。当一个页面被加载的时候,link引用的CSS会同时被加载,而@import引用的CSS会等到页面全部被下载完再被加载。@import可以在css中再次引入其他样式表,比如可以创建一个主样式表,在主样式表中再引入其他的样式表,如:

    main.css
    ———————-
    @import “sub1.css”;
    @import “sub2.css”;
    

    这样做有一个缺点,会对网站服务器产生过多的HTTP请求,以前是一个文件,而现在却是两个或更多文件了,服务器的压力增大,浏览量大的网站还是谨慎使用。

    CSS选择符有哪些?哪些属性可以继承?

    1.id选择器( # myid)
    2.类选择器(.myclassname)
    3.标签选择器(div, h1, p)
    4.相邻选择器(h1 + p)
    5.子选择器(ul > li)
    6.后代选择器(li a)
    7.通配符选择器( * )
    8.属性选择器(a[rel = "external"])
    9.伪类选择器(a: hover, li: nth - child)
    

    可继承的样式: font-size font-family color, UL LI DL DD DT;
    不可继承的样式:border padding margin width height ;

    前端页面由哪三层构成,分别是什么?作用是什么?

    网页分成三个层次,即:结构层、表示层、行为层。
    网页的结构层(structural layer)由 HTML 或 XHTML 之类的标记语言负责创建。标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P 标签表达了这样一种语义:“这是一个文本段。”
    网页的表示层(presentation layer) 由 CSS 负责创建。 CSS 对“如何显示有关内容”的问题做出了回答。
    网页的行为层(behavior layer)负责回答“内容应该如何对事件做出反应”这一问题。这是 Javascript 语言和 DOM 主宰的领域。

    简述一下你对HTML语义化的理解?

    用正确的标签做正确的事情。
    html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
    及时在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的;
    搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
    使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

    HTML5的离线储存怎么使用,工作原理能不能解释一下?

    在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。
    原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。
    如何使用:
    1、页面头部像下面一样加入一个manifest的属性;
    2、在cache.manifest文件的编写离线存储的资源;

        CACHE MANIFEST
        #v0.11
        CACHE:
        js/app.js
        css/style.css
        NETWORK:
        resourse/logo.png
        FALLBACK:
        / /offline.html
    

    3、在离线状态时,操作window.applicationCache进行需求实现。

    浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?

    在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
    离线的情况下,浏览器就直接使用离线存储的资源。

    请描述一下 cookies,sessionStorage 和 localStorage 的区别?

    cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
    cookie数据始终在同源的http请求中携带(即使不需要),会在浏览器和服务器间来回传递。
    sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
    存储大小:
    cookie数据大小不能超过4k。
    sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
    有期时间:
    localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
    sessionStorage 数据在当前浏览器窗口关闭后自动删除。
    cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

    什么是Cookie 隔离?(或者说:请求资源的时候不要让它带cookie怎么做)

    如果静态文件都放在主域名下,那静态文件请求的时候都带有的cookie的数据提交给server的,非常浪费流量,所以不如隔离开。
    因为cookie有域的限制,因此不能跨域提交请求,故使用非主要域名的时候,请求头中就不会带有cookie数据,
    这样可以降低请求头的大小,降低请求时间,从而达到降低整体请求延时的目的。
    同时这种方式不会将cookie传入Web Server,也减少了Web Server对cookie的处理分析环节,提高了webserver的http请求的解析速度。

    iframe有那些缺点?

    iframe会阻塞主页面的Onload事件;
    搜索引擎的检索程序无法解读这种页面,不利于SEO;
    iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
    使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript。
    动态给iframe添加src属性值,这样可以绕开以上两个问题。

    Label的作用是什么?是怎么用的?

    label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。

    <label for="Name">Number:</label>
    <input type=“text“name="Name" id="Name"/>
    <label>Date:<input type="text" name="B"/></label>
    

    HTML5的form如何关闭自动完成功能?

    给不想要提示的 form 或下某个input 设置为 autocomplete=off。

    如何实现浏览器内多个标签页之间的通信? (阿里)

    调用localstorge、cookies等本地存储方式

    页面可见性(Page Visibility)API 可以有哪些用途?

    在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放;

    如何在页面上实现一个圆形的可点击区域?

    1、map+area或者svg
    2、border-radius
    3、纯js实现 需要求一个点在不在圆上简单算法、获取鼠标坐标等等

    网页验证码是干嘛的,是为了解决什么安全问题。

    区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水;
    有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试;

    介绍一下CSS的盒子模型?

    (1)有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;
    (2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border)

    元素竖向的百分比设定是相对于容器的高度吗?

    它们的百分比计算是基于容器的宽度,而不是高度的。

    ::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用。

    在 CSS 中伪类一直用 : 表示,如 :hover, :active 等
伪元素在CSS1中已存在,当时语法是用 : 表示,如 :before 和 :after
后来在CSS3中修订,伪元素用 :: 表示,如 ::before 和 ::after,以此区分伪元素和伪类
由于低版本IE对双冒号不兼容,开发者为了兼容性各浏览器,继续使使用 :after 这种老语法表示伪元素
单冒号(:)用于css3的伪类
双冒号(::)用于css3的伪元素
想让插入的内容出现在其它内容前,使用::before,否者,使用::after;
在代码顺序上,::after生成的内容也比::before生成的内容靠后。
如果按堆栈视角,::after生成的内容会在::before生成的内容之上
::before就是以一个子元素的存在,定义在元素主体内容之前的一个伪元素。并不存在于dom之中,只存在在页面之中。:before 和 :after 这两个伪元素,是在CSS2.1里新出现的。起初,伪元素的前缀使用的是单冒号语法,但随着Web的进化,在CSS3的规范里,伪元素的语法被修改成使用双冒号,成为::before ::after

    怎么让Chrome支持小于12px 的文字?

    p{font-size:8px;}
    .shrink{-webkit-transform:scale(0.8);-o-transform:scale(1);display:inline-block}
    <p><span class="shrink">我是一个小于12PX的字体</span></p>
    

    让页面里的字体变清晰,变细用CSS怎么做?

    (-webkit-font-smoothing: antialiased;)
    

    如果需要手动写动画,你认为最小时间间隔是多久,为什么?

    多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms

    display:inline-block 什么时候会显示间隙?

    移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing

    说几条写JavaScript的基本规范?

    1.不要在同一行声明多个变量。
    2.请使用 =/!来比较true/false或者数值
    3.使用对象字面量替代new Array这种形式
    4.不要使用全局函数。
    5.Switch语句必须带有default分支
    6.函数不应该有时候有返回值,有时候没有返回值。
    7.For循环必须使用大括号
    8.If语句必须使用大括号
    9.for-in循环中的变量 应该使用var关键字明确限定作用域,从而避免作用域污染。

    JavaScript原型,原型链 ? 有什么特点?

    属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。
    关系:instance.constructor.prototype = instance.__proto__
    特点:
    JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。
    当我们需要一个属性的时,Javascript引擎会先看当前对象中是否有这个属性, 如果没有的话,就会查找他的Prototype对象是否有这个属性,如此递推下去,一直检索到 Object 内建对象。

        function Func(){}
        	Func.prototype.name = "Sean";
        	Func.prototype.getInfo = function() {
          		return this.name;
        	}
        var person = new Func();//现在可以参考var person = Object.create(oldObject);
        console.log(person.getInfo());//它拥有了Func的属性和方法
        //"Sean"
        console.log(Func.prototype);
    // Func { name="Sean", getInfo=function()}
    

    JavaScript有几种类型的值?,你能画一下他们的内存图吗?

    栈:原始数据类型(Undefined,Null,Boolean,Number、String)
    堆:引用数据类型(对象、数组和函数)
    两种类型的区别是:存储位置不同;
    原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其
    在栈中的地址,取得地址后从堆中获得实体Stated Clearly Image

    Javascript如何实现继承?

    1、构造继承
    2、原型继承
    3、实例继承
    4、拷贝继承
    原型prototype机制或apply和call方法去实现较简单,建议使用构造函数与原型混合方式。

    function Parent(){
            this.name = 'wang';
        }
        function Child(){
            this.age = 28;
        }
        Child.prototype = new Parent();//继承了Parent,通过原型
        var demo = new Child();
        alert(demo.age);
        alert(demo.name);//得到被继承的属性
    

    javascript创建对象的几种方式?

    javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON;但写法有很多种,也能混合使用。
    1、对象字面量的方式

       	person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
    

    2、用function来模拟无参的构造函数

        	function Person(){}
    var person=new Person();
    //定义一个function,如果使用new"实例化",该function可以看作是一个Class
        	person.name="Mark";
        	person.age="25";
        	person.work=function(){
        		alert(person.name+" hello...");
        	}
       		person.work();
    

    3、用function来模拟参构造函数来实现(用this关键字定义构造的上下文属性)

        function Pet(name,age,hobby){
           this.name=name;//this作用域:当前对象
           this.age=age;
           this.hobby=hobby;
           this.eat=function(){
              alert("我叫"+this.name+",我喜欢"+this.hobby+",是个程序员");
           }
        }
        var maidou =new Pet("麦兜",25,"coding");//实例化、创建对象
        maidou.eat();//调用eat方法
    

    4、用工厂方式来创建(内置对象)

         var wcDog =new Object();
         wcDog.name="旺财";
         wcDog.age=3;
         wcDog.work=function(){
           alert("我是"+wcDog.name+",汪汪汪......");
         }
         wcDog.work();
    

    5、用原型方式来创建

        function Dog(){}
         Dog.prototype.name="旺财";
         Dog.prototype.eat=function(){
         	alert(this.name+"是个吃货");
         }
         var wangcai =new Dog();
         wangcai.eat();
    

    6、用混合方式来创建

        function Car(name,price){
          this.name=name;
          this.price=price; 
        }
        Car.prototype.sell=function(){
           alert("我是"+this.name+",我现在卖"+this.price+"万元");
        }
        var camry =new Car("凯美瑞",27);
    camry.sell(); 
    
    

    Javascript作用链域?

    全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。
    当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找,
    直至全局函数,这种组织形式就是作用域链。

    什么是闭包(closure),为什么要用它?

    闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。
    闭包的特性:
    1.函数内再嵌套函数
    2.内部函数可以引用外层的参数和变量
    3.参数和变量不会被垃圾回收机制回收

    javascript 代码中的"use strict";是什么意思 ? 使用它区别是什么?

    use strict是一种ECMAscript 5 添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,
    使JS编码更加规范化的模式,消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为。
    默认支持的糟糕特性都会被禁用,比如不能用with,也不能在意外的情况下给全局变量赋值;
    全局变量的显示声明,函数必须声明在顶层,不允许在非函数代码块内声明函数,arguments.callee也不允许使用;
    消除代码运行的一些不安全之处,保证代码运行的安全,限制函数中的arguments修改,严格模式下的eval函数的行为和非严格模式的也不相同;
    提高编译器效率,增加运行速度;
    为未来新版本的Javascript标准化做铺垫。

    new操作符具体干了什么呢?

    1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
    2、属性和方法被加入到 this 引用的对象中。
    3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。

    var obj  = {};
    obj.__proto__ = Base.prototype;
    Base.call(obj);
    

    模块化开发怎么做?

    立即执行函数,不暴露私有成员

    var module1 = (function(){
        	var _count = 0;
          var m1 = function(){};
          var m2 = function(){};
          return {m1 : m1,m2 : m2};
        })();
    

    documen.write和 innerHTML的区别

    document.write只能重绘整个页面
    innerHTML可以重绘页面的一部分

    用js实现千位分隔符?

    function commafy(num) {
         	num = num + '';
         	var reg = /(-?d+)(d{3})/;
        	if(reg.test(num)){
         		num = num.replace(reg, '$1,$2');
        	}
        	return num;
    }
    

    页面重构怎么操作?

    网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。也就是说是在不改变UI的情况下,对网站进行优化,在扩展的同时保持一致的UI。
    对于传统的网站来说重构通常是:
    表格(table)布局改为DIV+CSS。
    使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的)。
    对于移动平台的优化,针对于SEO进行优化。
    深层次的网站重构应该考虑的方面。
    减少代码间的耦合,让代码保持弹性。
    严格按规范编写代码,设计可扩展的API。
    代替旧有的框架、语言(如VB),增强用户体验。
    通常来说对于速度的优化也包含在重构中
    压缩JS、CSS、image等前端资源(通常是由服务器来解决)
    程序的性能优化(如数据读写),采用CDN来加速资源加载。
    对于JS DOM的优化,HTTP服务器的文件缓存。

    你有用过哪些前端性能优化的方法?

    (1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
    (2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
    (3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
    (4) 当需要设置的样式很多时设置className而不是直接操作style。
    (5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
    (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
    (7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。
    (8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。
    对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。

    http状态码有那些?分别代表是什么意思?

    简单版

    100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
    200 OK 正常返回信息
    201 Created 请求成功并且服务器创建了新的资源
    202 Accepted 服务器已接受请求,但尚未处理
    301 Moved Permanently 请求的网页已永久移动到新位置。
    302 Found 临时性重定向。
    303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。
    304 Not Modified 自从上次请求后,请求的网页未修改过。
    400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
    401 Unauthorized 请求未授权。
    403 Forbidden 禁止访问。
    404 Not Found 找不到如何与 URI 相匹配的资源。
    500 Internal Server Error 最常见的服务器端错误。
    503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

    完整版

    1**(信息类):表示接收到请求并且继续处理

    100——客户必须继续发出请求
    101——客户要求服务器根据请求转换HTTP协议版本
    

    2**(响应成功):表示动作被成功接收、理解和接受

    200——表明该请求被成功地完成,所请求的资源发送回客户端
    201——提示知道新文件的URL
    202——接受和处理、但处理未完成
    203——返回信息不确定或不完整
    204——请求收到,但返回信息为空
    205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
    206——服务器已经完成了部分用户的GET请求
    

    3**(重定向类):为了完成指定的动作,必须接受进一步处理

    300——请求的资源可在多处得到
    301——本网页被永久性转移到另一个URL
    302——请求的网页被转移到一个新的地址,但客户访问仍继续通过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
    303——建议客户访问其他URL或访问方式
    304——自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,代表上次的文档已经被缓存了,还可以继续使用
    305——请求的资源必须从服务器指定的地址得到
    306——前一版本HTTP中使用的代码,现行版本中不再使用
    307——申明请求的资源临时性删除
    

    4**(客户端错误类):请求包含错误语法或不能正确执行

    400——客户端请求有语法错误,不能被服务器所理解
    401——请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    HTTP 401.1 - 未授权:登录失败
      HTTP 401.2 - 未授权:服务器配置问题导致登录失败
      HTTP 401.3 - ACL 禁止访问资源
      HTTP 401.4 - 未授权:授权被筛选器拒绝
    HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
    402——保留有效ChargeTo头响应
    403——禁止访问,服务器收到请求,但是拒绝提供服务
    HTTP 403.1 禁止访问:禁止可执行访问
      HTTP 403.2 - 禁止访问:禁止读访问
      HTTP 403.3 - 禁止访问:禁止写访问
      HTTP 403.4 - 禁止访问:要求 SSL
      HTTP 403.5 - 禁止访问:要求 SSL 128
      HTTP 403.6 - 禁止访问:IP 地址被拒绝
      HTTP 403.7 - 禁止访问:要求客户证书
      HTTP 403.8 - 禁止访问:禁止站点访问
      HTTP 403.9 - 禁止访问:连接的用户过多
      HTTP 403.10 - 禁止访问:配置无效
      HTTP 403.11 - 禁止访问:密码更改
      HTTP 403.12 - 禁止访问:映射器拒绝访问
      HTTP 403.13 - 禁止访问:客户证书已被吊销
      HTTP 403.15 - 禁止访问:客户访问许可过多
      HTTP 403.16 - 禁止访问:客户证书不可信或者无效
    HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效
    404——一个404错误表明可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。eg:输入了错误的URL
    405——用户在Request-Line字段定义的方法不允许
    406——根据用户发送的Accept拖,请求资源不可访问
    407——类似401,用户必须首先在代理服务器上得到授权
    408——客户端没有在用户指定的饿时间内完成请求
    409——对当前资源状态,请求不能完成
    410——服务器上不再有此资源且无进一步的参考地址
    411——服务器拒绝用户定义的Content-Length属性请求
    412——一个或多个请求头字段在当前请求中错误
    413——请求的资源大于服务器允许的大小
    414——请求的资源URL长于服务器允许的长度
    415——请求资源不支持请求项目格式
    416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
    417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。
    

    5**(服务端错误类):服务器不能正确执行一个正确的请求

    HTTP 500 - 服务器遇到错误,无法完成请求
      HTTP 500.100 - 内部服务器错误 - ASP 错误
      HTTP 500-11 服务器关闭
      HTTP 500-12 应用程序重新启动
      HTTP 500-13 - 服务器太忙
      HTTP 500-14 - 应用程序无效
      HTTP 500-15 - 不允许请求 global.asa
      Error 501 - 未实现
    

    HTTP 502 - 网关错误
    HTTP 503:由于超载或停机维护,服务器目前无法使用,一段时间后可能恢复正常

    一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)

    详细版:
    1、浏览器会开启一个线程来处理这个请求,对 URL 分析判断如果是 http 协议就按照 Web 方式来处理;
    2、调用浏览器内核中的对应方法,比如 WebView 中的 loadUrl 方法;
    3、通过DNS解析获取网址的IP地址,设置 UA 等信息发出第二个GET请求;
    4、进行HTTP协议会话,客户端发送报头(请求报头);
    5、进入到web服务器上的 Web Server,如 Apache、Tomcat、Node.JS 等服务器;
    6、进入部署好的后端应用,如 PHP、Java、JavaScript、Python 等,找到对应的请求处理;
    7、处理结束回馈报头,此处如果浏览器访问过,缓存上有对应资源,会与服务器最后修改时间对比,一致则返回304;
    8、浏览器开始下载html文档(响应报头,状态码200),同时使用缓存;
    9、文档树建立,根据标记请求所需指定MIME类型的文件(比如css、js),同时设置了cookie;
    10、页面开始渲染DOM,JS根据DOM API操作DOM,执行事件绑定等,页面显示完成。

    简洁版:
    浏览器根据请求的URL交给DNS域名解析,找到真实IP,向服务器发起请求;
    服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、JS、CSS、图象等);
    浏览器对加载到的资源(HTML、JS、CSS等)进行语法解析,建立相应的内部数据结构(如HTML的DOM);
    载入解析到的资源文件,渲染页面,完成。

  • 相关阅读:
    20120621第一天_复习与测试\05方法
    20120621第一天_复习与测试
    转义字符符号及对应的含义
    如何判断一个窗体是否打开
    out 和ref 的小结
    20120621第一天_复习与测试\03循环控制
    详解C#break ,continue, return
    往xptable控件中添加数据
    校内网的设计。
    iPhone不再孤独,Palm Pre为伴——互联网的未来在手中。
  • 原文地址:https://www.cnblogs.com/jiaoshou/p/13714964.html
Copyright © 2011-2022 走看看