Http协议基础

Http协议基础

消息解析

消息头和消息体。消息头告诉对方是干什么的,消息体是告诉对方怎么干。
请求消息三个部分:请求行,请求头,请求正文。
Get方法获取资源,可以提交表单数据,数据作为URL的一部分向服务器发送(?后面的内容),存在隐患;而且,URL的长度是有限制的,因此提交的数据不能太大。
Post方法客服了安全隐私和数据量小的问题,数据不是作为URL的一部分,而是作为标准数据传输的。因此若考虑安全和用户隐私,应使用post方法提交表单。

请求头:
Connection:Keep-Alive 持久链接
Host:主机和端口号
User-Agent:客户端使用的操作系统和浏览器名称/版本

www构建技术:
HTML超文本标记语言
HTTP协议
URL统一资源定位符

WEB框架:
web服务器-Apache
web浏览器-Internet explorer chrome safari FireFox

协议解析

协议最重要的一点是分层。

把各层之间的接口规划好,每个层次内部的设计就能够自由改动了。
发送端每一层都要encapsulate封装数据信息
IP地址指明节点被分配的地址,MAC地址指网卡所属的固定地址。
使用ARP协议通过MAC地址进行通信
ARP协议Address Resolution Protocol根据通信双方的IP地址反查出对应的MAC地址。
Linux系统arp -a 查看IP和mac的对应关系
Who has 192.168.1.100?

TCP提供可靠的字节流服务
Byte Stream Service,为方便传输,将大块数据分割成以报文段为单位的数据包进行管理。
DNS提供域名到IP地址之间的解析服务,通过域名查找IP,或者通过IP地址查找域名

URI统一资源标志符
由某个协议方案表示的定位标识符,协议方案指访问资源所使用的协议类型名称。HTTP协议的协议方案时http,ftp,telnet, file等
URL是URI的子集,URL表示资源的地点,其在互联网上的位置。URI某一互联网资源
URI格式,协议方案名://登录信息@服务器地址:服务器端口号/带层次的文件路径?查询字符#片段标识

报文

请求报文组成:请求方法,请求URI,协议版本,请求首部字段(可选),内容实体
POST index.htm HTTP/1.1
Host:
Connection:
Content-Type:
Content-Length:
//空一行是内容
name=fzf&age=29

响应报文:协议版本,状态码,原因短语,响应首部字段(可选),实体主体
HTTP/1.1 200 OK
Date:
Content-Type:
Content-Length:

//空一行时实体主体
<>

Http是无状态协议,不对请求和响应之间的状态进行保存
Cookie技术,加Http可以用来管理状态。保存用户登录信息

HTTP/1.1可用方法
GET 请求资源 可在uri后面携带一些字段,但是uri长度有限制,携带的数据是可见的
POST 传输实体
PUT 传输文件 不带验证机制,任何人都可上传文件,存在安全性问题
HEAD 获取报文首部 不返回实体,用于确认URI的有效性及资源更新的日期
DELETE 删除文件 与PUT相反的方法 不带验证机制
OPTIONS 询问支持的方法
TRACE 追踪路径 确认连接源目标服务器过程中发生的一系列操作
CONNECT 要求用隧道协议连接代理,与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL协议和TLS协议吧通信内容加密后经网络隧道传输。

请求一份包含多张图片的HTML文档对应的WEB页面,会产生大量的通信开销,需要多次TCP连接建立和断开。
持久连接 建立一次TCP连接后进行多次请求和响应的交互,HTTP/1.1所有的请求默认时持久的。减少TCP连接的重复建立和断开造成的额外开销,减轻服务器负载。

管线化 pipelining 在持久连接的基础上通过管线化能够做到同时并发发送多个请求,不用等待响应即可发送下一个请求,可以让请求更快的结束

Cookie技术 在请求和响应中写入Cookie信息来控制客户端的状态。
第一次请求服务端没有cookie信息,服务端生成cookie信息放到响应首部字段Set-Cookie信息中,客户端收到响应后保存Cookie信息;客户端之后的请求在首部Cookie字段信息携带Cookie信息,服务端通过cookie对比记录,获取之前的状态。

