HTTP跨域、HTTP状态码、HTTP请求⽅式、CS和BS模式
1.跨域基本概念
   只要协议、域名、端⼝有任何⼀个不同,都被当作是不同的域。
   由于浏览器的同源策略,其限制之⼀是不能通过ajax的⽅法请求不同源的⽂档。第⼆个限制是浏览器中不同域的框架(iframe)间是不能进⾏js的交互操作的。
2.跨域⽅式有哪些
   1.通过document.domain跨域
     修改document.domain的⽅式只适⽤于不同⼦域的框架间的交互。
   2.通过location.hash跨域
     因为⽗窗⼝可以对iframe进⾏URL读写,iframe也可以读写⽗窗⼝的URL,URL有⼀部分被称为hash,就是#号及其后⾯的字符,它⼀般⽤于浏览器锚点定位,Server端并不关⼼这部分,应该说HTTP请求过程中不会携带hash,所以这部分的修改不会产⽣HTTP请求,但是会产⽣浏览器历史记录。
     此⽅法的原理就是改变URL的hash部分来进⾏双向通信。每个window通过改变其他 window的location来发送消息(由于两个页⾯不在同⼀个域下IE、Chrome不允许修改parent.location.hash的值,所以要借助于⽗窗⼝域名下的⼀个代理iframe),并通过监听⾃⼰的URL的变化来接收消息。
     这个⽅式的通信会造成⼀些不必要的浏览器历史记录,⽽且有些浏览器不⽀持onhashchange事件,需要轮询来获知URL的改变,最后,这样做也存在缺点,诸如数据直接暴露在了url中,数据容量和类型都有限等。
   3.通过HTML5的postMessage⽅法跨域
     ⾼级浏览器Internet Explorer 8+, chrome,Firefox , Opera 和 Safari 都将⽀持这个功能。
     这个功能主要包括接受信息的"message"事件和发送消息的"postMessage"⽅法。⽐如damonare域的A页⾯通过iframe嵌⼊了⼀个google域的B页⾯,可以通过以下⽅法实现A和B的通信
   4.通过jsonp跨域
     以上⼏种都是双向通信的,即两个iframe,页⾯与iframe或是页⾯与页⾯之间的。
     通过script标签引⼊的js是不受同源策略的限制的。所以我们可以通过script标签引⼊⼀个js或者是⼀个其他后缀形式(如php,jsp 等)的⽂件,此⽂件返回⼀个js函数的调⽤。
      JSONP的优缺点:
          优点:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古⽼的浏览器中都可以运⾏,不需要XMLHttpRequest或ActiveX的⽀持;并且在请求完毕后可以通过调⽤callback的⽅式回传结果。
          缺点:它只⽀持GET请求⽽不⽀持POST等其它类型的HTTP请求;它只⽀持跨域HTTP请求这种情况,不能解决不同域的两个页⾯之间如何进⾏JavaScript调⽤的问题。 
   5.通过CORS跨域
     CORS(Cross-Origin Resource Sharing)跨域资源共享,定义了必须在访问跨域资源时,浏览器与服务器应该如何沟通。CORS背后的基本思想就是使⽤⾃定义的HTTP头部让浏览器与服务器进⾏沟通,从⽽决定请求或响应是应该成功还是失败。⽬前,所有浏览器都⽀持该功能,IE浏览器不能低于IE10。整个CORS通信过程,都是浏览器⾃动完成,不需要⽤户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全⼀样。浏览器⼀旦发现AJAX请求跨源,就会⾃动添加⼀些附加的头信息,有时还会多出⼀次附加的请求,但⽤户不会有感觉。   
     CORS与JSONP的对⽐:
        JSONP只能实现GET请求,⽽CORS⽀持所有类型的HTTP请求。
        使⽤CORS,开发者可以使⽤普通的XMLHttpRequest发起请求和获得数据,⽐起JSONP有更好的错误处理。
        JSONP主要被⽼的浏览器⽀持,它们往往不⽀持CORS,⽽绝⼤多数现代浏览器都已经⽀持了CORS
3.后端修改请求头,实现cros跨域时,在发送post请求之前会先发送什么
     第⼀次是OPTIONS请求⽅式, 第⼆次才是正常的POST
     OPTIONS就是相当于在正式请求接⼝之前去获取以下header, 就是所设置的那些header. 如果在这次OPTIONS请求中服务器有返回正确的header, 这时才会执⾏后⾯真正的请求; 否则请求将会被拒绝, 并抛出错误.
