http面试题

#、http协议


*、http的长连接和短连接是什么?

http超文本传输协议(HyperText Transfer Protocol)。
HTTP协议有HTTP/1.0版本和HTTP/1.1版本。
HTTP1.1默认保持长连接(HTTPpersistentconnection,也翻译为持久连接),数据传输完成了保持TCP连接不断开,等待在同域名下继续用这个通道传输数据;相反的就是短连接。
在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。从HTTP/1.1起,默认使用的是长连接,用以保持连接特性。

*、HTTP1.1版本新特性

    a、默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求
    b、管线化,客户端可以同时发出多个HTTP请求,而不用一个个等待响应
    c、断点续传:实际上就是利用HTTP消息头使用分块传输编码,将实体主体分块传输。

*、HTTP/1.1与HTTP/1.0的区别?

    可扩展性:
(1)HTTP/1.1在消息中增加版本号,用于兼容性判断;
(2)HTTP/1.1增加了OPTIONS方法,它允许客户端获取一个服务器支持的方法列表;
(3)为了与未来的协议规范兼容,HTTP/1.1在请求消息中包含了Upgrade头域,通过该头域,客户端可以让服务器知道它能够支持的其它备用通信协议,服务器可以据此进行协议切换,使用备用协议与客户端进行通信。

    缓存:
在HTTP/1.0中,使用Expire头域来判断资源的fresh或stale,并使用条件请求来判断资源是否仍有效。HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活。

    带宽优化:
(1)HTTP/1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了。例如,客户端只需要显示一个文档的部分内容,又比如下载大文件时需要支持断点续传功能,而不是在发生断连后不得不重新下载完整的包。
(2)HTTP/1.1中在请求消息中引入了range头域,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(PartialContent),它可以防止Cache将响应误以为是完整的一个对象。

    长连接:
(1)HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。此外,由于大多数网页的流量都比较小,一次TCP连接很少能通过slow-start区,不利于提高带宽利用率。
(2)HTTP1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。

    消息传递:
(1)HTTP消息中可以包含任意长度的实体,通常它们使用Content-Length来给出消息结束标志。但是,对于很多动态产生的响应,只能通过缓冲完整的消息来判断消息的大小,但这样做会加大延迟。如果不使用长连接,还可以通过连接关闭的信号来判定一个消息的结束。
(2)HTTP/1.1中引入了Chunkedtransfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。
(3)在HTTP/1.0中,有一个Content-MD5的头域,要计算这个头域需要发送方缓冲完整个消息后才能进行。而HTTP/1.1中,采用chunked分块传递的消息在最后一个块(零长度)结束之后会再传递一个拖尾(trailer),它包含一个或多个头域,这些头域是发送方在传递完所有块之后再计算出值的。发送方会在消息中包含一个Trailer头域告诉接收方这个拖尾的存在。

    Host头域:
(1)在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个IP地址。
(2)HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误,此外,服务器应该接受以绝对路径标记的资源请求。

    错误提示:
(1)HTTP/1.0中只定义了16个状态响应码,对错误或警告的提示不够具体。HTTP/1.1引入了一个Warning头域,增加对错误或警告信息的描述。
(2)此外,在HTTP/1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

*、http常见的状态码有哪些?

    200    OK//客户端请求成功;

    301    Moved Permanently(永久移除),请求的URL已移走。Response中应该包含一个LocationURL,说明资源现在所处的位置;
    302    found重定向;
    303 与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
    304 发送附带条件的请求时,条件不满足时返回,与重定向无关
    307 临时重定向,与302类似,只是强制要求使用POST方法

    400    Bad Request//客户端请求有语法错误,不能被服务器所理解;
    401 请求需要认证
    403    Forbidden//服务器收到请求,但是拒绝提供服务;
    404    Not Found//请求资源不存在,eg:输入了错误的URL;

    500    Internal Server Error//服务器内部错误,服务器发生不可预期的错误;
    503    Server Unavailable//服务器正忙,服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

*、GET和POST的区别是什么?

(1)GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=zhagnsan&password=123456。POST把提交的数据则放置在是HTTP包的包体中。
(2)GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据。其实这样说是错误的,不准确的:“GET方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。
(3)POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义。

*、http中重定向和请求转发的区别是什么?

本质区别:转发是服务器行为,重定向是客户端行为。
重定向特点:两次请求,浏览器地址发生变化,可以访问自己web之外的资源,传输的数据会丢失。
请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的web资源,传输的数据不会丢失。

