HTTP协议知识点总结

阿里巴巴面试:为什么说HTTP协议是无状态协议?

答:HTTP是无状态协议,是指它不对之前发生过的请求和响应的状态进行保存。也就是说,无法根据之前的状态进行本次的请求处理。

    假设要求登录认证的Web页面本身无法进行状态的管理(不记录已登录的状态),那么每次跳转新页面就要再次登录,或者要再每次请求报文中附加参数来管理登录状态。

    不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。从另一侧面来说,也正是因为HTTP协议本身是非常简单的,所以才会被应用在各种场景里。

    保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了Cookie技术。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

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

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

简化版:HTTP协议是无状态协议,指的是HTTP协议不对之前发生过的请求和响应的状态进行保存。

    HTTP协议的无状态性是有其优点的。首先,因为不需要对之前发生过的请求和响应的状态进行保存,所以减少了对内存资源的消耗。然后,无状态性意味着简单,因为简单,所以被广泛的应用在各种场景里。

    当然,HTTP协议的无状态性也是有缺点的。HTTP协议不对之前发生过的请求和响应的状态进行保存,就导致它无法根据之前的状态进行本次的请求处理。典型的例子就是在登录的时候,由于HTTP协议无法对之前登录的状态进行保存,就导致每次跳转到新页面的时候都要求再次登录。

    保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了Cookie技术。

扫描二维码关注公众号,回复: 1081560 查看本文章

    什么是Cookie技术?

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

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

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


阿里巴巴面试:一个完整的HTTP请求发送成功所经过的过程(越详细越好)。

答:1.浏览器地址栏输入URL:www.baidu.com,浏览器自动默认为http://www.baidu.com:80/,浏览器会自上而下,经过TCP/IP协议栈中的应用层、传输层、网络层、链路层对该URL进行解析。

2.应用层,根据URL,按照HTTP协议规范生成HTTP请求报文,利用DNS(域名解析器)将域名www.baidu.com解析成IP地址。

3.传输层,HTTP请求报文传入传输层,根据URL,确定传输协议采用TCP协议,端口号为80,并将TCP协议、端口号80以标签的形式打在HTTP请求报文上。

4.网络层,HTTP请求报文传入网络层,获取到应用层解析到的IP地址,并将IP地址以标签的形式打在HTTP请求报文上。

5.链路层,HTTP请求报文传入网络层,根据IP地址解析出MAC地址,并将MAC地址以标签的形式打在HTTP请求报文上。至此,HTTP请求报文已具备所要访问服务器的IP地址、MAC地址、端口号以及传输协议TCP。首先,通过TCP协议三次握手建立浏览器客户端与服务器端之间的传输通道,然后将HTTP请求报文发送给服务器。

6.服务器链路层接收到该HTTP请求报文后,至上而下,依次经过链路层、传输层、网络层、应用层,最终应用层获取到HTTP请求报文,并对其进行解析,生成HTTP响应报文,返回给浏览器端。

7.浏览器接收到返回回来的HTTP响应报文信息之后,要对其进行解析处理,并且通过TCP四次握手关闭与服务器之间的连接。(注意:HTTP1.1版本采用连接持久化,即只要任意一端没有明确提出断开连接,则保持TCP连接状态。报文信息中包含首部字段Connection,默认为Connection:keep-alive,当报文信息中的Connection:close时,关闭连接状态)


阿里巴巴面试题:只是通过IP地址,就可以唯一定位互联网上的一台计算机吗?

答:我认为这种说法不准确。对于互联网而言,要想唯一定位一台计算机,同时需要IP地址和MAC地址。但是对于用户而言,只需要知道IP地址就可以唯一定位到计算机了,这是因为,通过IP地址找到对应的MAC地址,这个过程,是计算机内部实现的,用户看不到。

       IP地址是网络节点的地址,MAC地址是计算机网卡的地址。二者是一对一的关系。通过IP地址只能找到网络节点,但可能有多台计算机共用一个网络节点(路由器的功能),只有再通过MAC地址才能唯一确定这台计算机。

       IP地址和MAC地址的关系就好像门牌号和户主身份证号的关系一样。通过门牌号只能找到这套房子,但是这套房子里可能同时住着好几个人(合租),只要再通过户主身份证号才能唯一确定户主这个人。


HTTP/1.1持久连接(持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态)

