一个http请求, 需要包含 请求方法, 请求地址, 请求协议, 请求头, 请求体这五部分
请求协议有:http/1.1, http/2( HTTP/2通过使用多路复用技术在一个单独的TCP连接上支持并发, 通过在一个连接上一次性发送多个请求来发送或接收数据)
客户端在请求头部中指定Connection和Upgrade两个字段发起 HTTP/1.1 协议升级. HTTP/2 的协议名称是 h2c, 代表 HTTP/2 ClearText.
如果服务端不同意升级或者不支持 Upgrade 所列出的协议,直接忽略即可(当成 HTTP/1.1 请求,以 HTTP/1.1 响应).
如果同意升级:HTTP Upgrade 响应的状态码是 101,并且响应正文可以使用新协议定义的数据格式。
这样就可以完成从http/1.1升级到http/2了. 同样也可以从http/1.1升级到WebSocket.

http响应:
大体由应答首行, 应答头, 应答体构成.
但是应答首行表达的信息过多, HTTP/1.1表示访问协议, 200是响应码, OK是描述状态的消息.
根据单一职责, 我们不应该把这么多内容用一个应答首行来表示.
这样的话, 我们的响应就应该由访问协议, 响应码, 描述信息, 响应头, 响应体来组成.


okHttp 3 :
OkHttp没有指定具体请求协议. 因为OkHttp使用了请求协议的协商升级, 无论是1.1还是2, 都先只以1.1来发送,
并在发送的信息头里包含协议升级字段. 接下来就看服务器是否支持协议升级了. OkHttp使用的协议升级字段是ALPN

响应:
Response类里面有:
Protocol代表请求协议, int code代表响应码, String message代表描述信息, Headers代表响应头, ResponseBody代表响应体.
还有Request代表持有的请求, Handshake代表SSL/TLS握手协议验证时的信息

请求步骤:
1. OkHttpClient okHttpClient = new OkHttpClient();
2. Request request = new Request.Builder().url(url)..........build();
3. Call call = okHttpClient.newCall(request);
4. call.enqueue(new Callback() {...} //异步请求
Response response = call.execute(); //同步请求

get :异步、同步
post :
提取响应头:
响应缓存:
处理验证: