HTTP--Hyper Text Transfer Protocol,超文本传输协议,是一种创建在TCP上的无状态链接。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器处理请求而后响应,响应的内容包括协议的版本、状态码、状态短语、响应头部和响应数据。html
HTTP之请求消息Request
客户端发送一个HTTP请求到服务器的请求消息包括如下格式:浏览器
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
- 请求行包括请求方法,请求URL和协议的版本。
POST请求例子,使用Charles抓取的request:
POST / HTTP1.1 Host:www.wrox.com User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) Content-Type:application/x-www-form-urlencoded Content-Length:40 Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley
第一部分:请求行,第一行明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:请求数据,第八行。缓存
HTTP之响应消息Response
通常状况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。安全
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

例子服务器
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html> <head></head> <body> <!--body goes here--> </body> </html>
第一部分:状态行,由HTTP协议版本号, 状态码, 状态短语 三部分组成。
第一行为状态行,(HTTP/1.1)代表HTTP版本为1.1版本,状态码为200,状态消息为(ok)app
第二部分:消息报头,用来讲明客户端要使用的一些附加信息
第二行和第三行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8框架
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息。
空行后面的html部分为响应正文。分布式
HTTP之状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:post
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已经处理完成
3xx:重定向--要完成请求必须进行更进一步的操做
4xx:客户端错误--请求有语法错误或请求没法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码:大数据
200 OK //客户端请求成功 400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用 403 Forbidden //服务器收到请求,可是拒绝提供服务 404 Not Found //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
更多状态码http://www.runoob.com/http/http-status-codes.html
Cookie和Session的区别和联系
Cookie和Session都是为了保存客户端和服务端之间的交互状态,实现机制不一样,各有优缺点。
首先一个最大的区别就是Cookie是保存在客户端而Session就保存在服务端的。在实际使用中就要结合Cookie和Session的优缺点针对不一样的问题来设计解决方案。
Cookie是客户端请求服务端时服务器会将一些信息以键值对的形式返回给客户端,保存在浏览器中,交互的时候能够加上这些Cookie值。用Cookie就能够方便的作一些缓存。Cookie的缺点是大小和数量都有限制;Cookie是存在客户端的可能被禁用、删除、篡改,是不安全的;Cookie若是很大,每次要请求都要带上,这样就影响了传输效率。
Session是基于Cookie来实现的,不一样的是Session自己存在于服务端,可是每次传输的时候不会传输数据,只是把表明一个客户端的惟一ID(一般是JSESSIONID)写在客户端的Cookie中,这样每次传输这个ID就能够了。Session的优点就是传输数据量小,比较安全。可是Session也有缺点,就是若是Session不作特殊的处理容易失效、过时、丢失或者Session过多致使服务器内存溢出,而且要实现一个稳定可用安全的分布式Session框架也是有必定复杂度的。
什么是Http协议无状态协议?怎么解决Http协议无状态协议?
-
无状态协议,指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。
- 能够使用Cookie来解决无状态的问题,Cookie就至关于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。
http1.1的特色
a、默认持久链接,节省通讯量,只要客户端服务端任意一端没有明确提出断开TCP链接,就一直保持链接,能够发送屡次HTTP请求 。
b、管线化(pipelining),客户端能够同时发出多个HTTP请求,而不用一个个等待响应 。
c、断点续传,就是能够将一个大数据,分段传输,客户端能够慢慢显示。
http2.0的特色 a、二进制分帧,采用二进制格式而非文本格式 。其中 HTTP1.x 的首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面。b、多路复用,容许同时经过单一的 HTTP/2 链接发起多重的请求-响应消息。c、首部压缩,下降开销 d、服务器推送,服务器能够对一个客户端请求发送多个响应,服务器向客户端推送资源无需客户端明确的请求。