HTTP的内容编码-缩小传输的信息量
gzip GNU zip
compress UNIX标准压缩
deflate zlib
identity 不进行编码

分块传输编码
每一块用十六进制数标记块的大小,最后一块用“0”。
MIME Multipurpose Internet Mail Extensions,多用途因特网邮件扩展,处理文本,视频,图片等不行类型的数据

多部分对象集合
首部字段Content-Type信息中使用boundary字符串来划分多部分对象集合指明的各类实体。各个实体起始行之前加“–”(–THIS_STRING_SEPARATES),而在多部分对象集合对应的字符串最后加“–”作文结束(–THIS_STRING_SEPARATES–)

范围请求
请求首部字段Range:bytes=5001~10000
返回 206 Partial Content

多重范围请求Range:bytes=-3000, 5000-7000
返回 206 Partial Content 首部字段Content-Type标明multipart/byteranges

若服务器无法响应范围请求, 则返回200 OK 和完整的实体内容

内容协商
客户端和服务器就响应的资源内容进项交涉,提供给客户端最为适合的内容。以资源内容的语言/字符集/编码方式等作为判断的基准。
服务器驱动协商-根据请求首部,服务器自动处理
客户端驱动协商-自动切换PC页面和手机页面
透明协商-

响应状态码
2XX-服务器处理成功
3XX-重定向
4XX-客户端错误
5XX-服务端错误

200 OK 正常处理
204 No Content 没有资源可返回
206 Partial Content范围请求的响应
301 Moved Permanently 永久性重定向
302 Found 临时性重定向
303 See Other使用GET方法请求另外一个URI资源
304 Not Modified 允许请求访问资源,但请求附带的条件不满足,不返回实体
307 临时性重定向
400 Bad Request 请求中存在语法错误
401 Unauthorized 请求需要HTTP认证的信息,初次返回401,会弹出认证用的窗口,再次返回401表示用户认证失败
403 Forbidden 拒绝请求资源
404 Not Found 找不到资源或服务器不想应答
500 Internal Server Error 服务端执行请求发生错误
503 Service Unavailable 服务器处于超负载或正在停机维护

代理
接收客户端的请求转给给其他服务器。接收客户端请求转发给服务器,接收服务器响应转发给客户端。
目的:利用缓存技术减少网络带宽的流量,组织内部对特定网站的访问控制,以获取访问日志为主要目的
缓存代理:代理服务器转发响应时预先将资源副本缓存到代理服务器,当代理服务器再次收到相同的请求时,不从源服务器获取资源,将缓存的资源作为响应返回
透明代理:转发请求和响应时,不对报文做任何加工和处理的代理称为透明代理,反之称为非透明代理。
客户端<—http通信----->代理服务器<—http通信—>源服务器

网关
转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,就像有资源的服务器一样对请求进行处理。
可以使通信线路上的服务器提供非HTTP协议服务。
客户端<----http通信---->网关<—非http通信---->非HTTP服务器

隧道
客户端隧道服务器

缓存
减少对源服务器的访问,节省了通信流量和通信时间。
客户端缓存服务器-转发响应时缓存资源副本到服务器源服务器
客户端缓存服务器-直接响应缓存资源
缓存有效期-若资源过期了,从源服务器重新获取资源
客户端浏览器中也可以缓存,IE浏览器-临时网络文件
客户端-缓存过期了
源服务器

Http的缓存机制

根据是重新向服务器发起请求分为强制缓存和对比缓存

强制缓存由Expire和Cache-Control控制

Expire是响应Header中的一个字段,表示到期时间。请求时间小于到期时间,直接使用缓存;否则需要向服务器重新发起请求。
Http1.0中的字段,在Http1.1以后被Cache-Control字段取代。

Cache-Control也是响应Header中的一个字段,根据取值具有不同的含义:

valuecomment
private客户端可以缓存
public客户端和代理服务器可以缓存
max-age=缓存的数据将在该时间后失效
no-cache表示需要对比缓存控制缓存
no-store不缓存