*、Http与Https的区别:

    HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头
    HTTP 是不安全的,而 HTTPS 是安全的
    HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
    在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
    HTTP 无法加密,而HTTPS 对传输的数据进行加密
    HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书

*、什么是Http协议无状态协议?怎么解决Http协议无状态协议?

无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息。也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“。
可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。

*、常用的HTTP方法有哪些?

    GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
    POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
    PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
    HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
    DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
    OPTIONS:查询相应URI支持的HTTP方法

*、URI和URL的区别?

URI = Universal Resource Identifier 统一资源标志符;
URL = Universal Resource Locator 统一资源定位符;
URN = Universal Resource Name 统一资源名称;
URL是URI的子集。
未完,参考 https://www.cnblogs.com/hust-ghtao/p/4724885.html

*、HTTP请求报文与响应报文格式

    请求报文包含四部分:
        a、请求行:包含请求方法、URI、HTTP版本信息
        b、请求首部字段
        c、请求内容实体
        d、空行
    响应报文包含四部分:
        a、状态行:包含HTTP版本、状态码、状态码的原因短语
        b、响应首部字段
        c、响应内容实体
        d、空行
        

*、常见的首部?

    通用首部字段(请求报文与响应报文都会使用的首部字段)
        Date:创建报文时间
        Connection:连接的管理
        Cache-Control:缓存的控制
        Transfer-Encoding:报文主体的传输编码方式
    请求首部字段(请求报文会使用的首部字段)
        Host:请求资源所在服务器
        Accept:可处理的媒体类型
        Accept-Charset:可接收的字符集
        Accept-Encoding:可接受的内容编码
        Accept-Language:可接受的自然语言
    响应首部字段(响应报文会使用的首部字段)
        Accept-Ranges:可接受的字节范围
        Location:令客户端重新定向到的URI
        Server:HTTP服务器的安装信息
    实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
        Allow:资源可支持的HTTP方法
        Content-Type:实体主类的类型
        Content-Encoding:实体主体适用的编码方式
        Content-Language:实体主体的自然语言
        Content-Length:实体主体的的字节数
        Content-Range:实体主体的位置范围,一般用于发出部分请求时使用

*、HTTPS工作原理

    一、首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;
    二、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密);
    三、消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;
    四、发送给服务端,此时只有服务端(RSA私钥)能解密。
    五、解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。


*、HTTP优化方案?

    TCP复用:TCP连接复用是将多个客户端的HTTP请求复用到一个服务器端TCP连接上,而HTTP复用则是一个客户端的多个HTTP请求通过一个TCP连接进行处理。前者是负载均衡设备的独特功能;而后者是HTTP 1.1协议所支持的新功能,目前被大多数浏览器所支持。
    内容缓存:将经常用到的内容进行缓存起来,那么客户端就可以直接在内存中获取相应的数据了。
    压缩:将文本数据进行压缩,减少带宽
    SSL加速(SSL Acceleration):使用SSL协议对HTTP协议进行加密,在通道内加密并加速
    TCP缓冲:通过采用TCP缓冲技术,可以提高服务器端响应时间和处理效率,减少由于通信链路问题给服务器造成的连接负担

*、TCP三次握手和四次挥手?

    三次握手:
        客户端–发送带有SYN标志的数据包–一次握手–服务端
        服务端–发送带有SYN/ACK标志的数据包–二次握手–客户端
        客户端–发送带有带有ACK标志的数据包–三次握手–服务端
    四次挥手:
        客户端-发送一个FIN,用来关闭客户端到服务器的数据传送
        服务器-收到这个FIN,它发回一个ACK,确认序号为收到的序号加1 。和SYN一样,一个FIN将占用一个序号
        服务器-关闭与客户端的连接,发送一个FIN给客户端
        客户端-发回ACK报文确认,并将确认序号设置为收到序号加1

*、输入url到页面加载都发生了什么事情?

    输入地址
    浏览器查找域名的 IP 地址这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存…
    浏览器向 web 服务器发送一个 HTTP 请求
    服务器的永久重定向响应(从 http://example.com 到 http://www.example.com)
    浏览器跟踪重定向地址
    服务器处理请求
    服务器返回一个 HTTP 响应
    浏览器显示 HTML
    浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)
    浏览器发送异步请求

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值