全网最全的http面试答案

来源:http://www.chinese-glasses.com 作者:Web前端 人气:96 发布时间:2020-04-29
摘要:302是的协议状态码,在版本的时候为了细化302状态码又出来了两个303和307。 编码提升传输速率 HTTP传输数据时既可以按照数据原貌进行传输,也可以在传输过程中通过编码提升传输速率

302是的协议状态码,在版本的时候为了细化302状态码又出来了两个303和307。

编码提升传输速率

HTTP传输数据时既可以按照数据原貌进行传输,也可以在传输过程中通过编码提升传输速率。

通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部

HTTP的缺点

  • 通信使用明文(不加密),内容可以被窃听;
  • 不验证通信方的身份,因此可能遭遇伪装;
  • 无法验证报文的完整性,所以报文有可能被篡改;
image



image

HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值。你可以理解为只发送差异数据,而不是全部发送,从而减少头部的信息量多路复用

HTTP请求报文组成

请求报文是由请求方法,URI,协议版本,可选的请求首部和内容实体构成的。

数字签名就是用CA自带的HASH算法对证书的内容进行HASH得到一个摘要,再用CA的私钥加密,最终组成数字签名。

HTTPS采用混合加密方式

  HTTPS采用共享密钥加密公开密钥加密两者并用的混合加密机制。

在交换密钥(共享密钥)环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

image

举个例子,我们在开发一个博客系统,当我们要创建一篇文章的时候往往用POST ,这个请求的语义是,在articles的资源集合下创建一篇新的文章,如果我们多次提交这个请求会创建多个文章,这是非幂等的。

报文主体和实体主体的差异

  • 报文
      报文是HTTP通信的基本单位,由8位组字节流组成通过HTTP通信传输。
  • 实体
      作为请求或响应的有效载荷数据(补充项)被传输,主要有实体首部实体主题组成
      HTTP报文主体用于传输请求或响应的实体主体。

报文主体和实体主体的差异:通常报文主体等于实体主体,当只有在传输中进行编码操作时,实体主体的内容发生变化时,才导致两者发生差异。

响应首部字段(Response Header Fields):从服务器向客户端响应时使用的字段

首部字段的结构

首部字段名: 字段值

例如,在HTTP首部字段中使用Content_Type这个字段来表示报文主体的类型。

Content_Type: text/html

这个时候就能最大程度保证通信的安全了。

URL和URI

URI(Uniform Resource Idenifier)统一资源标识符。即由某个协议方案标识的资源定位标识符。协议方案是指访问资源所使用的的协议方案名称。使用HTTP协议时,协议方案就是http,此外还有ftp,telnet,file等。

URI用字符串标识某一互联网资源,而URL标识资源的地点(互联网上所处的位置)。可见URL是URI的子集。

200 OK,表示从客户端发来的请求在服务器端被正确处理 ✨201 Created 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立202 Accepted 请求已接受,但是还没执行,不保证完成请求204 No content,表示请求成功,但响应报文不含实体的主体部分206 Partial Content,进行范围请求 ✨

WEB服务器

http的请求报文是什么样的?

请求URI定位资源

当客户端请求访问资源而发起请求时,URI需要将作为请求报文中的请求URI包含在内,可以有以下三种方法指定请求的URI:

  • URI作为完整的请求URI
-**在首部字段host中写明网络域名或IP地址**  
  • 用(星号代替请求的URI)
      除此之外,如果不是访问特定的资源而是对服务器本身发起请求,可以用一个*号来代替URI。

3XX 重定向

证明公开密钥的正确性

  公开密钥加密方式存在一些问题,无法证实公钥真伪.为了解决这个问题,可以使用由数字证书认证机构(CA,certificate authority)和其相关颁发的公钥证书.

image

数字认证机构的公钥为了安全起见,会事先在客户端内部植入常用认证机构的公开密钥。

非对称加密虽然安全性更高,但是带来的问题就是速度很慢,影响性能。

5XX 服务器错误

