至于为什么要进行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浅析的更多相关文章

  1. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  2. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  3. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  4. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

  5. IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法

    在 IOS 开发当中经常碰到 whose view is not in the window hierarchy 的错误,该错误简单的说,是由于 "ViewController" ...

  6. [转]iOS开发中的火星坐标系及各种坐标系转换算法

     iOS开发中的火星坐标系及各种坐标系转换算法 源:https://my.oschina.net/u/2607703/blog/619183   其原理是这样的:保密局开发了一个系统,能将实际的坐标转 ...

  7. iOS开发中常见问题集锦

    在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...

  8. iOS开发中获取WiFi相关信息

    iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可能是与WiFi相关的. 1.Ping域名.Ping某IP 有 时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作.这里的p ...

  9. iOS开发中设置UITextField的占位文字的颜色,和光标的颜色

    在iOS开发中,对于很多初学者而言,很有可能碰到需要修改UITextField的占位文字的颜色,以及当UITextField成为第一响应者后光标的颜色,那么下面小编就介绍一下修改占位文字和光标的颜色. ...

随机推荐

  1. C#需知--长度可变参数--Params

    Params用于参数的数量可变的情况下,即参数的个数是未知数. 使用Params需要知道以下几点: 1.如果函数传递的参数含有多个,使用Params标记的参数数组需要放在最后 图上显示的很明确,不需要 ...

  2. SQL 联合查询 + XML解析

    (select a.EBILLNO, a.EMPNAME, a.APPLYDATE, b.HS_NAME, ), ),'') as SUMMARY, cast(c.XmlData as XML).va ...

  3. 深入学习jQuery元素过滤

    × 目录 [1]索引过滤 [2]内容过滤 前面的话 过滤是jQuery扩展的一个重要的内容.jQuery选择器中的一个重要部分就是过滤选择器.除了过滤选择器,还有专门的元素过滤的方法.本文将详细介绍j ...

  4. 基于Fragment的百度地图框架的使用

    博客:http://blog.csdn.net/developer_jiangqq (一)基本介绍(Fragment和SupportMapFragment): Fragment的使用现在安卓APP开发 ...

  5. 从一道面试题分析javascript闭包

    据说是一不注意就会做错的五道javascript面试题之一,我们来看看这道题长什么样 function Container( properties ) { var objthis = this; fo ...

  6. MyCAT报java.lang.OutOfMemoryError: Java heap space

    早上同事反映,mycat又假死了,估计还是内存溢出,查看了一下错误日志. INFO | jvm | // :: | java.lang.OutOfMemoryError: Java heap spac ...

  7. Linux:Ubuntu16.04下创建Wifi热点

    Linux:Ubuntu16.04下创建Wifi热点 说明: 1.Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具. 2.本篇文章转载自编程人生 具体步骤如下: 1.  ...

  8. 数据库操作提示:Specified key was too long; max key length is 767 bytes

    操作重现: 法1:新建连接——>新建数据库——>右键数据库导入脚本——>提示:Specified key was too long; max key length is 767 by ...

  9. JavaScript填坑史

    说明:  这是笔者平时积累的一些觉得比较有意思或是比较有难度的JavaScript题目理解和心得,会保持长期更新. 1.setTimeout和setInterval深入理解 在setTimeout和s ...

  10. CSS-清除浮动

    什么是CSS清除浮动? 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高 ...