0%

协议线相关常见面试题

HTTP协议

HTTP协议组成

请求报文包含三部分:

  • 请求行:包含请求方法、URI、HTTP版本信息
  • 请求首部字段
  • 请求内容实体
post和get区别

区别一:

  • get重点在从服务器上获取资源。
  • post重点在向服务器发送数据。

区别二:

区别三:

  • Get传输的数据量小,因为受URL长度限制,但效率较高。
  • Post可以传输大量数据,所以上传文件时只能用Post方式。

区别四:

  • get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等。
  • post较get安全性较高。

区别五:

  • get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。
  • post支持标准字符集,可以正确传递中文字符。
为什么说HTTP协议是无状态协议?怎么解决无状态问题

无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息

解决办法: 1、Cookie 2、通过Session会话保存。

说一下Http协议中302状态(阿里经常问)

http协议中,返回状态码302表示重定向。

这种情况下,服务器返回的头部信息中会包含一个 Location 字段,内容是重定向到的url。

在浏览器中输入url后的过程

1.DNS解析:会根据URL逐层查询DNS服务器缓存,直到找到目标IP地址

2.三次握手,TCP连接

3.发送HTTP请求报文

4.返回HTTP响应报文页面

5.根据HTTP页面内容请求页面中的js、xss等,进行页面渲染

6.断开TCP连接,四次挥手

SYN攻击:

​ 在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.
Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

Cookie和Seesion

​ Cookie是服务器发给浏览器的特殊信息,并会以文本形式存在浏览器中,所以我们点击浏览器的清除记录,往往会问我们是否清理Cookie,当清理之后下次再访问网页就会需要我们重新登录。如果浏览器中存在Cookie,那么提交请求就会一起提交过去服务器在接收到后就会解析Cookie生成与客户端相对应的内容,实现自动登录,Cookie带有我们的比较重要信息,所以一般不要给被人获取

  Session是在服务器上保存的信息,当服务器需要为客户创建Session的时候,就会解析客户端请求查看请求是否包含session id,如果包含那么就表明此前已经为客户端创建过session,不包含则创建一个对应的session id,而后回发给客户端,使得客户端下次能带有session id。然后按需保存状态

  所以最终的区别总结起来就是:Cookie数据存放在客户浏览器上,Session数据存放在服务器上,Session相对应Cookie安全,而使用Cookie会给服务器减负

什么是HTTPS?和HTTP协议相比优势在哪里?

HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护

​ 1.通信内容不加密,内容可能被窃听

​ 2.不验证通信对方的方式,可能遭到伪装

​ 3.无法验证报文的完整性,可能被篡改

常见状态码

200 OK 客户端请求成功

400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。

401 Unauthonzed 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因

404 Not Found 请求的资源不存在,例如,输入了错误的URL。

500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。

503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常

DNS协议

DNS协议功能:完成域名->IP的映射

端口:53

域名解析顺序

1.浏览器内部缓存

​ 浏览器自身的DNS缓存,缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存

2.Chrome会搜索操作系统自身的DNS缓存

​ 如果浏览器自身的缓存里面没有找到对应的条目,那么Chrome会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束

3.尝试读取host文件

​ 如果在Windows系统的DNS缓存也没有找到,那么尝试读取hosts文件, 看看这里面有没有该域名对应的IP地址,如果有则解析成功。

4.先访问系统配置的首选DNS服务器

​ 浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是电信运营商提供的,也可以使用像Google提供的DNS服务器)发起域名解析请求

5.如果首DNS服务器不能解析,则由首选DNS服务器代替向各个DNS(迭代式)
(1)首先访问根域名服务器(DNS服务器内一般都会内置13台根域名服务器的地址),查询完整域名的ip地址(www.baidu.com),但是根域名会回答不知道完整域名的地址,但知道顶级域名(.com)的ip地址

​ (2)再去访问对应顶级域名的ip地址,尝试查询完整域名的ip地址,但是顶级域名服务器告诉运营商的DNS我不知道完整域名(www.baidu.com)这个域名的IP地址,但是我知道baidu.com这个域的DNS地址

​ (3)这样无限迭代,直到查到完整域名的ip地址

DNS劫持

​ DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。

解决办法:换用高可信的DNS服务器,比如GoogleDNS 8.8.8.8

DNS污染

​ DNS污染,指的是用户访问一个地址,国内的服务器(非DNS)监控到用户访问的已经被标记地址时,服务器伪装成DNS服务器向用户发回错误的地址的行为。范例,访问Youtube、Facebook之类网站等出现的状况。

DNS污染症状:目前一些被禁止访问的网站很多就是通过DNS污染来实现的,例如YouTube、Facebook等网站。