1. HTTP简介

HTTP

一. 网络知识基础

  1. 网络编程中的几个基本概念

    • 客户端Client: 移动应用App, 如iOS和安卓的应用
    • 服务器Server: 为客户端提供服务, 提供数据, 提供资源的机器
    • 请求Request: 客户端向服务器端索取数据的一种行为
    • 响应Response: 服务器对客户端的请求作出的反应, 一般指返回数据给客户端
  2. 移动应用的开发, 主要是对客户端进行的开发, 一般的网络交互如下图所示

  3. 两种服务器的基本概念:

    • 远程服务器
      • 又称外网服务器, 正式服务器
      • 使用阶段: 应用上线后使用的服务器, 面向用户, 供全体用户使用
      • 速度: 取决于服务器的性能, 用户的网速
    • 本地服务器
      • 又称内网服务器, 测试服务器
      • 使用阶段: 应用处于开发/测试阶段时使用的服务器, 面向公司内部开发人员和测试人员
      • 速度: 由于是局域网, 所以会保证网速, 有助于提高开发测试的效率, 但是无法反应出真实的情况
  4. 网络交互参考示意图:


    网络交互.png

二. HTTP

  1. URL

    • URL全程: Uniform Resource Locator(统一资源定位符)
    • URL就是资源的地址/位置, 互联网上的每一个资源都有一个唯一的URL, 通过一个URL, 能找到互联网中唯一的一个资源
    • URL的基本格式: 协议://主机地址/路径
    • 协议: 不同的协议代表着不同的资源查找方式, 资源传输方式
      • HTTP: 超文本传输协议, 访问的是远程网络资源(网络开发中最长用的协议)
      • file: 访问的是本地计算机上面的资源(file://不用加主机地址, 直接写路径)
      • mailto: 访问的是电子邮件地址
      • ftp: 访问的是共享主机的文件资源
    • 主机地址: 存放着资源的主机(服务器)的IP地址(域名)
    • 路径: 资源在主机(服务器)中的具体位置
  2. TCP/IP协议簇

    • 通常意义上, 我们使用的网络是在TCP/IP协议簇的基础上运作的, 而HTTP属于它内部的一个子集
    • 计算机与网络设备需要通信的话, 双方就要基于相同的方法, 比如具体应该如何探测通信目标, 由哪一方发起通信, 使用什么语言去通信等, 所有的这些议定的规则, 称之为协议
    • 在协议中规定了很多的各式各样的内容, 如选址方法, 双方建立通信的顺序等等, 这些协议如(ICMP/DNS/TCP/FTP/HTTP/SNMP/PPPoE/IP/FDDI等等), 通常我们把TCP/IP认为是在IP协议的通信过程中, 使用到的协议簇的总称
    • TCP协议簇里面最重要一点, 就是分层设计
      • 按照层次分别分为: 应用层, 传输层, 网络层, 数据链路层
      • 其中, 与HTTP关系密切的协议有TCP, IP, DNS等
    • 参考模型:


      ![Uploading HTTP协议_465404.png . . .]
  3. HTTP协议简介

    • 移动端和PC端, 大多数远程的网络资源, 都使用的是HTTP协议
    • HTTP协议的作用:
      • 协议, 主要是为了客户端和服务器达成的协议共识, 双方遵守一份协议, 使用相同的语言才能互相进行交互
      • HTTP的全称: Hypertext Transfer Protocol, 即超文本传输协议
      • 它规定了客户端服务器之间的数据传输格式, 让双方进行有效的数据沟通
      • 如下图所示:


        HTTP协议.png
    • HTTP协议的特点:
      • 简单高效: 因为HTTP协议简单, 所以HTTP服务器的程序规模都很轻灵, 通信速度相对很快
      • 灵活: HTTP可以传输各种各样的数据
      • HTTP0.9和1.0使用非持续链接
        • 限制每次连接只处理一个请求, 服务器对客户端的请求作出响应之后, 马上断开连接, 这种方式可以节省传输的时间
  4. HTTP的基本通信过程

    • 完整的HTTP通信可以分为2个步骤
      • 请求: 客户端向服务器索取数据
      • 响应: 服务器返回客户端需要的数据
    • 完整步骤
      1. 确定请求路径URL
      2. 获取主机名或者域名
      3. DNS域名解析
      4. 获取端口号
      5. 连接到指定服务器的端口(如: 120.20.225.18的80端口)
      6. 客户端向服务器发送一个GET请求
      7. 服务器返回客户端请求的数据
      8. 关闭连接
  5. 发送HTTP请求的方法

    • 在HTTP1.1版本的协议中, 定义了8中发送HTTP请求的方法
      • GET, POST, OPTIONS, HEAD, PUT, DELETE, TRACE, CONNECT, PATCH
      • 根据HTTP协议的设计初衷, 不同的方法对资源有着不同的操作方式:
        • PUT: 增
        • DELETE: 删
        • POST: 改
        • GET: 查
      • 其中最常用的就是GET和POST, 实际上GET和POST都能办到增删改查
    • 参数: 就是传递给服务器的具体数据, 比如登录时的账号密码
  6. GET和POST的对比: GET和POST的区别主要体现在数据的传递上

    • GET:
      • 在请求URL后面以?的形式, 接上要发给服务器的参数, 多个参数之间用&隔开
      • 如: http://www.test.com/login?username=xxx&pwd=abc&type=JSON
      • 由于浏览器和服务器对URL长度有限制, 因此在URL后面附带的参数是有限制的, 通常不能超过1kb
    • POST:
      • 发给服务器的参数, 全部都放在请求体
      • 理论上, POST传递的数据量没有限制(但是只是理论上, 具体还得看服务器的处理能力)
  7. GET和POST的选择

    • 如果要传递大量数据, 比如文件传送, 只能使用POST请求
    • GET的安全性比POST要差, 如果包含机密信息的话, 建议使用POST
    • 如果只是索取数据, 建议使用GET, 比如数据查询, 发送特定的参数, 获取特定的数据
    • 如果是对数据做出修改, 建议使用POST
  8. HTTP报文

    • HTTP报文结构示意图:


      报文示意图.png
    • 报文首部: 在客户端和服务器处理时, 起重要作用的信息(比如端口数据, 端口)
      • 请求报文
        • 请求行: 请求方法 + URL + HTTP版本
        • 请求头:
          • 请求首部字段
          • 通用首部字段
          • 实体首部字段
      • 响应报文
        • 状态行: HTTP版本 + 状态码
        • 响应头:
          • 响应首部字段
          • 通用首部字段
          • 实体首部字段
    • 空行:
    • 报文主体(请求体/响应体): 请求参数或响应的数据
  9. HTTP通信过程 - 请求

    • HTTP协议规定: 一个完整的由客户端发送给服务器的HTTP请求中, 包含以下内容
    • 请求头: 包含了对客户端的环境描述, 客户端请求信息
      • GET/background.png HTTP/1.1: 请求方法+请求资源路径+HTTP协议版本
      • Host: 120.25.225.168:81: 客户端想访问的服务器主机地址
      • User-Agent: Mozilla/5.0: 客户端的类型, 客户端的软件环境
      • Accept: text/html(xx/xx): 客户端所能接收的数据类型
      • Accept-Language: zh-cn: 客户端的语言环境
      • Accept-Encoding: gzip: 客户端支持的数据压缩格式
    • 请求体: 客户端发给服务器的具体数据, 比如文件数据(注: 只有POST请求才有)
  10. HTTP通信过程 - 响应

    • 客户端向服务器发送请求, 服务器应当响应客户端的请求, 并且返回数据给客户端
    • HTTP协议规定: 一个完整的HTTP响应应该包含以下内容
    • 响应头: 包含了对服务器的描述, 对返回数据的描述
      • HTTP/1.1 200 OK: HTTP协议版本, 状态码, 状态的英文说明
      • Server: Apache-Coyote/1.1: 服务器的类型
      • Content-Type: image/jpeg: 返回数据的类型
      • Content-Length: 56811: 返回数据的长度
      • Date: Mon, 23 Jun 2014 12:54:52 GMT: 响应的时间
    • 响应体: 服务器返回给客户端的具体数据, 比如请求一个文件, 返回的整体文件数据
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容