介绍HTTP协议是超文本传输??协议(HypertextTransferProtocol)的缩写,是一种用于将超文本从万维网服务器传输到本地浏览器的传输协议。HTTP是基于TCP/IP协议的通信协议,用于传输数据(HTML文件、图片文件、查询结果等)。不涉及数据包(packet)的传输,主要规定了客户端与服务端的通信格式,默认使用80端口。一、Http的特点1、简单、快速:客户端向服务器请求服务时,只需要传递请求方法和路径即可。常用的请求方式有GET、HEAD、PUT、DELETE、POST。每种方法指定一种不同类型的客户端-服务器联系。由于HTTP协议简单,HTTP服务器的程序体积小,所以通信速度很快。2.灵活:HTTP允许传输任何类型的数据对象。3、无连接:无连接的意思是限制每个连接只能处理一个请求。服务器处理完客户端的请求并收到客户端的响应后,断开连接。这样,可以节省传输时间。4.无状态:HTTP协议是无状态的,HTTP协议本身不保存请求和响应之间的通信状态。任意两个请求之间没有依赖关系。直观来说,每个请求都是独立的,与前后请求没有直接联系。该协议本身不保留有关所有先前请求或响应消息的信息。这是为了更快地处理大量交易并保证协议的可扩展性,而HTTP协议特意设计得如此简单。2.Http消息Http消息包括两部分:请求消息和响应消息。请求报文由四部分组成:请求行、请求头、空行和请求体。响应消息由四部分组成:状态行、响应头、空行和响应体。下面详细介绍一下请求报文的各个部分及其作用。1、请求行用于描述请求类型、要访问的资源、使用的HTTP版本。POST/chapter17/user.html在HTTP/1.1上面的代码中,POST代表请求方法,/chapter17/user.html代表URI,HTTP/1.1代表协议和协议版本。现在比较流行的是Http1.1版本。您还可以了解2.0:《让面试官颤抖的 HTTP 2.0 协议面试题》。2、请求头由关键字/值对组成,每行一对,关键字和值之间用冒号“:”分隔。请求标头通知服务器有关客户端的请求。它包含许多有关客户端环境和请求文本的有用信息。其中,例如:Host:表示主机名,虚拟主机。连接:HTTP/1.1新增,使用keepalive,即持久连接,一个连接可以发送多个请求。User-Agent:请求者、兼容性和定制需求。3.空行***一个请求头之后,有一个空行。这条线非常重要。表示请求头已经结束,接下来是请求正文。4、请求体可以携带多个请求参数的数据。name=tom&password=1234&realName=tomson上面代码携带了三个请求参数name,password,realName。3、HTTP请求方式GET:请求指定的页面信息,返回实体主体。HEAD:类似于get请求,只是返回的response中没有具体内容,用于获取header。POST:向指定资源提交数据,用于处理请求(如提交表单或上传文件)。数据包含在请求正文中。PUT:从客户端传输到服务器的数据替换指定文档的内容。DELETE:请求服务器删除指定页面。第四,GET和POST的区别GET在浏览器回滚时无害,POST会重新提交请求。GET请求会被浏览器主动缓存,但是POST不会,除非手动设置。GET请求参数会完整保留在浏览器历史记录中,而POST中的参数不会保留。GET请求的URL中传递的参数有长度限制,而POST没有长度限制。GET参数通过URL传递,POST放在Requestbody中。5、Http状态码状态码由三位数字组成,第一位定义了响应的类别,分为五类:1xx:指示信息——表示请求已经收到,继续处理。2xx:成功——表示请求已被成功接收、理解和接受。3xx:重定向-需要进一步操作才能完成请求。4xx:客户端错误——请求有语法错误或请求无法完成。5xx:服务器端错误-服务器未能完成合法请求。例如,我们通常会看到两种错误状态码:403Forbidden//禁止访问请求的页面404NotFound//请求的资源不存在,例如:输入了错误的URL阅读本文全文《两张趣图助你理解 HTTP 状态码》六、持久化连接1、为什么需要持久连接?在HTTP协议的初始版本中,每次进行HTTP通信时,都必须断开一个TCP连接。就当时的通讯情况来说,因为都是小容量的文字传输,所以连这个都不是什么大问题。但是随着HTTP的普及,文档中包含大量图片的情况越来越多。例如,当使用浏览器浏览包含多张图片的HTML页面时,在发送访问HTML页面资源的请求的同时,还会请求HTML页面中包含的其他资源。因此,每次请求都会造成不必要的TCP连接建立和断开,增加通信开销。2.持久连接的特点为了解决上述TCP连接的问题,HTTP/1.1和部分HTTP/1.0提出了持久连接的方法(HTTPPersistentConnections,也称为HTTPkeep-alive或HTTPconnectionreuse).持久连接的特点是只要任一端没有明确提出断开连接,就会保持TCP连接状态。持久连接的好处是减少了TCP连接重复建立和断开带来的开销,减轻了服务器的负载。另外,减少开销的部分时间使得HTTP请求和响应能够更早结束,从而相应地提高了网页的显示速度。在HTTP/1.1中,默认情况下所有连接都是持久的,但这在HTTP/1.0中并未标准化。虽然有些服务器通过非标准的方式实现了长连接,但是服务器不一定支持长连接。毫无疑问,除了服务端,客户端也需要支持长连接。7.流水线持久连接使得大多数请求以流水线方式发送成为可能。过去发送一个请求后,需要等待并收到响应,才能发送下一个请求。随着管道技术的出现,可以直接发送下一个请求,无需等待响应。这样就可以同时并行发送多个请求,而不用一个接一个地等待响应。通俗的说就是请求一次打包传输,response打包传输回来。管道的前提是在持久连接下。例如,当请求一个包含10张图片的HTML网页时,使用持久连接可以使请求结束比一张一张连接更快。另一方面,流水线比持久连接更快。请求越多,时间差越明显。客户端需要请求这十个资源。以前的做法是在同一个TCP连接中先发送A请求,然后等待服务器响应,收到后再发送B请求,以此类推,而管道机制允许浏览器同时发送这十个请求同样的时间,但是服务器还是按顺序响应A请求,完成后再响应B请求。所以在使用持久连接的情况下,一个连接上消息的传递类似于:Request1->Response1->Request2->Response2->Request3->Response3管道发送变成这样:请求1->请求2->请求3->响应1->响应2->响应3
