iOS开发中的http浅析
至于为什么要进行HTTP请求我就不说了。本文主要对HTTP协议做了一些介绍,主要针对网络编程和面试。
先从流程开始说起
APP <---> 服务器 <---> 后台
1)App 也就是移动端告诉服务器想要什么样的数据。
2)服务器接收到了命令,去后台查找。
3)查找完之后,服务器返回给移动端。
流程其实很好理解,但是落实到代码上就很复杂了。如果我们用AFNetworking第三方库请求数据,只要调用API,填上URL和请求方法(GET和POST)就可以等着服务器返回数据了。其实真实的情况并不是如此简单。那服务器是根据什么知道知道移动端要请求什么数据的呢?我们为什么要填写URL呢?一个完整的URL又包含哪些信息呢?
URL
我们每次请求数据都要发送一个发送一个http请求,往方法里传一个参数,就是URL。eg:http://www.cnblogs.com/doujiangyoutiao/。(我的博客地址,会定期更新一些技术博客,欢迎关注。)
http : 表示这个请求是遵守http协议
www.cnblogs.com :是服务器的域名。一些个URL没有域名直接就是IP地址,eg:http://42.121.252.58/doujiangyoutiao/ 就是把 www.cnblogs.com 换成42.121.252.58。其实都一样,到最后都得解析成IP地址,就是一串数字。那IP地址有什么用?用处大了,IP地址可以帮我们找到唯一的服务器,不然全世界那么多服务器,鬼知道要向哪台服务器请求数据。
/doujiangyoutiao/ :就是请求路径,告诉服务器,要请求什么数据了。
HTTP请求
那介绍完URL,就该介绍HTTP协议了。HTTP协议规定,一个完整的由客户端发给服务器的HTTP请求包括请求行,请求头,请求体。
1.请求行:包含了请求方法、请求资源路径、HTTP协议版本;
GET /u/2552663324 HTTP/1.1
2.请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息
(1)客户端想访问的主机地址
Host:218.30.115.123
(2)客户端的类型,客户端的软件环境
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:48.0) Gecko/20100101 Firefox/48.0
(3)客户端所能接收的数据类型
Accept:text/html ,/
(4)客户端的语言环境
Accept-Language:zh-cn
(5)客户端支持的数据压缩格式
Accept-Encoding:gzip
3.请求体:POST请求才有,GET没有。是客户端发给服务器的具体数据,比如文件数据。
HTTP请求响应
客户端向服务器发送请求,服务器应当做出响应,及返回数据给客户端。HTTP协议规定:1个完整的HTTP响应中包换以下内容:状态行,响应头,实体内容,和HTTP请求相对。
1.状态行:包含了HTTP协议版本、状态码、状态英文名称。
(1)HTTP/1.1 200 OK
2.响应头:包含了对服务器的描述、对返回数据的描述。
(1)服务器的类型
Server:Apache-Coyote/1.1
(2)返回数据的类型
Content-Type:text/html;charset=UTF-8
(3)返回数据的长度
Content-Length:3012
(4)响应的时间
Date:Wed, 28 Sep 2016 06:38:08 GMT
3.实体内容:服务器返回给客户端的具体数据,比如文件数据。
iOS开发中的http浅析的更多相关文章
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- iOS开发中静态库制作 之.a静态库制作及使用篇
iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...
- ios开发中的小技巧
在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
在 IOS 开发当中经常碰到 whose view is not in the window hierarchy 的错误,该错误简单的说,是由于 "ViewController" ...
- [转]iOS开发中的火星坐标系及各种坐标系转换算法
iOS开发中的火星坐标系及各种坐标系转换算法 源:https://my.oschina.net/u/2607703/blog/619183 其原理是这样的:保密局开发了一个系统,能将实际的坐标转 ...
- iOS开发中常见问题集锦
在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...
- iOS开发中获取WiFi相关信息
iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可能是与WiFi相关的. 1.Ping域名.Ping某IP 有 时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作.这里的p ...
- iOS开发中设置UITextField的占位文字的颜色,和光标的颜色
在iOS开发中,对于很多初学者而言,很有可能碰到需要修改UITextField的占位文字的颜色,以及当UITextField成为第一响应者后光标的颜色,那么下面小编就介绍一下修改占位文字和光标的颜色. ...
随机推荐
- Android标题栏最右边添加按钮
step1:重写activity的onCreateOptionsMenu方法 @Override public boolean onCreateOptionsMenu(Menu menu){ Menu ...
- 2、Redis入门介绍
1.什么是Redis Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数 ...
- 【前端攻略】最全面的水平垂直居中方案与flexbox布局
最近又遇到许多垂直居中的问题,这是Css布局当中十分常见的一个问题,诸如定长定宽或不定长宽的各类容器的垂直居中,其实都有很多种解决方案.而且在Css3的flexbox出现之后,解决各类居中问题变得更加 ...
- Why is HttpContext.Current null after await?
今天在对项目代码进行异步化改进的时候,遇到一个奇怪的问题(莫笑,以前没遇过),正如标题一样,HttpContext.Current 在 await 异步执行之后,就会变为 null. 演示代码: pu ...
- geotrellis使用(十九)spray-json框架介绍
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 spray-json简介 spray-json使用 ...
- 用JQuery Ajax 与一般处理程序 请求数据无刷新,以及如何调试错误
通过 ajax() 与 一般处理程序,请求数据库数据,实现界面无刷新. Jquery ajax 请求参数详细说明 http://www.w3school.com.cn/jquery/ajax_ajax ...
- iOS开发--AVFoundation自定义相机
首先导入一个头文件 #import <AVFoundation/AVFoundation.h> 由于后面我们需要将拍摄好的照片写入系统相册中,所以我们在这里还需要导入一个相册需要的头文件 ...
- UIScrollView的delaysContentTouches与canCencelContentTouches属性
UIScrollView有一个BOOL类型的tracking属性,用来返回用户是否已经触及内容并打算开始滚动,我们从这个属性开始探究UIScrollView的工作原理: 当手指触摸到UIScrollV ...
- 附录C 编译安装Hive
如果需要直接安装Hive,可以跳过编译步骤,从Hive的官网下载编译好的安装包,下载地址为http://hive.apache.org/downloads.html . C.1 编译Hive C.1 ...
- Oracle库Delete删除千万以上普通堆表数据的方法
需求:Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操 ...