HTTP/HTTPS协议

2018/8/22 posted in  iOS基础概念

URL编码

为什么需要进行url编码?
Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。Url中只允许使用可打印字符。
还有一些保留字符,比如url划分成若干组件的分隔符。
url编码被称为百分号编码。%字符的十六进制表示。

HTTP的实体类型

在HTTP协议的GET请求的参数内容直接拼接在url后面(这些个工作可以自己做,也可以通过第三方比如iOS的AFNetworking就为我们做了这个工作,哈哈,我们用AFNet只需给个字,详情可以参见AFURLRequestSerialization)。

在HTTP协议的POST请求的参数放在请求体里。那么请求体力到底是些什么内容?
常见的post提交数据类型有四种:

1.第一种:application/json:这是最常见的json格式如下
{"input1":"xxx","input2":"ooo","remember":false}

2.第二种:application/x-www-form-urlencoded:浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数
input1=xxx&input2=ooo&remember=false

3.第三种:multipart/form-data:这一种是表单格式的,数据类型如下

------WebKitFormBoundaryrGKCBY7qhFd3TrwAContent-Disposition: form-data; name="text"
title------WebKitFormBoundaryrGKCBY7qhFd3TrwAContent-Disposition:form-data;name="file";filename="chrome.png"Content-Type: image/pngPNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

4.第四种:text/xml:这种直接传的xml格式

AFNetworking这部分搞的很复杂

HTTP在断点下载,断点续传的应用

HTTP里的Cookie与Session

  • Cookie
    用于在客户端记录用户的的数据。因为http是一种无状态协议。且工作都是在一次性中完成。有时为了方便记录数据。会将一些数据存在cookie里。比如用户的登陆状态信息,。(若果)

  • Session
    session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户。默认传给客户端用cookie存储,在在每次请求是传给服务端,服务端根据这个Session找出当前用户的状态信息

HTTP,TCP,IP协议层关系

HTTPS如何做到安全传输的

  1. 服务器把自己的公钥传给证书机构
  2. 证书机构用自己的私有秘钥把服务器的公钥进行数字签名(标识这是数字机构的签名)
  3. 证书机构的公开秘钥已经事先植入在浏览器里了
  4. 客户端在向服务器请求时,会拿到经过证书机构签名的证书(这个证书里包含服务器的公钥)
  5. 客户端收到这个证书会取出浏览器里的机构公钥对其进行验证(整个的信任机构就是对机构的信任了)
  6. 如果是该证书机构颁发的,就取出公钥。这个公钥就时服务端公钥
  7. 使用公钥对数据加密协商对称加密方法。。。

采用证书机构的原因是防止第三方任攻击。防止伪装。

HTTP的性能优化(可不搞)