参考文章链接:https://www.cnblogs.com/an-wen/p/11180076.html
HTTP协议:超文本传输协议(HyperText Transfer Protocol),是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。
它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
(1).支持 客户端/服务器 模式(C/S)
(2).简单快速
客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。
每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
(3).灵活
HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
(4).无连接
无连接的含义是限制 每次连接 只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,立即断开连接。采用这种方式可以节省传输时间。
(5).无状态
无状态是指协议对于 事务处理 没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
另一方面,在服务器不需要先前信息时它的应答就较快。
(6).多次HTTP请求
在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,
例如,CSS,JS文件,图片等等,还会自动发送HTTP请求这些需要的资源。现在的HTTP版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率。
(7).基于TCP协议
HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节底层是基于TCP实现的。
现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。
HTTP由 请求 和 响应 构成,是一个标准的 客户端/服务器 模型(C/S)。HTTP协议永远都是 客户端 发起 请求,服务器 回送 响应。
客户机与服务器建立连接后,发送一个请求给服务器,服务器接收到请求后,给予相应的响应信息,随后便关闭tcp连接。
服务器可能同时接收多个请求,这是就会产生多个session,每个session分别处理各自的请求。
一次HTTP操作称为一个事务,其工作整个过程如下:
(1).地址解析
如用客户端浏览器请求这个页面:http://localhost.com:8080/index.html
从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:http
主机名:localhost.com
端口:8080
对象路径:/index.html
在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。
(2).封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
(3).封装成TCP包,建立TCP连接(TCP的三次握手)
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。
HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口
(4).客户机发送请求命令
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URI:Uniform Resource Identifier)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
(5).服务器响应
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
(6).服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了代码: Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
请求报文:
1.请求行:包含请求方法、URL、HTTP协议版本字段,它们用空格分隔。例如: GET /index.html HTTP/1.1
2.请求头部:由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息;
典型的请求头部有:
User-Agent:产生请求的浏览器类型
Accept:客户端可识别的内容类型列表
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
3.空行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
4.请求数据
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。
响应报文:
HTTP响应报文包括:状态行 消息报头 空行 响应正文
1.状态行:包含HTTP版本、状态码、状态码的描述文本
2.消息报头,用来说明客户端要使用的一些附加信息
3.空行,消息报头后面的空行是必须的
4.响应正文,服务器返回给客户端的文本信息
HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:
(1).GET方法
向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
(2).HEAD方法
与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
(3).POST方法
POST方法向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
(4).PUT方法
PUT方法向指定资源位置上传其最新内容。
(5).DELETE方法
DELETE方法请求服务器删除Request-URI所标识的资源。
(6).TRACE方法
TRACE方法回显服务器收到的请求,主要用于测试或诊断。
(7).OPTIONS方法
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
(8).CONNECT方法
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
常用的HTTP请求方法:
GET: 请求指定的页面信息,并返回实体主体
POST: 向指定资源提交数据进行处理请求,例如提交表单或者上传文件
HEAD: 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
PUT: 从客户端向服务器传送的数据取代指定的文档的内容
DELETE: 请求服务器删除指定的页面
OPTIONS: 允许客户端查看服务器的性能
GET与POST请求的区别:
GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456,POST方法是把提交的数据放在HTTP包的请求体中;
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制;
200 OK: 表示客户端请求成功;
400 Bad Request: 表示客户端请求有语法错误,不能被服务器所理解;
401 Unauthonzed: 表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;
403 Forbidden: 表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;
404 Not Found: 表示请求的资源不存在,例如,输入了错误的URL;
500 Internal Server Error: 表示服务器内部错误,无法完成请求;
503 Service Unavailable: 表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;
HTTP长连接和短连接:
短连接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束中断连接。
长连接:用以保持连接特性,当一个网页打开完成,客户端和服务器的连接不会关闭,再次访问时会继续使用已建立的连接。