答:HTTP1.1逐渐停止了对keep-alive连接的支持,用一种名为持久连接的改进型设计取代了它。持久连接的目的与keep-alive连接的目的相同,但工作机制更优一些。

  与HTTP1.0+的keep-alive连接不同,HTTP/1.1持久连接在默认情况下是激活的。除非特别指明,否则HTTP/1.1假定所有连接都是持久的。要在事务处理结束之后将连接关闭,HTTP/1.1应用程序必须向报文中显式地添加一个Connection:close首部。这是与以前的HTTP协议版本很重要的区别,在以前的版本中,keep-alive连接要么是可选的,要么根本就不支持。

  HTTP/1.1客户端假定在收到响应后,除非响应中包含了Connection:close首部,不然HTTP/1.1连接就仍维持在打开状态。但是,客户端和服务端仍然可以随时关闭空闲连接。不发送Connection:close并不意味着服务器承诺永远将连接保持在打开状态。



为了理解HTTP,我们有必要事先了解一下TCP/IP协议族。HTTP协议是TCP/IP协议族内部的一个子集。

TCP/IP到底指的是什么?

答:把与互联网相关联的协议集合起来总称为TCP/IP。也有说法认为,TCP/IP是指TCPIP这两种协议。还有一种说法认为,TCP/IP是在IP协议的通信过程中,使用到的协议族的统称。

TCP/IP协议族可分为几层?分别是哪几层?

答:4层。应用层、传输层、网络层、数据链路层。

介绍一下应用层

答:应用层决定了向用户提供应用服务时通信的活动。

TCP/IP协议族预存了各类通用的应用服务。比如FTP(文件传输协议)DNS(域名系统)服务就是其中两类。

HTTP协议也属于应用层。

介绍一下传输层

答:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。

在传输层由两个性质不同的协议:TCP(传输控制)和UDP(用户数据报协议)。

介绍一下网络层

答:网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。

与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内旋转一条传输路线。

IPInternet Protocol)网际协议位于网络层。IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是IP地址和MAC地址。

IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本上不会更改。

注意:不要把IP协议和IP地址搞混了。


IP地址和MAC地址的区别?

答:本科的时候老师讲到这两个地址的时候说过这样一句话:IP地址就像家里的门牌号,MAC地址就像你的身份证号,只知道MAC地址是无法知道你在什么位置的,除非是有个超大功率的扩音器,世界上所有人都能听到:你在哪?然后你再用着一个扩音器喊:我在这。然后通信才能这样进行。而IP地址呢?不管你人去了哪?总会有个邮件地址,比如北京市海淀区闵庄路87号一样,很容易就会定位到你的位置。

  MAC地址是由网卡决定的,是固定不变的。

介绍一下数据链路层

答:用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、网卡、光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。

HTTP协议属于TCP/IP协议族中的哪一层?

答:应用层。

TCP协议和UDP协议属于TCP/IP协议族中的哪一层?

答:网络层。

IP协议属于TCP/IP协议族中的哪一层?

答:传输层。

 

网卡、光纤等硬件部分属于TCP/IP协议族中的哪一层?

答:数据链路层。

 

根据TCP/IP协议族说明浏览器发送到服务器接收到一个HTTP请求需要哪些步骤

答:1.发送端的应用层发送一个HTTP请求

       2.在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网路层。

       3.在网路层(IP协议),增加作为通信目的地的IP地址后转发给链路层。

       4.链路层将请求发送给接收端服务器。

       5.接收端服务器的链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能真正接收到由发送端发送过来的HTTP请求。

       发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时。每经过一层时会把对应的首部消去。

 

一个完整的http请求所经历的步骤?

答:简洁版:

           TCP三次握手建立连接

           客户端向服务端端发送http请求

           服务端接收http请求,并对其进行处理

           服务端将响应结果返回给客户端

           TCP四次挥手断开连接(如果浏览器或服务器响应头里包含Connection:keep-alive,则不会断开连接)

   详细版:

   浏览器发送一个HTTP请求

    浏览器从请求URL中解析出服务器的主机名,并通过DNS域名解析器将主机名转成服务器的IP地址

   浏览器从请求URL中解析出端口号

   浏览器根据IP地址和端口号建立一条与服务器的TCP连接通道(三次握手)

   浏览器向服务器发送一条HTTP请求报文

   服务器向浏览器回送一条HTTP响应报文

   关闭连接(四次挥手)


