定义:
超文本传输协议(HyperText Transfer Protocol ,HTTP )是一个简单的请求-响应协议,他通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个雷士MIME得格式。这个简单模型是在早起Web成功的有功之臣,因为它使开发和部署直接了当。
http协议的特点:
- 支持客户端/服务器的模式
可以支持B/S结构
- http协议简单
使得HTTP服务器的程序规模小,因而通信速度很快。
- 允许传输任意的数据类型
text/html:HTML格式
text/plain:纯文本格式
text/xml:XML格式
image/gif:gif图片格式
image/jpeg:jpg图片格式
imag/png:png图片格式
等等。。。
- 无连接
无连接是限制每次连接只处理一个请求。服务器 处理完客户的请求,并收到客户的应答后,即断 开连接。采用这种方式可以节省传输时间。在1.1 版本中,采用长连接形式,但是不代表一直保持 连接,当超过连接时长限制时,就会断开连接。
- 无状态
无状态是指协议对于事务处理没有记忆能力,缺 少状态意味着如果后续处理需要前面的信息,则 它必须重传,这样可能导致每次连接传送的数据 量增大。另一方面好处就是,如果后续的连接不 需要之前提供的信息,响应就会比较快.而为了解 决HTTP的无状态特性,出现了Cookie和Session技 术。
工作流程:
一次HTTP操作称为一个事务,其工作过程可分为四步:
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
http的组成
http状态码:
10x:消息,指连接状态
20x:成功
30x:重定向
40x:找不到资源(客户端错误)
50x:服务器错误
http的请求方式:
- 常用
GET(获取):请求获取Request-URI所标识的 资源。
POST(更新或新增):在Request-URI所标识的 资源后附加新的数据。
PUT(新增):请求服务器存储一个资源,并用 Request-URI作为其标识。
DELETE(删除):请求服务器删除Request-URI 所标识的资源。
HTTP的工作原理:
- 客户端的请求的过程
1.向服务器发送请求。
2.接收服务器返回的报文并解释成友善的信 息供阅读。
3.客户端大概有:浏览器,应用程序等。
4.如今时代可能使用最多的就是浏览器, 当 用户在地址栏输入网址回车时,浏览器会为什 么做如下处理:
a.解析协议和域名。
b.使用HTTP协议并创建请求报文向服务端发 送请求。
c.接收服务器返回的内容并展示给客户。
- 服务器端的响应过程
一个http响应报文由状态行<status-line>、响应头部<headers>、空行<blank-line>
和响应数据<response-body>4个部分组成,响应报文的一般格式如下图:
(1)状态行: 由HTTP协议版本、服务器返回的响应状态码和响应状态码的文本描述组成。
(2)响应头部:由关键字/值对组成,每行一对,关键字和值用英文冒号”:“分隔,典型的响应头有:
Location:用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源
Server:包含了服务器用来处理请求的软件信息及其版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息
Vary:指示不可缓存的请求头列表
Connection:连接方式
对于请求来说:close(告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接,不等待本次连接的后续请求了)。keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求);
对于响应来说:close(连接已经关闭); keepalive(连接保持着,在等待本次连接的后续请求); Keep-Alive:如果浏览器请求保持连接,则该头部表明希望WEB 服务器保持连接多长时间(秒);例如:Keep-Alive:300;
WWW-Authenticate:必须被包含在401 (未授权的)响应消息中,这个报头域和前面讲到的Authorization 请求报头域是相关的,当客户端收到 401 响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization 报头域的请求
(3)空行:最后一个响应头部之后是一个空行,发送回车符和换行符,通知浏览器以下不再有响应头部。
(4)响应数据:服务器返回给客户端的文本信息。
原文链接:https://blog.youkuaiyun.com/lzghxjt/article/details/51458540
tcp(三次握手,四次挥手)
1.三次握手
(1)第一次握手
Client端将SYN置为1,表示希望与Server端建立连接;序号seq初始化为J,并将该数据包发送给Server端,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手
Server端检查报文发现SYN为1,知道了Client端想建立连接;Server端将SYN置为1,表示Server端也希望与Clinet端建立连接;Server端将ACK置为1,表示收到了Client端建立连接的请求;Server端将seq初始化为K;Server端将ack置为J+1,这里ack=seq + 1,还有疑问(如果控制位占1字节,为什么第三次握手时有ACK=1、SYN=1,ack为什么不是+2?如果+1只是告诉服务端收到了消息,那ACK控制位就已经达到目的了,为什么还要多次一举再加一个ack?)。第二次握手包括服务端确认客户端发来的报文和服务端向客户端发送报文两个过程。
(3)第三次握手
Client收到报文后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。第三次握手包括客户端确认服务端发来的报文,客户端向服务端发送报文和服务端确认客户端发来的报文三个过程。
2.四次挥手
(1)第一次挥手
假设客户端主动发起断开请求,客户端向服务端发送报文,报文首部包括FIN=1,这个控制位代表客户端想要断开连接;序列号seq=u,这时客户端进入FIN-WAIT-1(终止等待1)状态,停止发送数据,并等待服务端的确认。
(2)第二次挥手
服务端收到客户端的报文后发出确认报文,控制位ACK=1;确认号ack=u+1;序列号seq=v;然后服务端就进入CLOSE-WAIT(关闭等待)状态。TCP服务端会告知上层的应用进程来自客户端的连接即将关闭,让应用程序做好相应的准备。此时客户端已经没有数据向服务端发送了,但服务端向客户端发送数据,客户端依然能接收。
(3)第三次挥手
客户端收到服务器确认报文后,进入FIN-WAIT-2状态。此时服务器再次发送报文,报文首部控制位FIN=1,表示服务端向客户端发送断开连接请求;确认标志ACK=1;确认序号ack=u+1;序号seq=w,然后服务器进入LAST-ACK(最后确认态),等待客户端确认。
(4)第四次挥手
客户端收到了服务端的断开连接的报文后,必须发出确认报文,标志位ACK=1;确认号ack=w+1;序号seq=u+1;之后客户端就进入了TIME-WAIT(时间等待)状态。注意此时客户端的TCP连接还没有释放,必须经过2*MSL(最长报文段寿命)的时间后,客户端才进入CLOSED状态关闭连接。而服务端只要收到了客户端发送的确认报文后就会进入CLOSED状态关闭服务端连接。当客户端和服务端都进入了CLOSED状态后,客户端和服务端之间的连接才完全断开。