iOS 网络相关面试题(HTTP协议)

2024-06-23 10:38

本文主要是介绍iOS 网络相关面试题(HTTP协议),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HTTP协议:超文本传输协议

是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
HTTP是基于TCP的应用层协议
(OSI网络七层协议从上到下分别是 应用层表示层会话层 、传输层网络层 、数据链路层物理层

  • 请求/响应报文
  • 连接建立流程
  • HTTP的特点

一、请求报文和响应报文

1、请求报文

如下:

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   请求体

Host:指明了该对象所在的主机
Connection:Keep-Alive首部行用来表明该浏览器告诉服务器使用持续连接
Content-Type: x-www-form-urlencoded首部行用来表明 HTTP会将请求参数用key1=val1&key2=val2的方式进行组织,并放到请求实体里面
User-agent:首部行用来指明用户代理,即向服务器发送请求的浏览器类型
Accept-lauguage:首部行表示用户想得到该对象的法语版本(如果服务器中有这样的对象的话),否则,服务器应发送它的默认版本

2、响应报文

如下:

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)//响应实体主体

状态码及其相应的短语指示了请求的结果。

一些常见的状态码和对应的短语:

  • 200 OK:请求成功,信息在返回的响应报文中
  • 301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文中的Location:首部行中。客户软件将自动获取新的URL
  • 400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解
  • 404 Not Found:被请求的文件不在服务器上
  • 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
    <4开头的状态码通常是客户端的问题,5开头的则通常是服务端的问题>

Connection:close首部行告诉客户,发送完报文后将关闭TCP连接。
Date:指的不是对象创建或最后修改的时间,而是服务器从文件系统中检索到该对象,插入到响应报文,并发送该响应报文的时间。
Server: 首部行指示该报文是由一台Apache Web服务器产生的,类似于HTTP请求报文里的User-agent
Content-Length:首部行指示了被发送对象中的字节数
Content-Type:首部行指示了实体体中的对象是HTML文本

二、HTTP的请求方式

GET、POST、PUT、DELETE、HEAD、OPTIONS

1、GET和POST方式的区别

从语法角度来看,最直观的区别就是

  • GET的请求参数一般以?分割拼接到URL后面,POST请求参数在Body里面
  • GET参数长度限制为2048个字符,POST一般是没限制的
  • GET请求由于参数裸露在URL中, 是不安全的,POST请求则是相对安全
    之所以说是相对安全,是因为,如果POST虽然参数非明文,但如果被抓包,GET和POST一样都是不安全的。(HTTPS该用还是得用)

而从语义的角度来看:

GET:获取资源是 安全的幂等的(只读的,纯粹的), 可缓存的
POST:获取资源是 非安全的非幂等的不可缓存的

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

  • 幂等:同一个请求方法执行多次和执行一次的效果完全相同
    显然GET请求是幂等而POST请求是非幂等的。
    这里用幂等形容GET还不够,因为GET不止是执行多次和执行一次的效果完全相同,而且是执行一次和执行零次的效果也是完全相同的。

  • 可缓存的
    请求是否可以被缓存。
    GET请求会主动进行Cache

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

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

在响应时,GET产生一个TCP数据包;POST产生两个TCP数据包:
对于GET方式的请求,浏览器会把Header和实体主体一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送Header,服务器响应100 Continue,浏览器再发送实体主体,服务器响应200 OK(返回数据)。

2、GET 相对 POST 的优势是什么?

1、最大的优势就是方便。GET 的URL可以直接手输,从而GET请求中的URL可以被存在书签里,或者历史记录里
2、可以被缓存,大大减轻服务器的负担
所以大多数情况下,还是用GET比较好。

三、HTTP的特点

无连接、 无状态
HTTP的持久连接、Cookie/Session

1、HTTP的无状态

即协议对于事务处理没有记忆能力。
每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求时无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况
也就是说服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器
标准的HTTP协议指的是不包括cookies,session,application的HTTP协议

2、HTTP的持久连接

  • 非持久连接:每个连接处理一个请求-响应事务。

  • 持久连接:每个连接可以处理多个请求-响应事务。

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

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

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

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

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

这篇关于iOS 网络相关面试题(HTTP协议)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086923

相关文章

RecastNavigation之Poly相关类

Poly分成正常的Poly 和 OffMeshPoly。 正常的Poly 又分成 原始的Poly 和 Detail化的Poly,本文介绍这两种。 Poly的边分成三种类型: 1. 正常边:有tile内部的poly与之相邻 2.border边:没有poly与之相邻 3.Portal边:与之相邻的是外部tile的poly   由firstLink索引 得到第一个连接的Poly  通

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

iOS HTTPS证书不受信任解决办法

之前开发App的时候服务端使用的是自签名的证书,导致iOS开发过程中调用HTTPS接口时,证书不被信任 - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAu

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务

【杂记-浅谈DHCP动态主机配置协议】

DHCP动态主机配置协议 一、DHCP概述1、定义2、作用3、报文类型 二、DHCP的工作原理三、DHCP服务器的配置和管理 一、DHCP概述 1、定义 DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,是一种网络协议,主要用于在IP网络中自动分配和管理IP地址以及其他网络配置参数。 2、作用 DHCP允许计算机和其他设备通

【SparkStreaming】面试题

Spark Streaming 是 Apache Spark 提供的一个扩展模块,用于处理实时数据流。它使得可以使用 Spark 强大的批处理能力来处理连续的实时数据流。Spark Streaming 提供了高级别的抽象,如 DStream(Discretized Stream),它代表了连续的数据流,并且可以通过应用在其上的高阶操作来进行处理,类似于对静态数据集的操作(如 map、reduce、