HTTP/1.1持久连接(持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态)

答:HTTP1.1逐渐停止了对keep-alive连接的支持,用一种名为持久连接的改进型设计取代了它。持久连接的目的与keep-alive连接的目的相同,但工作机制更优一些。

  与HTTP1.0+的keep-alive连接不同,HTTP/1.1持久连接在默认情况下是激活的。除非特别指明,否则HTTP/1.1假定所有连接都是持久的。要在事务处理结束之后将连接关闭,HTTP/1.1应用程序必须向报文中显式地添加一个Connection:close首部。这是与以前的HTTP协议版本很重要的区别,在以前的版本中,keep-alive连接要么是可选的,要么根本就不支持。

  HTTP/1.1客户端假定在收到响应后,除非响应中包含了Connection:close首部,不然HTTP/1.1连接就仍维持在打开状态。但是,客户端和服务端仍然可以随时关闭空闲连接。不发送Connection:close并不意味着服务器承诺永远将连接保持在打开状态。


DNS服务是和HTTP协议一样位于应用层,它的作用是什么?

答:提供域名到IP地址之间的解析服务。(域名解析)

描述一下TCP协议的三次握手

答:发送端发送一个带SYN标志的数据包给接收端

  接收端返回一个带SYN和ACK标志的数据包给发送端,表示确认信息

  发送端再发送一个带ACK标志的数据包给接收端,表示“握手”结束


描述一下TCP协议的四次挥手

答:1.客户端向服务端发送一个FIN包,用来关闭客户端到服务端之间的数据传送

       2.服务端收到FIN包后,向客户端发送一个带有ACK标志的数据包,表示确认信息

       3.服务端向客户端发送一个FIN包,用来关闭服务端到客户端之间的数据传送

       4.客户端收到FIN包后,向服务端发送一个带有ACK标志的数据包,表示确认信息

“四次挥手”详解:

        假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!


UDPTCP协议都是传输层的通信协议,它们的区别是什么呢?

答:UDP将数据源和目的封装在数据包中,不需要建立连接;每个数据包的大小限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快。

TCP建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。

举例:

UDP:发短信

TCP:打电话

什么是URL?什么是URL?二者有什么关系?

答:URL,统一资源定位符。URI,统一资源标识符。URLURI的子集。

网络7层模型指哪7层?

答:应用层、表示层、会话层、网络层、传输层、链路层、物理层。

我们通常说交换机,它属于网络7层中的哪一层的设备呢?

答:属于链路层。

7层模型中的哪一层将计算机能识别的数据转成了人能识别的数据?

答:表现层。

网络编程三要素:IP地址、端口、协议(TCP/IPUDP)。

其中:IP地址属于网络层,端口和协议属于传输层。

什么是IP地址?由什么组成?分几类?

答:IP地址是网络中计算机的唯一标识。IP地址由网络号段主机号段组成。分5类,分别是A类、B类、C类、D类、E类。

Window操作系统中,查询本机的IP地址,假如通过Doc命令的方式,用什么命令可以查?

答:ipconfig

什么是端口?有效端口的范围是多少?

答:端口是正在运行的应用程序的标识。有效端口的范围是0~65535

1. 什么是http协议?

答:http协议,即超文本传输协议,是浏览器客户端和服务器端之间数据传输的格式规范。

2. HTTP协议发送请求的方式有哪些?

答:GETPOSTDELETEHEADTRACE等,最常用的就是GETPOST

3. GETPOST的区别?

答:GET:提交的参数信息会显示在地址栏中,不安全,且提交的数据大小限制在1KB之内,不支持中文。

POST:提交的参数信息不会显示在地址栏中,而是显示在请求实体中,较安全,且提交的数据大小没有任何限制,支持中文。


报文包括请求报文和响应报文,报文包括报文起始行、报文首部、报文实体。这里着重说一下报文首部。


HTTP首部可以分为以下几类。

答:通用首部:Connection、Date等

       请求首部:Host、Accept、Cookie等

       响应首部:Server、Set-Cookie等

       实体首部:Location、Content-Type、Content-Length等

       扩展首部:扩展首部是非标准的首部,由应用程序开发者创建,但还未添加到已批准的HTTP规范中去

