Http常用面试知识总结

Http

浏览器输入URL地址后发生的事情、

1、浏览器向DNS服务器查找输入URL对应的IP

2、DNS服务器返回网站的IP地址

3、浏览器根据IP地址与目标web服务器在80端口上建立TCP连接

4、浏览器获取请求页面的HTML代码

5、浏览器在显示窗口内渲染HTML

6、窗口关闭时,浏览器终止与服务器的连接

HTTP连接过程

1.域名解析

2.发起TCP的三次握手

3.Web浏览器向服务器发送http请求命令

4.Web浏览器向服务器发送http请求头信息

5.Web服务器应答

6.Web服务器发送应答头信息

7.服务器向浏览器发送数据

8.服务器关闭TCP连接

HTTP状态码

状态码由3个数字组成,第一个数字定义了响应类别,且有5种可取值:

1XX:指示信息-表示请求已接收,继续处理

100:客户必须继续发出请求

101:客户要求服务器根据请求转换HTTP协议版本

2XX:成功-表示请求已被成功接收、理解、接受

200:成功,服务器已经成功处理了请求,通常,这表示服务器提供了请求网页

201:已创建:请求成功且服务器创建了新的资源

202:已接受,服务器已接受请求,但尚未处理

3XX:重定向,要完成请求必须进行下一步操作

300:多种选择:针对请求,服务器可以执行多种操作,服务器可根据请求者选择一项操作,或提供操作列表供请求者选择

301:永久移动:请求的网页已永久移动到新位置,服务器返回此响应时(对get或head请求),会自动将请求者转到新位置

302:临时移动:服务器目前从不同位置的网页响应请求,但请求者应继续使用原位置来进行以后的请求

4XX:客户端错误-请求有语法错误或请求无法实现

400:错误请求,服务器不理解请求语法

401:未授权,请求者身份验证,对于需要登录的网页,服务器可能返回此响应

403:禁止:服务器拒绝请求

5XX:服务端错误-服务器未能实现合法的请求

500:服务器内部错误:服务器遇到错误,无法完成请求

501:尚未实施:服务器不具备完成请求的功能

502:错误网关:服务器作为网关代理,从上游服务器收到无效响应

503:服务不可用:服务目前无法使用,通常只是暂时状态

504:网关超时:服务器作为网关或代理,但是没有及时从上游服务器收到请求

505:http版本不受支持

常见的HTTP头

Accept:告诉服务器,客户端支持的数据类型

Accept-Charset:告诉服务器,客户端采用的编码

Accept-Encoding:告诉服务器,客户端支持的压缩类型

Accept-Language:告诉服务器,客户端的语言环境

Host:告诉服务器,想要访问的主机名

Date:告诉服务器,当前请求时间

Connection:请求完后是关闭还是保持连接

Cookie:可以向服务器带数据

Referer:告诉服务器,从哪个资源来访问的

请求头部

GET /sample.Jsp HTTP/1.1  //请求行

Host: www.uuid.online/  //请求的目标域名和端口号

Origin: http://localhost:8081/  //请求的来源域名和端口号 (跨域请求时,浏览器会自动带上这个头信息)

Referer: https:/localhost:8081/link?query=xxxxx  //请求资源的完整URI

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 //浏览器信息

Cookie: BAIDUID=FA89F036:FG=1; BD_HOME=1; sugstore=0  //当前域名下的Cookie

Accept: text/html,image/apng  //代表客户端希望接受的数据类型是html或者是png图片类型

Accept-Encoding: gzip, deflate  //代表客户端能支持gzip和deflate格式的压缩

Accept-Language: zh-CN,zh;q=0.9  //代表客户端可以支持语言zh-CN或者zh(值得一提的是q(0~1)是优先级权重的意思,不写默认为1,这里zh-CN是1,zh是0.9)

Connection: keep-alive  //告诉服务器,客户端需要的tcp连接是一个长连接

响应头部

HTTP/1.1 200 OK  // 响应状态行

Date: Mon, 30 Jul 2018 02:50:55 GMT  //服务端发送资源时的服务器时间

Expires: Wed, 31 Dec 1969 23:59:59 GMT //比较过时的一种验证缓存的方式,与浏览器(客户端)的时间比较,超过这个时间就不用缓存(不和服务器进行验证),适合版本比较稳定的网页

Cache-Control:  no-cache  // 现在最多使用的控制缓存的方式,会和服务器进行缓存验证,具体见博文”Cache-Control“

etag: "fb8ba2f80b1d324bb997cbe188f28187-ssl-df"  // 一般是Nginx静态服务器发来的静态文件签名,浏览在没有“Disabled cache”情况下,接收到etag后,同一个url第二次请求就会自动带上“If-None-Match”

Last-Modified: Fri, 27 Jul 2018 11:04:55 GMT //是服务器发来的当前资源最后一次修改的时间,下次请求时,如果服务器上当前资源的修改时间大于这个时间,就返回新的资源内容

Content-Type: text/html; charset=utf-8  //如果返回是流式的数据,我们就必须告诉浏览器这个头,不然浏览器会下载这个页面,同时告诉浏览器是utf8编码,否则可能出现乱码

Content-Encoding: gzip  //告诉客户端,应该采用gzip对资源进行解码

Connection: keep-alive  //告诉客户端服务器的tcp连接也是一个长连接

请求方法

1 GET 请求指定的页面信息,并返回实体主体。

2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头

3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。

5 DELETE 请求服务器删除指定的页面。

6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

7 OPTIONS 允许客户端查看服务器的性能。

8 TRACE 回显服务器收到的请求,主要用于测试或诊断。

9 PATCH 实体中包含一个表,表中说明与该URI所表示的原内容的区别。

