客户端(通过发送请求获取服务器资源的Web浏览器等)通过指定的访问地址URL获取(或上传)服务器资源(文件等信息)---使用http协议进行通信(超文本传输协议)的协议作为规范。
HTTP协议指服务器端和客户端进行通信时的协议。
1.网络基础TCP/IP是互联网相关的各类协议族的总称(包括FDDI,TCP,IP,FTP,DNS,UDP等等),http是TCP/IP内部的一个子集。
2.TCP/IP的分层管理:分成应用层,传输层,网络层,数据链路层。(分层好处:某个地方改变设计时不需要改动全部)
a.应用层(决定了向客户提供应用服务时的通信活动):FTP(文件传输协议),dns(域名系统),http
b.传输层(提供处于网络连接中的两个计算机之间的数据传输)TCP(传输控制协议),UDP(用户数据报协议)
c.网络层(把数据包通过最短的传输路径送到对方,在众多路线内选择一条传输路线)IP协议(作用:把各种数据包传送给对方)
d.链路层(数据链路层,网络接口层)用来处理连接网络的硬件部分,包括控制操作系统、硬件设备驱动,网卡,光纤等。
HTTP客户端-->TCP-->IP-->网络 (客户端)
HTTP服务器端<--TCP<--IP<--网络 (服务器端)
举例:在发送端的客户端发送了一个想看某页面的http请求(HTTP协议),为了传输方便,在传输层(TCP协议)把应用层发来的消息的进行分割,贴上标记和端口号传输给网络层(ip协议),增加作为MAC地址后转发给链路层。
发送端层与层传输时会被打上一个该层所属的首部信息。接收端则会一层层去掉首部信息。这种把数据信息包装起来的做法叫封装。
3.为了确保数据能够到达对方那里,tcp协议采取了三次握手,1.发送端说“我要给你发数据你接一下”,2.接收端说“好的,你发过来吧”,3.发送端说“发了过去”;
4.URI包括URL。
5.HTTP协议是一种无状态的协议,即自身不对请求和响应之间的通信状态进行保存,比如购物网站用户登录后跳转其他页面也需要保持登录,所以就有了cookie技术(cookie会根据从服务器端发送的响应报文内的set-cookie来通知客户端保存cookie。第一次客户端发送请求,服务器生成cookie响应时告诉客户端生成cookie,第二次客户端发送请求时会带着cookie,服务器进行检查校验,返回响应)。
6.GET方法和POST方法:GET获取资源(发送请求获取某个页面),POST传输实体主体(表单提交的用户名密码等),虽然get方法也可以传输实体主体,但是有安全性问题。
7.PUT方法用来传输文件,像是ftp协议的文件上传一样,要求在请求报文的主体中包含文件内容,但是HTTP/1.1的put自身不带验证机制,所以任何人搜可以上传文件,不安全,想要使用需要配合WEB应用程序的验证机制。
8.head方法用于确认URI的有效性,及资源更新的日期和时间,用于测试,并不返回报文主体内容。
9.还有delecte删除文件,trace追踪路径,options询问支持的方法,connect要求用隧道协议连接代理(用于请求连接);
10.编码提升传输效率:a.报文(HTTP通信的基本单位,由8位组字节流组成,通过HTTP通信)主体和实体(作为请求和响应的有效载荷数据被传输,由实体首部和实体主体组成)主体通常相等,只有当传输时进行编码操作时,实体主体内容发生变化导致差异。
b.内容编码指明应用在实体内容上的编码格式,并保持信息原样压缩,由客户端接收并负责解码。
11.MIME多部分对象集合,来容纳多份不同类型的数据,(传输的对象的类型,文本,视频,图片等等....),包含的对象如下:multipart/form-data,在web表单文件上传时使用。在报文中使用MIME时,需要在首部加上content-type。
12.获取部分内容范围的请求:GET /tip.jpg HTTP/1.1 HOST:www.xxxxx.jp Range:bytes = 5001-10000 (5001-是5001字节之后的内容)
13.状态码:(从服务器返回的结果)
1xx:接收的请求正在处理;2xx:请求正常处理完毕;;3xx(重定向状态):需要进行附加操作以完成请求;4xx:客户端错误(输错URL等等);5xx:服务器本身错误(服务器挂掉等...)
204:请求处理成功但是没有资源可以返回。206:客户端进行了范围请求,成功返回了范围。
301: 永久性重定向,表明请求的资源已经分配了新的URI,以后要使用现在所指的URI。302:临时性重定向,请求的资源已经分配了新的URI,和301区别是301需要保存新的书签,但是302不需要更新书签。
303:由于请求的资源存在着另一个URI,应使用GET方法定向获取请求的资源
(当响应状态码返回时,几乎所有浏览器都会把POST改成GET,并删除请求报文内的主体,虽然301,302禁止把post变成get,但仍是这么做的)
304:(带条件的请求)服务器同意请求访问资源,但是条件不满足。
307:也是临时重定向,同302
400(语法错误)请求的报文存在语法错误
401(有认证信息的)浏览器初次接收到401响应,会弹出认证框,第二次返回认证结果。
403(权限问题,禁止访问)请求资源的访问被服务器拒绝了。
404(找不到页面)服务器上没有请求的资源
500(服务器内部故障):表明服务器执行请求时发生错误,也有可能是应用存在bug或临时故障
503(服务器很忙):服务器正在超负载或者进行停机维护