5XX响应结果表明服务器本身发生错误

  • 500 Internal Sever Error
      500 (服务器内部错误) 服务器遇到错误,无法完成请求.另外也可能是Web应用存在Bug或某些临时的故障。

    image

  • 501 Service Unavaiable
      该状态码表明服务器暂时处于超载或正在进行停机维护,现在无法完成请求。

    image

301 moved permanently,永久性重定向,表示资源已被分配了新的 URL302 found,临时性重定向,表示资源临时被分配了新的 URL ✨303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况307 temporary redirect,临时重定向,和302含义相同

URI的格式

绝对URI的格式如下:

  • 协议方案名
      使用http或https等协议方案名获取访问资源时需要指定协议类型。不区分字母大小写,最后附加一个冒号(:)。
  • 登录信息
      指定用户名和密码作为从服务器端获取资源时必要的登录信息,此项是可选项
  • 服务器地址
      使用绝对URI必须指定待访问的服务器地址。服务器地址可以是域名或IP地址
  • 服务器端口号
      指定服务器连接的端口号,此项也是可选项,若省略则自动使用默认端口号。
  • 带层次的文件路径
      指定服务器上的文件路径来定位特定的资源。
  • 查询字符串
      针对已经指定的文件路径内的资源,可以使用查询字符串传入任意参数,此项可选。
  • 片段标识符
      使用片段标识符通常可标记出以获取资源中的子资源(文档内的某个位置),此项也是可选项

2XX 成功

管线化

管线化就是即不用等待响应亦可直接发送下一个请求。

服务器推送

解决HTTP缺点的HTTPS

  HTTP+加密+认证+完整性保护=HTTPS

image

keep-alive的优点:

2XX

2XX的响应结果表明请求被正常处理

  • 200 OK
      表示从客户端发来的请求在服务器端被正常处理了。

随改状态码一起返回的信息回音方法的不同而发生改变。比如,使用GET方法时,对应请求资源的实体会作为响应返回。而使用HEADER方法时,对应请求资源的实体首部不随报文主体作为响应返回(响应中只返回首部,不返回实体的主体部分)。

  • 204 Not Content
      该状态码代表服务器接受的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。

一般在只需从客户端往服务器发送消息,而对客户端不需要发送新信息内容的情况下使用。

  • 206 Partial Content
      该状态码表示客户端进行了范围请求,而服务器成功执行了这部分GET请求。

响应报文中包含由Content-Range指定范围的指定实体内容。

HTTP的keep-alive是干什么的?

网络基础知识

请求首部字段(Reauest Header Fields):客户端向服务器发送请求的报文时使用的首部

确认访问用户身份的认证

HTTP2中:

HTTP使用的认证方式

  • BASIC认证(基本认证)
      是Web服务器与同喜客户端之间进行的认证方式。

    image

  • DIGES认证(摘要认证)
      为了弥补BASIC不加密的缺点,DIGEST同样适用质询/响应的方式,但不会像BASIC直接发送明文。

    image

因为发送给对方的只是相应摘要以及知讯码产生的计算结果,所以比起BASIC认证,密码泄露的可能性较小。

image

  • SSL客户端认证

SSL客户端认证是借由HTTPS的客户端证书完成的认证方式。凭借客户端整数认证,服务器可确认访问是否来自自己登陆的客户端。

image

SSL客户端采用双因素认证:第一个认证因素的SSL客户端证书用来认证客户端计算机,另一个认证因素的密码则用来确定这是用户本人的行为。

  • From认证(基于表单认证)
      客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证。

(完)

当我们要修改文章的作者时,我们可以直接发送PUT ,这个时候的数据应该是:

HTTP持久连接

为了解决HTTP初始版本中,每进行一次HTTP通信就要断开一次TCP连接,HTTP/1.1和部分HTTP/1.0提出了持久连接,特点是:只要通信双方任意一端没有明确提出断开连接,则继续保持TCP连接状态

持久化连接的好处在于减少了TCP重复连接与断开所造成的开销,减轻了服务器端的负载