4.常见HTTP状态码(HTTP状态码是服务器和客户端之间交流信息的语⾔)   
    1XX系列
    指定客户端应相应的某些动作,代表请求已被接受,需要继续处理。由于在HTTP/1.0协议中没有定义任何1xx状态码,所以除⾮在某些试验条件下,服务器禁⽌向此类客户端发送 1xx 响应。
    2XX系列
    200状态码
    表⽰请求已成功,请求所希望的响应头或数据体将随此响应返回。
    201状态码
    表⽰请求成功并且服务器创建了新的资源,且其URI已经随Location头信息返回。假如需要的资源⽆法及时建⽴的话,应当返回【202 Accepted】。
    202状态码
    服务器已接受请求,但尚未处理。
    3XX系列
    代表需要客户端采取进⼀步的操作才能完成请求,这些状态码⽤来重定向,后续的请求地址(重定向⽬
标)在本次响应的Location域中指明。这系列中最常见的有301、302状态码。
    301状态码
    被请求的资源已永久移动到新位置。服务器返回此响应(对GET或HEAD请求的响应)时,会⾃动将请求者转到新位置。
    302状态码
    304状态码
    ⾃从上次请求后,请求的⽹页未修改过。服务器返回此响应时,不会返回⽹页内容。如果⽹页⾃请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为If-Modified-Since HTTP标头)。
    4XX系列
    表⽰请求错误。代表了客户端看起来可能发⽣了错误,妨碍了服务器的处理。常见有:401、404状态码。
    401状态码
    请求要求⾝份验证。对于需要登录的⽹页,服务器可能返回此响应。
    403状态码
    服务器已经理解请求,但是拒绝执⾏它。与401响应不同的是,⾝份验证并不能提供任何帮助,⽽且这个请求也不应该被重复提交。
    404状态码
    请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉⽤户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使⽤410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可⽤,⽽且没有任何可以跳转的地址。404这个状态码被⼴泛应⽤于当服务器不想揭⽰到底为何请求被拒绝或者没有其他适合的响应可⽤的情况下。
    5xx系列
    代表了服务器在处理请求的过程中有错误或者异常状态发⽣,也有可能是服务器意识到以当前的软硬件资源⽆法完成对请求的处理。常见有500、503状态码。
    500状态码
    服务器遇到了⼀个未曾预料的状况,导致了它⽆法完成对请求的处理。⼀般来说,这个问题都会在服务器的程序码出错时出现。
    503状态码
    由于临时的服务器维护或者过载,服务器当前⽆法处理请求。通常,这个是暂时状态,⼀段时间会恢复。
    504状态码
    504错误代表⽹关超时 (Gateway timeout),是指服务器作为⽹关或代理,但是没有及时从上游服务器收到请求。
5.从浏览器输⼊地址到页⾯渲染完成之间发⽣了什么   
    1.DNS解析:将域名地址解析为IP地址;
    2.TCP连接:TCP三次握⼿
      -第⼀次握⼿,由浏览器发起,告诉服务器我要发送请求了;
      -第⼆次握⼿,由服务器发起,告诉浏览器我准备接收了;
      -第三次握⼿,有浏览器发起,告诉服务器,我即将发送;
    3.发送请求;(请求报⽂)
    4.接受响应;(响应报⽂)
    5.渲染页⾯
      -浏览器⽤响应的解析器解析HTML、CSS、JS⽂件
    6断开连接:TCP四次挥⼿
      -第⼀次挥⼿:由浏览器发起,告诉服务器请求报⽂发送完了,准备关闭;
      -第⼆次挥⼿:由服务器发起,告诉浏览器请求报⽂接收完了,准备关闭;
      -第三次挥⼿:由服务器发起,告诉浏览器响应报⽂发送完了,准备关闭;
      -第四次挥⼿:由浏览器发起,告诉服务器响应报⽂接收完了,准备关闭。