对比缓存在Cache-Control设置了no-cache会起作用。
缓存生效时,响应中不包含数据,状态码设置了304
有2种缓存控制方式:LastModified/If-Modified-Since和Etag/If-None-Match,第二种的优先级更高。
LastModified是响应Header中的一个字段,表示服务器资源修改的时间,当资源改动时会生成新的LastModified。
If-Modified-Since是请求Header中的一个字段,服务器比较这2个字段的值,若在这个时间后资源被修改了,则响应200和数据;若资源没有修改,则响应304,不包含数据

Etag是响应Header中的一个字段,表示服务器资源的唯一标识,当资源改动时会生成新的Etag。
If-None-Match是请求Header中的一个字段,服务器比较这两个字段的值,若相等,则响应304,不包含数据;否则响应200和数据。

Http的不足

1 通信使用明文,内容可能被窃听
2 不验证通信方的身份,可能遭伪装
3 无法证明报文的完整性,可能已篡改

Https

客户端生成密钥,做为对称加密的密钥,也就是客户端和服务器通信过程中传输数据的加密和解密的密钥。
服务器生成一对非对称密钥,并且持有私密,而将公密通过响应给客户端。非对称加密因效率低,只能传输很小的数据,因此在Https中用来传输对称加密的密钥,而不是用来直接传输数据。通过非对称加密完成客户端和服务器的对称加密的密钥交换。所以,只要非对称加密不能被破解,对称加密的密钥就是安全的,通信的数据就是安全的。

客户端发起连接请求
服务器响应公钥
客户端使用公钥加密密钥,发送给服务器
客户端和服务器使用密钥加密和解密数据。
HTTPS HTTP加SSL 安全套接层和安全传输层

HTTP 加密 认证 完整行保护 HTTPS
HTTPS模型
HTTP
SSL------网络安全技术
TCP
IP

共享秘钥加密:发送方和接收方使用同一个秘钥
公开秘钥加密-两把秘钥:私有秘钥和公开秘钥
发送密文的一方使用对方的公开秘钥进行加密处理,对方收到加密信息使用自己的私有秘钥进行解密
公开秘钥加密比共享秘钥加密处理速度慢

混合加密机制:公开秘钥加密方式交换稍后的共享秘钥加密方式使用的秘钥,确保交换的秘钥是安全的前提下,使用共享秘钥加密方式进行通信

使用数字证书认证机构颁发的公开秘钥证书
服务器把自己的公开秘钥登录至数字证书认证机构,数字证书认证机构用自己的私有秘钥向服务器的公开秘钥署数字签名并颁发公钥证书(数字证书认证机构用自己的私有秘钥对服务器的公开秘钥进行处理,称为数字签名,并将自己的公开秘钥颁发给客户端的浏览器,让浏览器事先植入数字证书认证机构的公开秘钥)
数字证书认证机构的公开秘钥已经实现植入到浏览器。
客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开秘钥,向数字证书认证机构验证公钥证书上的数字签名,以确认服务器公开秘钥的真实性。(客户端用数字证书认证机构的公开秘钥对服务器的公开秘钥进行加密,发给数字证书认证机构,数字证书认证机构用自己的私有秘钥对信息解密后得到服务器的公开秘钥,与之前登录的服务器的公开秘钥验证,确定服务器的真实性)

client-----------------------------------服务器
-----------ClientHello-------->
<-----------ServerHello----------
<-------------Certificate--------
<--------------ServerHelloDone----
--------------ClientKeyExchange----->
---------------ChangeCipherSpec----->
---------------Finished------------->
<---------------ChangeCipherSpec----
<---------------Finished-------------

       <---------------Http 通信------------->

HTTPS消耗CPU及内存资源,增加网络负载,购买证书开销

Http层封装信息,内容具有意义,应用层协议
TCP UDP传输层协议, 编程接口Socket

研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序

网络体系结构是固定的4层网络结构
应用程序体系结构有c/s,p2p
c/s 基础设施密集,很多客户端访问一个服务端,客户端和客户端之间不直接通信,服务器具有固定/周知的IP地址 Web FTP Telnet 电子邮件
P2P结构, 对等通信, 文件分发 BitTorrent 文件搜索/共享eMule IPTV-PPLive

okHttp

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值