HTTP/1.x会在请求和响应中中重复地携带不常改变的、冗长的头部数据,给网络带来额外的负担。

用单台虚拟主机实现多个域名

虚拟主机即物理层面有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。

在相同的IPP地址下,由于虚拟主机可以寄存多个不同的主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名和URI。

{ author:'蔡徐坤', creationDate: '2019-6-12', content: '我写文章像蔡徐坤', id: 820357430}

4XX客户端错误

4XX的响应结果表明客户端是发生错误的原因所致

  • 400 Bad Request
      该状态码表示求情报文中存在语法错误,当错误发生时,需要修改请求的内容后再次发送请求。另外,浏览器会像200 OK一样对待该状态码。

    image

  • 401 Unauthorized
      该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息。另外之前已经进行过1次请求,则表明用户认证失败。

    image

返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate的首部泳衣质询用户信息。当浏览器初次接受到401响应,会弹出认证用的对话窗口。

  • 403 Forbiden
      该状态码表明地请求资源的访问被服务器拒绝了。服务器端没必要给出拒绝的详细理由。

    image

  • 404 Not Found
      该状态码表明服务器上无法找到请求的资源。除此之外,也可以以在服务器端拒绝请求并且不想说明理由时使用。

    image

但是问题来了,如果中间人篡改了证书,那么身份证明是不是就无效了?这个证明就白买了,这个时候需要一个新的技术,数字签名。

HTTPS

响应行响应头空行响应体响应行: 由协议版本,状态码和状态码的原因短语组成,例如HTTP/1.1 200 OK。响应头:响应部首组成响应体:服务器响应的数据聊一聊HTTP的部首有哪些?内容很多,重点看标『✨』内容

4种类型的首部字段

  • 通用首部字段
      请求报文和响应报文都会用到的首部。
image
  • 请求首部字段
      从客户端向服务器端发送请求报文时使用的首部,补充了请求的附加内容,客户端信息,响应内容相关优先级等信息。
image
  • 响应首部字段
      从服务器向客户端返回响应报文时用的首部字段。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
image
  • 实体首部字段
      针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等于实体相关的信息。
image
  • 为Cookie服务的首部字段
      Cookie的工作机制是用户状态识别及管理。虽然没被编入标准化的HTTP/1.1的RFC2616中,但在WEB方面得到了广泛的应用。

Web网站为了管理用户的状态会通过Web浏览器,把一些临时数据写入用户的计算机内,接着当用户访问该Web网站时,可通过通信方式取回之前发放的Cookie。

  Cookie的首部字段如下表:

image

  • Set-Cookie
Set-Cookie: status=enable;expre= Tue,05 july 2011 07:32:26 GMT;path=/;domain.havk.jp;

  Set-Cookie的字段属性:

属性 说明
NAME=VALUE 赋予Cookie的名称和其值(必须项)
expire=DATE Cookie的有效期(若不指明则默认为浏览器关闭之前)
path=PATH 用于限制指定Cookie的发送范围的文档目录(若不制指定默认为文档所在的文件目录)
Domain 指定的域名可做到与结尾匹配一致
Secure 仅在HTTPS安全通信时才发送cookie
HttpOnly 加以限制,使Cooki不能被Javascript脚本访问
  • Cookie
Cookie: status=enable

请求报文有4部分组成:

HTTP的状态码

状态码的的职责是当客户端向服务器发送请求时,描述返回的请求结果,状态码的类别如下表:。

image

  下面介绍比较常用的状态码:

证书中包括:签发者、证书用途、使用者公钥、使用者私钥、使用者的HASH算法、证书到期时间等

HTTP协议基础

服务端可以主动推送,客户端也有权利选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。主动推送也遵守同源策略,服务器不会随便推送第三方资源给客户端。

HTTPS的实质

  HTTP是身披SSL外壳的HTTP
  HTTPS并不是一种新的协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Secure)协议代替。

通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通,SSL是独立于HTTP的协议,所以不光HTTP协议,其它应用层协议如SMTP和Telent都可以和SSL配合使用。

