HTTP协议和TCP协议

http 常见的状态码有哪些?

什么是 Restful API?

http常见的header 有哪些?

描述一下 http 的缓存机制(重要)

https以及与http的区别

https是如何保证安全的

请描述 TCP 三次握手和四次挥手

HTTP协议的主要特点:

  简单快速:客户端向服务端请求服务时,只需要传送请求方法和路径。由于http协议简单,使得http服务器的程序规模小,因而通信速度很快

  灵活:http允许传输任意类型的数据对象。以Content-Type标记传输的类型。

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

  无状态: 无状态是指协议对于事务处理没有记忆能力。服务器不知道客户端是什么状态。意味着如果后续处理需要前面的信息,则它必须重传。

HTTP报文的组成部分

  请求报文:请求行 请求头 空行 请求体

  响应报文:状态行 响应头 空行 响应体

HTTP方法:

  GET:获取资源

  POST:传输资源

  PUT:更新资源

  DELETE :删除资源

  HEAD:获得报文首部

POST和GET的区别:

  1. GET在浏览器回退时不会重复提交,而POST会再次提交请求

  2. GET请求会被浏览器主动缓存,而POST不会,除非手动设置。

  3. GET请求参数会被完整保留在浏览器历史里,而POST中的参数不会被保留

  4. GET请求在URL中传送的参数是有长度限制的,而POST没有限制

  5. GET参数通过URL传递,POST放在Request body 中。

HTTP状态码:

  1xx:  服务器收到请求(这个我们前端不常用)

  2xx:  请求成功

    200: 客户端请求成功

  3xx:  重定向

    301:永久重定向(配合location,浏览器自动处理。新的地址返回在resoponse Headers 中Location),下次再访问时,请求会用新的地址

    302: 临时重定向(配合location,浏览器自动处理。临时的地址返回在resoponse Headers 中Location中),下次访问还是请求的老地址

      eg: 网址 输入https://www.liaoxuefeng.com/wiki/1022910821149312回车后,显示的页面地址 是 :https://liaoxuefeng.com/books/javascript/introduction/index.html

   

Location 返回的地址就是新的地址

    304:资源末被修改,使用浏览器的缓存

  4xx: 客户端错误

    403: 没有权限

    404: 资源未找到

  5xx: 服务器错误

    500: 服务器错误

    504: 网关超时

什么是 Restful-API?

  1. 先看一下请求方法methods 有哪些:

    • 传统的methods
      • get 获取服务器的数据
      • post 向服务器提交数据
      • 简单的网页功能,就这两个操作
    • 现在的methods
      • get 获取数据
      • post 新建数据
      • patch/put 更新数据
      • delete 删除数据    

  2、什么是Restful API

      RestfulAPI 是一种新的API设计方式(早已推广使用),与传统的API 设计的区别:

      • 传统API 设计: 把每个url当作一个功能
      • Restful API设计: 把每个URL当作一个唯一的资源(或者说唯一的标识)

      3、如何设计成一个资源(或唯一的标识)?

    1)尽量不使用url参数

       传统API设计: /api/list?pageIndex=2

       RestfulAPI 设计: /api/list/2

    2)用 method 表示操作类型

       传统API设计:

          • 创建博客  post 请求   /api/create-blog
          • 更新博客  post 请求  api/update-blog?id=100
          • 获取博客  get 请求   /api/get-blog?id=100                  

       Restful API设计:

          • 创建博客  post 请求         /api/blog
          • 更新博客  put/patch 请求  /api/blog/100
          • 获取博客  get 请求           /api/blog/100      

http常见的header 有哪些?

  常见的Request Headers

      • Accept      浏览器可接受的数据格式.如:text/html;
      • Accept-Encoding    浏览器可接收的压缩算法,如:gzip
      • Accept-Language   浏览器可接收的语言。如:zh-CN
      • Connection:  keep-alive 一次TCP连接重复使用
      • Cookie
      • User-Agent  浏览器信息
      • Content-Type 发送数据格式 如: application/json     

  常见的 Response Headers

      • Content-Type 返回数据格式。如:application/json
      • Conent-Length 返回数据的大小,多少字节
      • Content-Encoding 返回数据的压缩算法。如: gzip
      • Set-Cookie.  服务端向客户端设置cookie 

  缓存相关的 headers 

      • Cache-Control: Expires
      • Last-Modified :  If-Modified-Since
      • Etag: If-None-Match       

  自定义header 

    headers:{ 'xxx':'xxx'} 

