HTTP是什么:
HTTP全称超文本传输协议,是一个简单的请求-响应协议,它通常运行在TCP之上。
它指定了客户端可能发送给服务器什么样的消息以及的到什么样的响应。
特性
1.协议构建在TCP/IP协议之上,是一个应用层协议,默认端口号是80。
2.无连接状态:服务器处理完客户的请求,并收到客户的应答后,即断开连接,以尽快将资源释放出来服务其他客户端。
引申:无状态、无连接
HTTP协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但是每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、散发性导致两次传送的数据关联性很低,如果按照上面的方式则需要服务器端开的进程和句柄数目是不可接受的,大部分通道实际上会很空闲、无端占用资源。
因此HTTP的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。
随着时间的推移,html页面变得复杂了,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次tcp连接就显得低效了。
因此Keep-Alive被提出用来解决效率低的问题。这样一来,客户端和服务器之间的HTTP连接就会被保持,不会断开(超过Keep-Alive规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接。
无状态是指服务器不知道客户端是什么状态。
HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变这个结果。然而,随着时间的推移,人们发现静态的HTML着实无聊而乏味,增加动态生成的内容才会令Web应用程序变得更加有用。于是乎,HTML的语法在不断膨胀,其中最重要的是增加了表单(Form);客户端也增加了诸如脚本处理、DOM处理等功能;对于服务器,则相应的出现了CGI(Common Gateway Interface)以处理包含表单提交在内的动态请求。
在这种客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些交互式应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP状态的技术就应运而生了,一个是Cookie,而另一个则是Session。
HTTP报文
HTTP协议是以ASCll码传输,建立在TCP/IP协议之上的应用层规范。
规范把HTTP请求分为三个部分:状态行、请求头、消息主体。
HTTP协议两种发送请求的方法:
Get:对于get方式的请求,浏览器会把http的header和data一并发送出去,服务器响应200(返回数据),
get产生一个TCP数据包
Post:对于post,浏览器先发送header,服务器响应100 continue,
浏览器再发送data,服务器响应200(返回是数据),psot会产生两个TCP数据包。
会话
会话:客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话。
会话跟踪:会话跟踪指的是对同一个用户对服务器的连续的请求和接受响应的监视。
为什么需要会话跟踪:
浏览器与服务器之间的通信是通过HTTP协议进行通信的,而HTTP协议是”无状态”的协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,这样就需要判断是否是同一个用户,所以才有会话跟踪技术来实现这种要求。
cookie和session
同点 :两者都是为了存储用户的相关信息
不同点:cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。
HTTP的15种请求方法
1.GET:请求指定的页面信息,并返回实体主体|
2.HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3.POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据 被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改
4.PUT:从客户端向服务器传送的数据取代指定的文档的内容
5.DELETE:请求服务器删除指定的页面。
6.CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7.OPTIONS:允许客户端查看服务器的性能。
8.TRACE:回显服务器收到的请求,主要用于测试或诊断。
9.PATCH:实体中包含一个表,表中说明与该URI所表示的原内容的区别。
10.MOVE:请求服务器将指定的页面移至另一个网络地址。
11.COPY:请求服务器将指定的页面拷贝至另一个网络地址。
12.LINK:请求服务器建立链接关系。
13.UNLINK:断开链接关系。
14.WRAPPED:允许客户端发送经过封装的请求。
15.Extension-mothed:在不改动协议的前提下,可增加另外的方法。
HTTP经历了哪些版本都有哪些区别
HTTP/0.9
HTTP协议的初版本,功能简陋,仅支持请求方式GET,并且仅能请求访问HTML格式的资源。
HTTP/1.0
在0.9版本上做了进步,增加了请求方式POST和HEAD;不再局限于0.9版本的HTML格式,根据Content-Type可以支持多种数据格式,即MIME多用途互联网邮件扩展,例如text/html、image/jpeg等;同时也开始支持cache,就是当客户端在规定时间内访问统一网站,直接访问cache即可。
但是1.0版本的工作方式是每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接,就是不支持keepalive。
HTTP/1.1
解决了1.0版本的keepalive问题,1.1版本加入了持久连接,一个TCP连接可以允许多个HTTP请求;加入了管道机制,一个TCP连接同时允许多个请求同时发送,增加了并发性;新增了请求方式PUT、PATCH、DELETE等。
但是还存在一些问题,服务端是按队列顺序处理请求的,假如一个请求处理时间很长,则会导致后边的请求无法处理,这样就造成了队头阻塞的问题;同时HTTP是无状态的连接,因此每次请求都需要添加重复的字段,降低了带宽的利用率。
HTTP/2.0
为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题;HTTP请求和响应中,状态行和请求/响应头都是些信息字段,并没有真正的数据,因此在2.0版本中将所有的信息字段建立一张表,为表中的每个字段建立索引,客户端和服务端共同使用这个表,他们之间就以索引号来表示信息字段,这样就避免了1.0旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率。
网友评论