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如何做到安全传输的
- 服务器把自己的公钥传给证书机构
- 证书机构用自己的私有秘钥把服务器的公钥进行数字签名(标识这是数字机构的签名)
- 证书机构的公开秘钥已经事先植入在浏览器里了
- 客户端在向服务器请求时,会拿到经过证书机构签名的证书(这个证书里包含服务器的公钥)
- 客户端收到这个证书会取出浏览器里的机构公钥对其进行验证(整个的信任机构就是对机构的信任了)
- 如果是该证书机构颁发的,就取出公钥。这个公钥就时服务端公钥
- 使用公钥对数据加密协商对称加密方法。。。
采用证书机构的原因是防止第三方任攻击。防止伪装。