http缓存机制

  1.什么是http缓存

    http缓存指的是:当浏览器(客户端)向服务器请求资源时,如果该浏览器有要请求的资源的副本,就可以直接从浏览器缓存中获取,而无需再次请求服务器

  2.缓存的目的?哪些资源需要被缓存?

   使用缓存的目的:

      • 减少网络请求
      • 减轻服务器负担,提高了网络性能
      • 加快了网页的加载速度

    通常被缓存的资源有:js、css、img

      3.http缓存策略(强缓存+协商缓存)

    http缓存分为两大类:强缓存和协商缓存

    1) 强缓存(Cache-Control/Expires)

      强缓存由http响应头部字段Cache-Control 或者 Expires控制,Cache-Control 优先级高于Expires

      强制缓存的过程:浏览器初次请求一个资源,服务端返回资源和Cache-Control(如果服务端觉得应该做缓存,则返回一个有效时间,单位s),浏览器会根据Cache-Control 把资源本地缓存。浏览器再次请求的这个资源的时候,会根据Cache-Control的有效时间判断,如果没有过期,则从本地缓存直接获取资源;如果Cache-Control的有效时间过期了,则重新向服务端请求资源,服务端再次返回资源和Cache-Control,浏览器重新本地缓存。

      以一张图来描述强缓存过程:

        

      Expire: 过期时间(这个时间是绝对时间。在http1.1 中Expire 已被Cache-Control代替),如果服务器与客户端时间偏差较大,可能会导致缓存混乱

Expire: Sat, 23 Nov 2024 06:20:47 GMT //表示具体的实效时间

      Cache-Control:可以有五个值

      1. max-age(单位秒),代表缓存最大有效时间(是相对时间,都是客户端时间比较,所以服务器域客户端时间偏差也不会导致问题),当浏览器向服务器发送请求后,在max-age这段时间里浏览器不会再向服务器发送请求 
        Cache-Control: max-age=2000 ; //表示在2000秒内使用强缓存
      2. no-cache:不用强制缓存。可以使用协商缓存
      3. no-store: 即不使用强缓存也不使用协商缓存
      4. private:只能是最终用户(浏览器、电脑、手机)使用缓存,非共享的。
      5. public:表示可以被任何对象缓存(包括中间的路由或者中间代理服务器都可以缓存)

    2)协商缓存

      协商缓存过程:若未命中强缓存,则浏览器会将请求发送至服务器,服务器根据http求头信息Last-Modify/If-Modify-Since 或 Etag/If- None- Match来判断是否命中协商缓存。如果命中,http返回状态码为304,浏览器则从缓存中获取资源;如果未命中,返回资源和标识(Etag或者Last- Modify)。以一张图来描述协商缓存的过程:

      

 

      资源标识:

      • 浏览器在第一次请求资源的时候,服务器会返回的header中加上Last-Modified 和 Etag
      • Last-Modified:资源的最后修改时间,只能精确到秒。如果在1秒以内修改多次,将不能准确标注修改时间。
        • 浏览器再次请求时,请求头部中会包含If-Modified-Since,该值为返回的Last-Modified的值。服务器根据最后修改时间判断是否命中缓存
      • Etag:资源的唯一标识(一个字符串,类似人的指纹)。如果资源被重复生成,而内容不变的情况,Etag也是不变的,所以Etag比Last- Modified更精准一些 
        • 浏览器再次请求时,请求头部中或包含If-None-Match,值为返回的Etag的值。服务器根据这个唯一标识判断是否命中缓存
      • Last-Modified 和 Etag可以一起使用,服务器会优先验证Etag,一致的情况才会对比Last- Modified,最后就定是否返回304     

 

       

    3)http缓存(强制缓存和协商缓存)整个过程

      • 用户发起一个http请求后,浏览器判断本地是否有缓存,如果有缓存,会获取缓存资源header中的Cache-Control(或者Expires)信息是否过期。如果有效则直接从本地返回资源,状态码为200
      • 如果强缓存失效,浏览起会向服务器发起请求资源,同时会附带上标识(If-None-Match、If-Modified-Since),继续判断是否可以协商缓存。
      • 服务器根据请求头的信息的标识进行协商检测,若协商缓存有效直接返回304状态码,浏览器会直接从本地获取资源; 
      • 当协商缓存也失效后,服务器会返回资源

         

    4)强缓存和协商缓存区别:

      • 强缓存优先级高于协商缓存
      • 协商缓存不论命中与否都会发一次请求;强缓存命中则不发请求直接从本地获取
      • 强缓存命中返回200,协商缓存命中返回304
      • Ctrl+F5刷新 会跳过所有缓存;F5刷新会跳过强缓存但会检查协商缓存         

  4. 刷新操作方式对缓存的影响

    • 正常操作: 地址栏输入URl、跳转链接、前进后退
      • 强制缓存有效,协商缓存有效
    • 手动刷新:F5
      • 强制缓存失效,协商缓存有效  
    • 强制刷新ctrl +F5
      • 强制缓存失效,协商缓存失效       