6.http请求⽅式(8种)
    HTTP/1.1协议中共定义了⼋种⽅法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作⽅式
    HTTP1.0定义了三种请求⽅法: GET, POST 和 HEAD⽅法。
    HTTP1.1新增了五种请求⽅法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT ⽅法 
    1、OPTIONS
      返回服务器针对特定资源所⽀持的HTTP请求⽅法,也可以利⽤向web服务器发送‘*’的请求来测试服务器的功能性
    2、HEAD
      向服务器索取与GET请求相⼀致的响应,只不过响应体将不会被返回。这⼀⽅法可以再不必传输整个响应内容的情况下,就可以获取包含在响应⼩消息头中的元信息。
    3、GET
      向特定的资源发出请求。注意:GET⽅法不应当被⽤于产⽣“副作⽤”的操作中,例如在Web Application中,其中⼀个原因是GET可能会被⽹络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url
    4、POST
      向指定资源提交数据进⾏处理请求(例如提交表单或者上传⽂件)。数据被包含在请求体中。POST请求可能会导致新的资源的建⽴和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
    5、PUT
      向指定资源位置上传其最新内容
    6、DELETE
      请求服务器删除Request-URL所标识的资源
    7、TRACEhtml5标签区分大小写
      回显服务器收到的请求,主要⽤于测试或诊断
    8、CONNECT
      HTTP/1.1协议中预留给能够将连接改为管道⽅式的代理服务器。
    注意:
      1)⽅法名称是区分⼤⼩写的,当某个请求所针对的资源不⽀持对应的请求⽅法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不⽀持对应的请求⽅法时,应返回状态码501(Not Implemented)。
      2)HTTP服务器⾄少应该实现GET和HEAD/POST⽅法,其他⽅法都是可选的,此外除上述⽅法,特定的HTTP服务器⽀持扩展⾃定义的⽅法。   
  请求响应步骤:
    客户端连接到Web服务器->发送Http请求->服务器接受请求并返回HTTP响应->释放连接TCP连接->客户端浏览器解析HTML内容 
  http是超⽂本传输协议,默认端⼝号为80,客户端是动态的,浏览器会⾃动默认为80
  https默认端⼝号为443
7.简述C/S和B/S模式的区别 
    C / S 也称为客户端/服务器模式。服务器通常使⽤⾼性能PC,⼯作站或⼩型计算机,并使⽤⼤型数据库系统,如
Oracle,Sybase,Informix或SQL Server。客户端需要安装专⽤的客户端软件。
    B / S 是Brower / Server的缩写。客户端只需要安装浏览器,例如Netscape Navigator或Internet Explorer。服务器安装
Oracle,Sybase,Informix或SQL Server等数据库。浏览器通过Web服务器与数据库交互。
  不同的硬件环境:   
    C / S ⼀般建⽴在专⽤⽹络,⼩范围的⽹络环境中,然后通过专⽤LAN服务器提供连接和数据交换服务。
B / S 建⽴在WAN上。它不必是专⽤的⽹络硬件环境。例如,它连接到互联⽹,租⽤设备。信息由其⾃⾝管理。适应范围⽐
C / S更强。通常,只要有操作系统和浏览器。
  不同的安全要求:   
    C / S 通常⾯向相对固定的⽤户组,并且对信息安全具有很强的控制⼒。通常,⾼度机密的信息系统采⽤C / S结构。它可以通过B / S部分发布。
    B / S 建⽴在WAN上,其安全控制能⼒相对较弱,并且是⼀个不可知的⽤户组。
  不同的程序架构:   
    C / S 程序可以更加注重进程,可以检查多级权限,并可以较少考虑系统的运⾏速度。
B / S 对安全性和访问速度的多重考虑是基于对更多优化的需求。从MS的.Net系列开始,具有⽐
C / S更⾼要求的程序架构是⼀种发展趋势。 BizTalk 2000 Exchange 2000等,完全⽀持⽹络组件构建系统。 SUN和IBM推出JavaBean组件技术等,使B / S更加成熟。
  软件重⽤是不同的:
    C / S 程序不可避免地被视为⼀个整体,并且组件的可重⽤性不如B / S要求下的组件的可重⽤性。
    B / S 对的多重结构需要相对独⽴的组件功能。它可以相对较好地重复使⽤。购买的桌⼦可以重复使
⽤,⽽不是墙上的⽯桌。
8.HTTP协议、TCP协议、IP协议分别在应⽤层,传输层,⽹络层。
9.http2.0与http1.x相⽐有哪些优化/http发展历程 
    1.新的⼆进制格式(Binary Format)
      HTTP1.x的解析是基于⽂本。基于⽂本协议的格式解析存在天然缺陷,⽂本的表现形式有多样性,要做到健壮性考虑的场景必然很多,⼆进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采⽤⼆进制格式,实现⽅便且健壮。
    2.多路复⽤(MultiPlexing)
      即连接共享,即每⼀个request都是是⽤作连接共享机制的。⼀个request对应⼀个id,这样⼀个连接上可以有多个request,每个连接的request可以随机的混杂在⼀起,接收⽅可以根据request的 id将request再归属到各⾃不同的服务端请求⾥⾯。
    3.header压缩
      HTTP1.x的header带有⼤量信息,⽽且每次都要重复发送,HTTP2.0使⽤encoder来减少需要传输的header⼤⼩,通讯双⽅各⾃cache⼀份header fields表,既避免了重复header的传输,⼜减⼩了需要传输的⼤⼩。
    4.服务端推送(server push)
      同SPDY⼀样,HTTP2.0也具有server push功能。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。