计算机网络篇(前端、HTTP)

全端工程师需知道的计算机网络知识

1、网络篇—http报文详解

1. 分类

  1. 请求报文
  2. 响应报文

2. 报文结构

(一)、请求报文

一个HTTP请求报文由 请求行(request line)、请求头部(header)、空行和请求数据4个部分组成;
  1. 请求行
  • 由请求方法字段、URL字段和HTTP协议字段3个字段组成,它们由空格分隔;
  • 例如,GET /index.html HTTP/1.1。
  • HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
  1. 请求头部
  • 请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。
  • 请求头部通知服务器有关于客户端请求的信息;
  • 经常使用的请求头:html

    1. Accept 设置接受的内容类型Accept: text/plain;
    2. Accept-Charset 设置接受的字符编码:Accept-Charset: utf-8;
    3. Accept-Encoding 设置接受的编码格式:Accept-Encoding: gzip, deflate;
    4. Accept-Language 设置接受的语言:Accept-Language: en-US;
    5. Cache-Control 设置请求响应链上全部的缓存机制必须遵照的指令:Cache-Control: no-cache;
    6. Connection 设置当前链接和hop-by-hop协议请求字段列表的控制选项:Connection: keep-alive;
    7. Content-Length 设置请求体的字节长度:Content-Length: 348;
    8. Content-Type 设置请求体的MIME类型(适用POST和PUT请求):Content-Type: application/x-www-form-urlencoded;
    9. Cookie 设置服务器使用Set-Cookie发送的http cookie:Cookie: $Version=1; Skin=new;;
    10. Host 设置服务器域名和TCP端口号,若是使用的是服务请求标准端口号,端口号能够省略:Host: en.wikipedia.org:8080;
    11. Origin 标识跨域资源请求(请求服务端设置Access-Control-Allow-Origin响应字段):Origin: http://www.example-social-network.com;
    12. Expires 设置响应体的过时时间:Expires: Thu, 01 Dec 1994 16:00:00 GMT;
    13. ETag 特定版本资源的标识符,一般是消息摘要:ETag: "737060cd8c284d8af7ad3082f209582d";
    14. Last-Modified 设置请求对象最后一次的修改日期:Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT;
  1. 空行
  • 最后一个请求头以后是一个空行,发送回车符和换行符,通知服务器如下再也不有请求头。
  1. 请求主体(数据)
  • 请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于须要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

(二)、响应报文

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行、响应正文。
  1. 在响应中惟一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)经过提供一个状态码来讲明所请求的资源状况。
  2. 状态行
  • 格式:服务器HTTP协议的版本 响应状态代码 状态代码的文本描述;
  • 状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:segmentfault

    • 1xx:指示信息--表示请求已接收,继续处理。
    • 2xx:成功--表示请求已被成功接收、理解、接受。
    • 3xx:重定向--要完成请求必须进行更进一步的操做。
    • 4xx:客户端错误--请求有语法错误或请求没法实现。
    • 5xx:服务器端错误--服务器未能实现合法的请求。
  • 常见状态代码:跨域

    • 200 OK :表示请求成功 一切正常
    • 301 Moved Permanently:重定向,客户请求的文档在其余地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL
    • 302 Found:临时重定向,相似于301,但新的URL应该被视为临时性的替代,而不是永久性的。
    • 304 Not Modified:客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还能够继续使用。
    • 400 Bad Request:请求出现语法错误。
    • 403 Forbidden:资源不可用。
    • 404 Not Found:没法找到指定位置的资源。
    • 405 Method Not Allowed:请求方法(GET、POST、HEAD、Delete、PUT、TRACE等)对指定的资源不适用。
    • 500 Internal Server Error:服务器遇到了意料不到的状况,不能完成客户的请求。
    • 501 Not Implemented:服务器不支持实现请求所须要的功能

