HTTP:无状态协议。即不保存状态,不对请求和响应之间的通信状态进行保存。
优点:更快处理大量事务,确保协议的可伸缩性。
一、HTTP方法
1.1 GET(查询)
获取资源。请求访问已被URI识别的资源,指定资源经服务器端解析后返回响应内容,即请求资源是文本,原样返回;类似CGI(通用网关接口)的程序,返回执行后的输出结果。
1.2 POST(新增)
传输实体主体。
1.3 PUT(更新)
传输文件。即类似FTP协议,在请求报文主体中包含文件内容,然后保存到请求URI指定位置。
1.4 DELETE(删除)
删除文件。按请求URI删除指定资源。
1.5 HEAD
获取报文首部。和GET方法一样,只是不返回报文主体部分;用于确认URI的有效性及资源更新日期时间等。
1.6 OPTIONS
询问支持方法。即寻求服务器支持哪些请求方法(如支持GET、PUT等)
1.7 TRACE
追踪路径。让Web服务器端将之前的请求通信环回给客户端。
原理:发送请求,在Max-Forwards首部字段中填入数值,每经过一个服务器该数值-1,当数值为0时,停止传输,最后接受到请求的服务器端返回状态码200.
应用:通过该方法可查询发送出去的请求是怎样被加工修改/篡改的。
注:不常用,易引起XST(Cross-Site Tracing,跨站追踪)攻击。
1.8 CONNECT
要求用隧道协议连接代理。与代理服务器通信时建立隧道,实现隧道协议进行TCP通信;主用SSL(安全套接层)和TLS(传输层安全)协议将通信内容加密后经网络隧道传输。
{自己理解,类似在客户端与服务器端建立一个通信隧道,当发该请求时,中间有一个类似代理服务器将其加密然后走该通信隧道。}
二、Cookie技术
为保留HTTP无状态特征,且解决需要登录认证的Web页面进行状态管理而引入。
原理:通过在请求和响应报文中写入Cookie信息来控制客户端状态。
1. 即Cookie会根据从服务器发送的响应报文内的一个Set-Cookie的首部字段信息,通知客户端保存Cookie。
2. 下次客户端给服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送。
3. 服务器端发现客户端发送的Cookie后,检测那个客户端发送的请求链接,并对比服务器上记录,后得到之前状态信息。
三、HTTP报文
概念:用于HTTP协议交互的信息被称为HTTP报文。通信中最小单位,8位组字节流组成。
构成:由多行(用CR+LF作换行符)数据构成的字符串文本。分报文首部和报文主体两块;由最初出现空行(CR+LF)划分,并不一定有报文主体。
请求端(客户端):请求报文
响应端(服务器端)响应报文
四、HTTP的传输
4.1 实体
实体:请求或响应的有效载荷数据(补充页)被传输,其内容由实体首部和实体主体组成。
HTTP主体用于传输请求或响应实体主体。常报文主体=实体主体,传输中编码操作(传输中通过编码提升传输速率,编码由计算机完成,消耗CPU资源),实体主体内容发生变化,才使其存在差异。
4.2 传输中的编码类型
4.2.1 压缩传输内容编码
内容编码:应用在实体内容上的编码格式,并保持实体信息原样压缩;内容编码后的实体由客户端接收并负责解码。(类似压缩包,将信息压缩)
种类:gzip(GNU zip)、compress(UNIX系统的标准压缩)、deflate(zlib)、identity(不进行编码)
4.2.2 分割发送的分块传输编码
传输大容量数据时,把数据分割成多块,每块用十六进制来标记大小,实体主体最后一块使用“0(CR+LF)”标记;
应用:通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面,分块传输可让浏览器逐步显示页面。
4.2.3 发送多种数据的多部分对象集合
该方法可发送一份报文主体内含多类型实体。使用时需在首部字段里加Content-type。
应用:图片或文本文件等上传。
所包含对象
1. multipart/form-data:Web表单文件上传时使用
2.multipart/byteranges:状态码206响应报文包含了多个范围的内容。
4.2.4 获取部分内容的范围请求
指定范围发送的请求。首部字段Range指定资源byte范围。
响应:返回状态码为206的响应报文;多重范围的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文;如无法响应范围请求则返回状态码200 ok和完整实体内容。
应用:为解决下载中断,实现一个恢复机制,即从之前中断处恢复下载。
4.2.5 内容协商返回最合适的内容
内容响应机制:客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。
应用:同一个网站可能存在多份相同内容的页面,访问相同的URI的Web页面时,根据浏览器默认语言返回内容。
技术:
1.服务器驱动协商
由服务器端进行内容协商。请求首部字段为参考,服务器端自动处理。
2.客户端驱动协商
由客户端进行内容协商的方式。用户从浏览器显示的可选列表中手动选择;Javascript脚本在页面上自动进行上述选择。
应用:按照os类型或浏览器类型,自行切换PC版页面或手机版页面。
3.透明协商
服务器驱动和客户端驱动结合体,由服务器端和客户端各自进行内容协商的一种方法。
五、状态码
客户端向服务器端发送请求时,描述返回的请求结果。
构成:3位数字+原因短语
5.1 2XX 成功
请求被正常处理。
5.1.1 200 OK
请求被服务器正常处理。
5.1.2 204 No Content
服务器接收到的请求已成功处理,但返回响应报文中不含实体的主体部分。如返回204则浏览器显示页面不发生更新。
应用:只需客户端给服务器发送信息,客户端不需要发送新信息内容
5.1.3 206 Partial Content
客户端进行范围请求,服务器成功执行该请求。
5.2 3XX重定向
浏览器需要执行某些特殊的处理以正确处理请求。
5.2.1 301 Moved Permanently
永久性重定向。即请求资源已被分配新的URI,以后使用资源现在所指URI。
5.2.2 302 Found
临时重定向,即请求的资源已被分配新的URI,希望本次访问使用新的URI。
5.2.3 303 See Other
表示请求对应的资源存在另一个URI,应使用GET方法定向获取请求资源。
区别:和302有相同的功能,但303明确表示客户端采用GET方法获取资源。
5.2.4 304 Not Modified
客户端发送附带请求时,服务器允许请求访问资源,但不满足条件。返回时不包含任何响应主体部分。 附带条件:GET方法的请求报文中含If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since任一首部。
5.2.5 307 Temporary Redirect
临时重定向。
区别:302有相同功能,307遵照浏览器标准,不会从POST变成GET,处理响应行为,每种浏览器不同。
5.3 4XX客户端错误
客户端是发送错误的原因所在。
5.3.1 400 Bad Request
请求报文中存在语法错误。浏览器会像200一样对待状态码。
5.3.2 401 Unauthorized
发送请求需通过HTTP认证(BASIC、DIGEST认证)的认证信息,如请求过1次,则表示用户认证失败。
5.3.3 403 Forbidden
请求资源被服务器拒绝,服务器没有必要给出拒绝的详细理由。如果想作说明,可以在实体的主体部分对原因进行描述。
5.3.4 404 Not Found
服务器上无法找到请求资源,可用与服务器端拒绝请求且不想说明理由。
5.4 5XX服务器错误
响应结果表明服务器本身发生错误。
5.4.1 500 Internal Server Error
服务器端在执行请求时发生错误,可能Web应用存在bug或某些临时故障。
5.4.2 503 Service Unavailable
服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
六、通信数据转发应用程序
将请求转发给通信线路上的下一战服务器,且可接收从那台服务器发送的响应在转发给客户端。
源服务器:持有资源实体的服务器。
6.1 代理
一种有转发功能的应用程序,中间人角色,接收由客户端发送的请求转发给服务器,接收服务器返回响应转发给客户端。不改变请求URI,会直接发送给前方持有资源的目标服务器。每通过代理服务器转发请求或响应,会追加写入Via首部信息,以标记经过的主机信息。
优点:利用缓存技术减少网络带宽的流量;组织内部针对特定网站的访问控制;获取访问日志为主要目的。
方法:使用缓存、是否会修改报文
6.1.1 缓存
代理服务器或客户端本地磁盘内保存的资源副本。
作用:减少对源服务器的访问,节省通信流量和时间。
6.1.3 缓存代理
转发响应时,会预先将资源缓存保存在代理服务器上。当代理再次接收到对相同资源的请求时,就将缓存的资源作为响应返回。
优点:避免多次从源服务器转发资源,客户端可就近从缓存服务器上获取资源,源服务器不用多次处理相同请求。
有效期:并不是每次请求均获取的是缓存数据,因为缓存存在有效期,有效期结束,存储缓存将失效,重新像源服务器发出相同请求获取数据。
客户端缓存(临时网络文件):存在与客户端浏览器中的缓存信息。同样存在有效期,有效期结束需要重新获取。
6.1.3 透明代理
转发请求或响应时,不对报文做任何加工的代理类型。
非透明代理:对内容进行加工。
6.2 网关
转发其它服务器通信数据的服务器,接收从客户端发送来的请求,就像自己用于资源的源服务器一样对请求进行处理。有时客户端可能都无法察觉,自己通信目标是一个网关。
网关可将HTTP请求转化为其它协议通信,提高通信的安全性,可在客户端与网关之间通信线路上加密以确保连接安全。
实例:网关可连接数据库,可和信用卡结算系统联动。
6.3 隧道
在相隔甚远的客户端和服务器两者之间进行中转,保持双方通信连接的应用程序。
可按要求建立与其它服务器的通信线路,使用SSL等加密手段进行通信。隧道保持原样中转信息,双方通信端开连接时结束,其本身透明,客户端不用在意其存在。
目的:确保客户端能与服务器进行安全的通信。