实体首部字段(Entiy Header Fields):针对请求报文和响应报文的实体部分使用首部

HTTP响应报文组成

x响应报文是由协议版本,状态吗(表示请求结果的数字代码),用于解释状态码的原因短语可选的响应首部字段以及实体主体构成

过程比较复杂,我们得先理解两个概念

HTTP是无状态协议

HTTP是一种不保存状态的协议,即无状态协议。HTTP协议自身部队请求和响应之间的通信状态保存,也就是说在HTTP这个级别,协议对于发送过的请求和响应都不做持久化处理。

HTTP的无状态是为了尽快地处理大量食物,确保协议的可伸缩性,但是为了实现期望的保持状态的功能,引入了Cookie技术来保存状态。

Accept 客户端或者代理能够处理的媒体类型 ✨Accept-Encoding 优先可处理的编码格式Accept-Language 优先可处理的自然语言Accept-Charset 优先可以处理的字符集If-Match 比较实体标记(ETage) ✨If-None-Match比较实体标记(ETage)与 If-Match相反 ✨If-Modified-Since比较资源更新时间(Last-Modified)✨If-Unmodified-Since比较资源更新时间(Last-Modified),与 If-Modified-Since相反 ✨If-Rnages 资源未更新时发送实体byte的范围请求Range 实体的字节范围请求 ✨Authorization web的认证信息 ✨Proxy-Authorization 代理服务器要求web认证信息Host 请求资源所在服务器 ✨From 用户的邮箱地址User-Agent 客户端程序信息 ✨Max-Forwrads 最大的逐跳次数TE 传输编码的优先级Referer 请求原始放的urlExpect 期待服务器的特定行为

通信数据转发程序:代理,网关,隧道

  • 代理
      代理是一种具有转发功能的应用程序,它扮演了位于服务器和客户端之间的中间人角色,接受由客户端发送的请求并转发给服务器,同时也接受服务器端返回的响应并转发给客户端。

代理不改变客户端请求的URI,直接将请求转发给前方持有资源实体的源服务器。从源服务器返回的响应通过代理服务器再转发给客户端,在多级代理服务器级联转发时,需要在附加首部字段via标记出经过的主机信息。

使用代理服务器的理由:利用缓存技术减少网络带宽的流量,组织内部针对特定的网站控制,以获取访问日志为主要目的
  代理使用方法的分类:(1)缓存代理;(2)透明代理。

  • 网关
      网关是转发其它服务器通信数据的服务器。

网关的工作机制和代理十分相似,而网关能使通信线路上的服务器提供非HTTP协议服务,使用网关能提高通信的安全能性,可以在客户端与网关之间的通信线路加密以确保连接的安全。

  • 隧道
      隧道是相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序。

隧道可按要求建立起一条与其它服务器通信的线路,届时使用SSL等加密通信手段。隧道的目的是确保客户端与服务器端进行安全的通信。

此时又带来一个问题,中间人问题:

SSL的的缺点

  速度慢:(1)通信慢(2)大量消耗CPU及内存资源导致处理速度慢。

image

HTTP 1.x 中,如果想并发多个请求,必须使用多个 TCP 链接,且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制。

HTTP报文

HTTP报文大致可以分为报文首部报文主体两块。两者由最初出现的空行(CR+LF)来划分。通常并不一定有报文主体。

当别人把他的证书发过来的时候,我再用同样的Hash算法,再次生成消息摘要,然后用CA的公钥对数字签名解密,得到CA创建的消息摘要,两者一比,就知道中间有没有被人篡改了。

HTTP首部

HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

Cache-Control 控制缓存 ✨Connection 连接管理、逐条首部 ✨Upgrade 升级为其他协议via 代理服务器的相关信息Wraning 错误和警告通知Transfor-Encoding 报文主体的传输编码格式 ✨Trailer 报文末端的首部一览Pragma 报文指令Date 创建报文的日期

两种加密方式

  • 对称加密
      加密和解密使用同一个密钥的加密方式成为共享密钥加密,也叫做对称加密。

