Android Mock Interview (1) -- HTTP

之所以把专题叫做Mock Interview 是因为最近自己也在准备面试,在复习的时候感觉光自己看知识点很容易看完就忘,因此我想通过给自己做一个模拟面试的形式把面试官可能问到的问题都记录下来,并附上解答,最终达到文章写完就好像经历了一次面试的效果。

今天的主题是HTTP。从网上的面经来看,HTTP协议在Android面试中出现频率还是挺高的,下面就来开始我们的Mock Interview。

1. 说一下HTTP协议的格式

HTTP 报文分为请求和响应报文。
请求报文由3部分组成:

  • 请求行:包括请求方法,URI和HTTP版本号
  • 请求首部字段
  • 请求内容实体

响应报文也是3部分:

  • 状态行:包括HTTP版本号,状态码和原因短语
  • 响应首部字段
  • 响应内容实体

2. 说几个HTTP方法

(这里我觉得不能只是答GET,POST等等方法名,最好把各个方法的作用或使用场景说一下)

  • GET:用于请求访问已经被URI标识的资源,可以通过URL传参给服务器
  • POST:主要功能与GET方法类似,但是比GET方法安全,因为数据是放在请求实体中传递给服务器的,用户不可见。一般推荐用POST方法
  • PUT:用于传输文件,报文主题中包含文件内容,保存到对应的URI位置
  • HEAD:获得响应报文首部。与GET方法类似,但是不返回报文实体,一般用于验证URI是否有效
  • DELETE:与PUT方法相反,删除对应URI位置的文件
  • OPTIONS:查询相应URI支持的HTTP方法

3. GET方法和POST方法有什么区别?

区别一:

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

区别二:

  • get传输数据是通过URL请求,以field(字段) = value的形式,置于URL后,并用“?”连接,多个请求数据间用“&”连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的。
  • post传输数据是通过HTTP的post机制。将字段和对应值封存在请求实体中发送给服务器。这个过程用户是不可见的。

区别三:

  • get传输数据量小,因为受URL长度限制,但是效率高。
  • post可以传输大量数据,所以上传文件时只能用post

区别四:

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

区别五:

  • get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。
  • post支持标准字符集,可以正确传递中文字符。

4. 说一下HTTP 1.0 和 1.1 的区别

  • 在HTTP1.0中,当连接建立后,客户端发送一个请求,服务器端返回一个信息后就关闭了连接,当浏览器下次要请求时又要重新建立连接。这种不断建立连接的方式会给服务器造成很大负担,也会延长响应时间。
  • 在HTTP1.1中节省了2点开销。1. 引入了持续连接的概念,建立这种连接后,客户端可以向服务端发送多条请求,而不必每次请求都重新连接。2. 请求管线化,客户端可以连续发送多条请求而不必等待之前请求返回。通过这两点缩短请求的时间,节约资源开销。

5. 说说HTTP状态码

状态码的分类:
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

常见的状态码有:
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
301:永久性重定向。表示请求的资源已经被分配了新的URI。
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关。
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙

6. HTTP 协议首部字段有哪几种?

首部字段大致分为以下4中:
(1) 通用首部字段(请求报文与响应报文都会使用的首部字段)
Date:创建报文时间
Connection:连接的管理
Cache-Control:缓存的控制
Transfer-Encoding:报文主体的传输编码方式

(2) 请求首部字段(请求报文会使用的首部字段)
Host:请求资源所在服务器
Accept:可处理的媒体类型
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的内容编码
Accept-Language:可接受的自然语言
If-Modified-Since: 确认代理或客户端拥有的本地资源的有效性。

(3) 响应首部字段(响应报文会使用的首部字段)
Accept-Ranges:可接受的字节范围
Location:令客户端重新定向到的URI
Server:HTTP服务器的安装信息
Retry-After: 告知客户端应该在多久之后再次发送请求。主要配合状态码503 Service Unavailable响应,或3xx redirect响应一起使用

(4) 实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
Allow:资源可支持的HTTP方法
Content-Type:实体主类的类型
Content-Encoding:实体主体适用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的的字节数
Content-Range:实体主体的位置范围,一般用于发出部分请求时使用

7. 在浏览器中输入baidu.com后都经历了哪些协议?

  1. DNS — 解析出域名对应的IP地址
  2. HTTP — 生成针对目标web服务器的请求报文
  3. TCP — 将HTTP请求报文分割成报文段,把每个报文段可靠地传给对方(三次握手建立连接)
  4. IP — 搜索对方的地址,一边中转一边传送

(我知道的就这几个了,欢迎大神补充)

以上是一部分HTTP协议相关的考点,欢迎各位指正。

Reference

[1] 《图解HTTP》 -- 【日】上野宣

你可能感兴趣的:(Android Mock Interview (1) -- HTTP)