https以及与http的区别

  1.https:

     http传递信息是一名文形式发送内容,这并不安全,而https的出现就是为了解决http不安全的特性

     htps:就是为了保证隐私数据能加密传输,让http 运行在SSL/TLS 加密协议上,即 https= http + SSL/TLS加密,

    通过SSL证书来验证服务器的身份,并为浏览器和服务器之间通信进行加密。

    SSL协议:ssl协议位于 TCP 协议(即传输层通信协议)与 http 协议(即应用层协议)之间

    加密算法:浏览器和服务器在使用SSL协议建立连接时,需要使用加密算法来实现安全通信。加密算法分为对称加密和非对称加密

  2.https与http区别:

    • http 协议的数据是明文传输,不安全;而https使用了SSL/TLS协议进行了加密处理,相对安全   
    • http默认端口是80;而https默认端口是443
    • http建立TCP连接时需要三次握手;而httpsTCP三次握手完成后还需要SSL四次握手。所以https性能方面不如http
    • https 需要SSL,SSL证书需要钱

https加密方式

  https采用的是非对称加密+ 对称加密混合加密方式

   什么是对称加密: 加密和解密使用的密钥都是同一个

   什么是非对称加密:存在两个密钥,一个公钥一个私钥。使用公钥进行加密,服务器使用私钥进行解密

     https采用非对称加密方式解决密钥交换的问题,使用对称加密方式进行数据通信

   证书机构: 为了防止中间人攻击(串改密钥和私钥),采用第三方验证机构(CA验证机构)

    https解析过程:

    

请描述 TCP 三次握手和四次挥手 

  建立连接:

    • 客户端和服务端是通过HTTP协议发送请求,并获取内容
    • 再发送请求之前,需要三次握手建立TCP连接(确保目标机器处于可接受请求的状态)
    • 连接建立完成,然后就开始通过http协议发送请求      

     三次握手:

    • 握手,是建立连接
    • 建立一次TCP连接,需要三次握手过程(客户端和服务端总共需要发送3个包)
      • Client 发包, Server 接收。(服务端确认:客户端的发送能力正常)
      • Server 发包, Client 接收。(客户端确认:服务端的接收能力正常)
      • Client发包, Server 接收。(服务端确认:客户端即将发送数据,我要准备接收)     

     四次挥手:

    • 挥手,是关闭连接
    • 关闭连接,需要四次挥手过程
      • Client 发包, Server 接收(服务端确认:客户端已经请求结束)
      • Server 发包,Client 接收(客户端确认:服务端已经收到,我等待关闭)
      • Server 发包,Client 接收(客户端确认:服务端已经发送完成,可以关闭了)
      • Client 发包, Server 接收(服务端确认: 可以关闭了)     

     整个过程如下图:

 

posted @ 2018-04-03 16:05  yangkangkang  阅读(142)  评论(0编辑  收藏  举报