(三)、关于请求post和get的区别

  1. GET提交,请求的数据会附在URL以后(就是把数据放置在HTTP协议头<request-line>中);
  2. POST提交:把提交的数据放置在是HTTP包的包体<request-body>中;
  3. 传输数据的大小:
  • HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
  • 而在实际开发中存在的限制主要有:浏览器

    • GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其余浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操做系统的支持。所以对于GET提交时,传输数据就会受到URL长度的限制。
    • POST:因为不是经过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

4.安全性:缓存

  • POST的安全性要比GET的安全性高。
  • 经过GET提交数据,用户名和密码将明文出如今URL上,由于
  • (1)登陆页面有可能被浏览器缓存,
  • (2)其余人查看浏览器的历史纪录,那么别人就能够拿到你的帐号和密码了

(四)、http和https

1. HTTP和HTTPS安全

  • HTTP协议一般承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了咱们常说的HTTPS
  • 默认HTTP的端口号为80,HTTPS的端口号为443

2. 为何HTTPS安全服务器

  • 由于网络请求须要中间有不少的服务器路由器的转发。中间的节点均可能篡改信息,而若是使用HTTPS,密钥在你和终点站才有。https之因此比http安全,是由于他利用ssl/tls协议传输。它包含证书,卸载,流量转发,负载均衡,页面适配,浏览器适配,refer传递等。保障了传输过程的安全性

3. 关于Http 2.0cookie

  • HTTP/2引入了“服务端推(server push)”的概念,它容许服务端在客户端须要数据以前就主动地将数据发送到客户端缓存中,从而提升性能。
  • HTTP/2提供更多的加密支持
  • HTTP/2使用多路技术,容许多个消息在一个链接上同时交差。
  • 它增长了头压缩(header compression),所以即便很是小的请求,其请求和响应的header都只会占用很小比例的带宽

4. http缺点:网络

  • 通讯使用明文不加密,内容可能被窃取;
  • 不验证通讯方身份,可能遭到假装;
  • 没法验证报文完整性,可能被篡改。
https是加上加密处理(通常是SSL安全通讯线路)+认证+完整性保护

5. HTTP/2 与 HTTP/1.x 的关键区别并发

  • 二进制协议代替文本协议,更加简洁高效
  • 针对每一个域只使用一个多路复用的链接
  • 压缩头部信息减少开销
  • 容许服务器主动推送应答到客户端的缓存中

(五)、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 服务器端暂时没法处理请求(多是过载或维护)。
    ]

2、网络——其余

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

2. 说说网络分层里七层模型是哪七层

  • 应用层:应用层、表示层、会话层(从上往下)(HTTP、FTP、SMTP、DNS)
  • 传输层(TCP和UDP)
  • 网络层(IP)
  • 物理和数据链路层(以太网)
  • 每一层的做用以下:
  • 物理层:经过媒介传输比特,肯定机械及电气规范(比特Bit)数据链路层:将比特组装成帧和点到点的传递(帧Frame)

    • 网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
    • 传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
    • 会话层:创建、管理和终止会话(会话协议数据单元SPDU)
    • 表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
    • 应用层:容许访问OSI环境的手段(应用协议数据单元APDU)

3. 304缓存的原理

  • 服务器首先产生ETag,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端经过将该记号传回服务器要求服务器验证其(客户端)缓存
  • 304是HTTP状态码,服务器用来标识这个文件没修改,不返回内容,浏览器在接收到个状态码后,会使用浏览器已缓存的文件
  • 客户端请求一个页面(A)。 服务器返回页面A,并在给A加上一个ETag。 客户端展示该页面,并将页面连同ETag一块儿缓存。 客户再次请求页面A,并将上次请求时服务器返回的ETag一块儿传递给服务器。 服务器检查该ETag,并判断出该页面自上次客户端请求以后还未被修改,直接返回响应304(未修改——Not Modified)和一个空的响应体
  • 认识更多--浏览器缓存篇
相关文章
相关标签/搜索