4. 请求报文包括哪些部分?

答:请求行、请求头(请求首部)、请求体。

5. 请求行包括哪些部分?

答:请求方式(GET/POST)、请求资源路径(URI)、HTTP协议版本(HTTP1.1)。

6. 请求头信息是以键值对的形式存放的?常见的请求头首部(key)有哪些?

答:Host(当前请求访问的目标地址,包括域名:端口号)、Accept(浏览器可接收的数据类型)、Date请求发出的时间)、CookieCookie信息)、Connection(浏览器与服务器的连接状态,默认为keep-alive)等。

Accept: text/html,image/*      -- 浏览器可接受的数据类型

Accept-Charset: ISO-8859-1     -- 浏览器可接受的编码格式

Accept-Encoding: gzip,compress  --浏览器可接受的数据压缩格式

Accept-Language: en-us,zh-       --浏览器可接受的语言

Host: www.it315.org:80          --(必须的)当前请求访问的目标地址(主机:端口)

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  --浏览器最后的缓存时间

Referer: http://www.it315.org/index.jsp      -- 当前请求来自于哪里

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  --浏览器类型

Cookie:name=eric                  -- 浏览器保存的cookie信息

Connection: close/Keep-Alive        -- 浏览器跟服务器的连接状态。close: 连接关闭  keep-alive:保存连接(默认)。

Date: Tue, 11 Jul 2000 18:23:51 GMT     -- 请求发出的时间

7. 请求体中存放的是什么?

答:参数信息。只有POST请求方式的参数信息会存放到请求体中。

8. 响应报文包括哪些部分?

答:响应行、响应头(响应首部)、响应体。

9. 响应行包括哪些部分?

答:HTTP协议版本号、状态码、状态描述。

10. 响应头包含哪些信息?

答:Location(重定向地址)Server(服务器类型)、Content-Type(表示服务器传给浏览器的数据的类型)、Content-Length(表示服务器传给浏览器的数据的长度)、Connection(浏览器与服务器的连接状态,默认为keep-alive)等Set-CookieCookie信息)等

Location: http://www.it315.org/index.jsp   -表示重定向的地址,该头和302的状态码一起使用。

Server:apache tomcat                 ---表示服务器的类型

Content-Encoding: gzip                 -- 表示服务器发送给浏览器的数据压缩类型

Content-Length: 80                    --表示服务器发送给浏览器的数据长度

Content-Language: zh-cn               --表示服务器支持的语言

Content-Type: text/html; charset=GB2312   --表示服务器发送给浏览器的数据类型及内容编码

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  --表示服务器资源的最后修改时间

Refresh: 1;url=http://www.it315.org     --表示定时刷新

Content-Disposition: attachment; filename=aaa.zip --表示告诉浏览器以下载方式打开资源(下载文件时用到)

Transfer-Encoding: chunked

Set-Cookie:SS=Q0=5Lb_nQ; path=/search   --表示服务器发送给浏览器的cookie信息(会话管理用到)

Expires: -1                           --表示通知浏览器不进行缓存

Cache-Control: no-cache

Pragma: no-cache

Connection: close/Keep-Alive           --表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接


11.常见的状态码有哪些?分别代指什么意思?

答:200:成功

  302:重定向

  404:找不到

  500:服务器错误


12.为什么说HTTP协议是不保存状态的协议?

答:HTTP是一种不保存状态的协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。但为了实现期望的保持状态功能,于是引入了Cookie技术。

 

13.HTTP协议有哪些缺点?

答:通信使用明文(不加密),内容可能会被窃听

  不验证通信方的身份,因此有可能遭遇伪装

  无法证明报文的完整性,所以有可能已遭篡改

 

14.解决HTTP中加密处理防止被窃听的方式有哪些?

答:通信的加密(HTTPS)和内容的加密(还有风险)。

 

15.针对HTTP协议的以上缺点,我们可以怎么做?

答:用HTTPS协议来解决。


16.谈谈你对HTTPS的理解?

答:HTTPS协议就是HTTP协议+SSL,是HTTP协议的安全版本。可以这样理解:HTTP是TCP/IP协议栈的最顶层,其安全版本HTTPS就是在HTTP和TCP之间插入了一个(SSL)密码加密层。

猜你喜欢

转载自blog.csdn.net/lz1170063911/article/details/80025879