iOS之网络相关面试题

2021-04-06  本文已影响0人  枫叶无处漂泊

一、什么是http?

http协议(超文本传输协议)

是一种详细规定了浏览器和万维网(WWW = World Wide Web )服务器之间相互通信的原则,通过因特网传送万维网文档的数据传送协议。

二、http是基于TCP还是UDP?

HTTP是基于TCP的应用层协议

三、HTTP的特点

1.HTTP的无状态

每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求时无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况。

也就是说服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器
标准的HTTP协议指的是不包括cookies,session,application的HTTP协议

1.HTTP的持久连接

持久连接情况下,服务器发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。
HTTP/1.0使用非持久连接。HTTP/1.1 默认使用持久连接<keep-alive>。

非持久连接的每个连接,TCP得在客户端和服务端分配TCP缓冲区,并维持TCP变量,会严重增加服务器负担。而且每个对象都有2个RTT(Round Trip Time,也就是一个数据包从发出去到回来的时间)的延迟,由于TCP的拥塞控制方案,每个对象都遭受TCP缓启动,因为每个TCP连接都起始于缓启动阶段

3.HTTP持久连接怎么判断一个请求是否结束的?

有两种方法可以判断:

  1. Content-length:根据所接收字节数是否达到Content-length值

  2. chunked(分块传输):Transfer-Encoding。当选择分块传输时,响应头中可以不包含Content-Length,服务器会先回复一个不带数据的报文(只有响应行和响应头和\r\n),然后开始传输若干个数据块。当传输完若干个数据块后,需要再传输一个空的数据块,当客户端收到空的数据块时,则客户端知道数据接收完毕。

四、OSI网络的七层协议?

从下到上分别是:

五、请求报

  1. 请求行
  2. 请求头
  3. 空格
    • 用户进行内容分割,表示请求头到此为止,下一行的内容不再是请求头。
  4. 请求体
    • 请求体包含的就是请求数据,正如上文提高的,当使用的是GET方法的时候,没有请求体。

如下图是请求报文的结构图:

请求报文组成图.png

请求报文

POST  /somedir/page.html  HTTP/1.1    
//以上是请求行:方法字段、URL字段和HTTP版本字段
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
User-agent: Mozilla/5.0.    
Accept-lauguage: fr  
//以上是首部行
(此处必须有一空行)  //空行分割header和请求内容 
name=world   请求体

一、请求行

第一行为请求行,由请求方法、URI和HTTP协议版本3个字段组成,它们之间用空格分隔,最后以回车和换行符结尾进行内容分割,表示接下来的内容(下一行开始的)不是请求行的内容例如。举例,GET /index.php HTTP/1.1,GET是请求方法,/index.php是URI,HTTP/1.1表示使用的HTTP版本为1.1。

1、请求方法

只有请求方法的类型比较多,有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,其中GET、POST最为常用

GET和POST区别:

之所以说是相对安全,是因为,如果POST虽然参数非明文,但如果被抓包,GET和POST一样都是不安全的。(HTTPS该用还是得用)

这里的安全是指不应引起Server端的任何状态变化.
GET的语义就是获取数据,是不会引起服务器的状态变化的,即是安全的。(HEAD,OPTIONS也是安全的),而POST语义则是提交数据,是可能会引起服务器状态变化的,即是不安全的.

幂等:同一个请求方法执行多次和执行一次的效果完全相同.显然GET请求是幂等而POST请求是非幂等的。

因为GET是幂等的只读的,即GET请求除了返回数据不会有其他副作用,所以GET才是安全的,从而可以直接由CDN缓存,大大减轻服务器的负担,也就是可缓存的。
而POST是非幂等的,即除了返回数据还会有其他副作用,所以POST是不安全的,必须交由web服务器处理,即是 不可缓存的

对于GET方式的请求,浏览器会把Header和实体主体一并发送出去,服务器响应200(返回数据)

对于POST,浏览器先发送Header,服务器响应100 Continue,浏览器再发送实体主体,服务器响应200 OK(返回数据)。

GET 相对 POST 的优势是什么?

二、请求头

请求头部由键/值对组成,每行一对,键和值用冒号“:”(英文)分隔。请求头部告知服务器所有关于客户端请求的信息,典型的请求头有:

六、响应报文

响应报文也是四部分组成:

状态行之外,其他三个部分与请求报文类似.

响应报文的结构图如下:

响应报文组成图.png

HTTP/1.1 200 OK    
//以上是状态行:协议版本字段、状态码、相应状态信息
Connection:close
Server:Apache/2.2.3(CentOS)
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html
Content-Length: 122
//以上是首部行
(此处必须有一空行)  //空行分割header和实体主体
(data data data data)//响应实体

1.状态行

HTTP/1.1 200 OK : http版本 状态码以及短语提示请求的结果。一下常见的状态码和对应的短语:

常见状态代码、状态描述的说明如下:

2、响应头

上一篇 下一篇

猜你喜欢

热点阅读