10 MOVE 请求服务器将指定的页面移至另一个网络地址。

11 COPY 请求服务器将指定的页面拷贝至另一个网络地址。

12 LINK 请求服务器建立链接关系。

13 UNLINK 断开链接关系。

14 WRAPPED 允许客户端发送经过封装的请求。

15 Extension-mothed 在不改动协议的前提下,可增加另外的方法

Cookie和Session的区别

Cookie:是存储在用户本地计算机上,用于保存一些用户操作的历史信息,当用户再次访问服务器的时候,浏览器通过HTTP协议,将他们的本地cookie内容也发到服务器上,从而完成验证

cookie分为会话cookie和持久cookie,区分方法:持久cookie设置了过期时间,没设置过期时间的就是会话cookie

因为设置了过期时间,当前cookie就存在用户的硬盘中,不是内存中。因为不在内存中,所以关闭浏览器还是重启,只有在有效时间内,这个cookie都可用。

Session:保存在服务器上的用户操作信息。当用户访问服务器,服务器会生成一个Session ID,然后把session id存储起来,再把session id发给用户,用户再次访问服务器时,拿着这个session id

就能验证了,当这个id和服务器上存储的id对应起来,即为验证通过。

Cookid和session的不同;

存储方式不同:Cookie存储在客户端上,session存储在服务器上;

安全性上:cookie存在用户机器上,cookie不安全,但是session也不是绝对安全,有session 劫持,xxs攻击

存储大小不同:由于cookie要跟随请求发送到服务器,所以为了访问速度,cookie的大小不能太大,不然仅仅一个cookie的传递,就把网络搞死了。而session只是在用户和服务器之间传递一个id,

所以存储在服务器上的session大小并没太大限制。

报文组成

请求报文:请求行+请求头部+请求正文

响应报文:状态行+响应头部+响应正文

HTTP/1.1优缺点

优点:

1、增加了持久性连接:也就是多个请求和响应可以利用同一个TCP连接,减少了建立和关闭连接的消耗和延迟:Connection:keep-alive

2、增加了管道机制:请求可以同时发出,但是响应必须按照请求顺序依次返回,性能在一定程度上得到改善。

3、分块传输:在HTTP/1.1版本中,可以不必等待数据完全处理完毕再返回,服务器产生部分数据,那么就发送部分数据,很明显此种方式更好一些,可以节省很多等待时间

4、增加host字段:使得一个服务器可以用来创建多个web站点

5、错误提示:引入了warning头域,增加对错误或者警告信息的描述,此外,在HTTP/1.1版本中增加了24个状态响应码(100 101 203 205 206 301 305...)

6、带宽优化:引入了range头域,允许只请求资源的某个部分

缺点:

1、队头阻塞:此版本的网络延迟问题主要由于队头堵塞导致,虽然通过持久性连接得到改善,但是每一个请求的响应依然需要按照顺序排队,如果前面的响应处理较为耗费时间,那么同样非常耗费性能

2、技术不成熟:虽然引入了管道机制,但是存在诸多问题,且默认是关闭的

3、浪费资源:携带冗余的头信息,浪费带宽

HTTP/2.0

优点:

1、二进制分帧:在应用层和传输层之间增加一个二进制分帧层,从而突破HTTP/1.1的性能限制,改进传输性能,降低延时和提高吞吐量

2、多路复用(连接共享):允许同时通过单一的HTTP/2.0连接发起多重请求-响应消息

3、首部压缩:1.1不支持header数据压缩,2.0使用HPACK算法header数据进行压缩,减小数据体积,提高网络传输。

4、服务器推送:2.0中服务器可以对客户端的一个请求发多个响应,即服务器可以额外的向客户端推送资源,无需客户端明确的请求

HTTPS原理

HTTP通信接口部分用SSL和TSL协议替换

通常HTTP直接和TCP通信,当使用SSL时,演变成先和SSL通信,再由SSL和TCP通信。

模型如下:

HTTP -> HTTP

TCP     SSL

IP      TCP

        IP

在使用了SSL后,HTTP就拥有了HTTPS的加密,证书和完整性保护。

1、客户端发起HTTPS请求;2、服务端配置;3、传送证书;4、客户端解析证书;5、传送加密信息;6、服务端解密信息;7、传输加密后的信息;8、客户端解密信息

HTTP 和 HTTPS 的共同点和区别

https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。

http 是超文本传输协议,信息是明文传输, https 则是具有安全性的ssl加密传输协议。

http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

http 的连接很简单,是无状态的; HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。

跨域

浏览器不能执行其他网站的脚本,是由浏览器的同源策略造成的。

同源策略(SOP):浏览器最核心最基本的安全功能,如果缺少了,浏览器很容易受到XSS,CSFR攻击,所谓同源指的是:“协议+域名+端口”相同

同源策略限制了以下行为:

Cookie、LocalStorage 和 IndexDB 无法读取

DOM 和 JS对象无法获取

Ajax请求发送不出去

解决跨域:

nginx代理、node代理、websocket代理

浏览器强缓存和协商缓存

强缓存(本地缓存):利用头部的expries和cache-control两个字段来控制的,用来表示资源的缓存时间。普通刷新会忽略它,但不会清除它,需要强制刷新,

浏览器强制刷新,请求会带上 Cache-Control:no-cache 和 Pragma:no-cache。有缓存命中(有缓存数据且未失效,成功返回)和缓存未命中状态

协商缓存(弱缓存):由服务器来确定缓存资源是否可用,普通刷新会启用弱缓存,忽略强缓存。有缓存命中(有缓存数据且未失效,成功返回)和缓存未命中状态

LRU和LFU

LRU:最近最少使用

LFU:最不经常使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bussy-Lake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值