以共享密钥方式加密时必须要将密钥发送给对方,如果通信被监听密钥可能会落入攻击者之手,那么加密就失去意义。

  • 非对称加密
      加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。

    image

同域名下所有通信都在单个连接上完成。单个连接可以承载任意数量的双向数据流。数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装

使用Cookie管理状态

Cookie技术通过请求和响应报文中写入Cookie信息来控制客户端的状态。

Cookie会根据从服务器端发送的响应报文内的一个叫做Set_Cookie的首部信息,通知客户端保存Cookie。当客户端下次再往该服务器发送请求时,客户端会在请求报文中加入Cookie值后发送出去。

服务器端收到客户端发送过来的Cookie后,回去检查究竟是从哪一个客户端发来的请求信息,然后对比服务器上的记录,最后得到之前的状态信息。

HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。

HTTP方法

HTTP1.1所支持的方法如下:

  • GET:获取资源
      GET方法用来请求访问已被URI识别的资源。指定的资源经过服务器端解析后返回相应内容。

  • POST:传输实体主体
      POST用来传输实体主体,与GET方法很相近,但是POST的主要目的并不是获取响应的主体内容。

  • PUT:传输文件
      PUT方法用来传输文件,要求在请求报文的主体中包含主体中包含文件内容,然后保存到请求的URI指定的位置。

由于HTTP/1.1的PUT方法自身不带任何验证机制,任何人都可以上传文件,存在安全问题,因此一般WEB网站不适用该方法。

  • HEADE:获得报文头部
      HEAD方法和GET方法一样,只是不返回报文主体部分,用于确认URI的有效性以及资源更新日期时间等。

  • DELETE
      DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法安请求URI删除指定的资源。

DELETE方法与PUT方法一样不带验证机制,因此存在安全问题。

  • OPTIONS:询问支持的方法
      OPIONS方法用来查询针对请求URI指定资的资源支持的方法。

  • TRAXE:追踪路径
      TRACE方法是让WEB服务端将之前的请求通信环路回给客户端的方法。

在发送请求时,在Max_Forwards首部字段中填入数值,没经过一个服务器端该数字就减一,当数值刚好为零,就停止传输,最后接收到请求的服务器端则返回状态码200OK的响应。

  • CONNECT:要求用隧道协议代理代理
      CONNECT方法要求在与代理服务器通信时家里隧道,使用隧道协议进行TCP通信。

主要是用SSL和TLS协议把通信内容加密后经网络隧道传输。

那么结合两种加密方式,将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。

3XX重定向

3XX响应结果表明浏览器要执行某些特殊的梳理以正确处理请求。

  • 301 Moved Permanently
      永久重定向。该状态码表示请求的资源已经被重新分配了新的URI,以后应该使用资源现在所指的URI。

    image

  • 302 Found
      临时重定向。该状态码表示请求的资源已经被分配了新的URI,希望用户(本次)能使用新的URI访问。

    image

302和301Moved Permanently状态码相似,但302状态码代表的资源不是被永久的移动,只是临时行的。换句话说,已经移动的资源对应的URI将来还有可能改变。

  • 303 See Other
      该状态码标识由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

    image

303状态码和302 Not Foud状态码有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源。

当301,302,303响应状态返回码时,几乎所有的浏览器都会把POST改成GET,并删除请求报文的主体,之后请求会自动发送。

  • 304 Not Modified
      自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

304状态码返回时,不包含任何响应的主体部分。304被划分在3XX类别中,但是和重定向没有关系。该返回码通常用于请求报文中包含有If-Match,If-Modified-since,If-None-Match,If-Ranage,If-Unmodified-Since的附加请求条件。

  • 307 Tempirary Rediret
      临时重定向。该状态码与302 Found有着相同的含义,但该方法会遵守标准不允许将POST改为POST。

本文由10bet发布于Web前端,转载请注明出处:全网最全的http面试答案

关键词:

上一篇:CSS定位

下一篇:没有了

频道精选

最火资讯