顺⼿写⼀下HTTP协议
本⽂⽬录
⼀什么是HTTP协议
HTTP协议是Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于从万维⽹服务器传输超⽂本到本地浏览器的传送协议。HTTP 是基于 TCP/IP 协议通信协议来传递数据(HTML ⽂件、图⽚⽂件、查询结果等)。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使⽤80端⼝。
⼆ Http的特点
1、简单快速
客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常⽤的有GET、HEAD、PUT、DELETE、POST。每种⽅法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模⼩,因⽽通信速度很快。
html实现用户注册登录代码2、灵活
HTTP允许传输任意类型的数据对象。
3、⽆连接
⽆连接的含义是限制每次连接只处理⼀个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采⽤这种⽅式可以节省传输时间。
4、⽆状态
HTTP协议是⽆状态的,HTTP 协议⾃⾝不对请求和响应之间的通信状态进⾏保存。任何两次请求之间
都没有依赖关系。直观地说,就是每个请求都是独⽴的,与前⾯的请求和后⾯的请求都是没有直接联系的。协议本⾝并不保留之前⼀切的请求或响应报⽂的信息。这是为了更快地处理⼤量事务,确保协议的可伸缩性,⽽特意把 HTTP 协议设计成如此简单的。
三 Http 报⽂
Http 报⽂包括请求报⽂和响应报⽂两⼤部分,其中请求报⽂由请求⾏(request line )、请求头(header )、空⾏和请求体四个部分组成。⽽
响应报⽂由状态⾏、响应头部、空⾏和响应体四个部分组成。接下来我们详细介绍下请求报⽂的各个部分及其作⽤。
1、请求⾏
⽤来说明请求类型、要访问的资源以及所使⽤的HTTP 版本。
以上代码中 POST 代表请求⽅法, /chapter17/user.html 表⽰URI , HTTP/1.1 代表协议和协议的版本。现在⽐较流⾏的是Http1.1版本。⼤家也可以了解下 2.0 。
2、请求头
由关键字 / 值对组成,每⾏⼀对,关键字和值⽤英⽂冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息。它包含许多有关的客户端环境和请求正⽂的有⽤信息。其中⽐如:
Host :表⽰主机名,虚拟主机。
Connection :HTTP/1.1增加的,使⽤keepalive ,即持久连接,⼀个连接可以发多个请求。
User-Agent :请求发出者,兼容性以及定制化需求。1POST /chapter17/user.html HTTP /1.1
3、空⾏最后⼀个请求头之后是⼀个空⾏,这个⾏⾮常重要,它表⽰请求头已经结束,接下来的是请求正⽂。
4、请求体
可以承载多个请求参数的数据。
上⾯代码,承载着name 、password 、realName 三个请求参数。
三、HTTP 请求⽅法
GET :请求指定的页⾯信息,并返回实体主体。
HEAD :类似于get 请求,只不过返回的响应中没有具体的内容,⽤于获取报头。
POST :向指定资源提交数据进⾏处理请求(例如提交表单或者上传⽂件)。数据被包含在请求体中。
PUT :从客户端向服务器传送的数据取代指定的⽂档的内容。
DELETE :请求服务器删除指定的页⾯。
四、GET 与POST 区别
GET 在浏览器回退时是⽆害的,⽽POST 会再次提交请求。
GET 请求会被浏览器主动缓存,⽽POST 不会,除⾮⼿动设置。
GET 请求参数会被完整保留在浏览器历史记录⾥,⽽POST 中的参数不会被保留。
GET 请求在URL 中传送的参数是有长度限制的,⽽POST 没有限制。
GET 参数通过URL 传递,POST 放在Request body 中。
五、Http 状态码状态代码有三位数字组成,第⼀个数字定义了响应的类别,共分五种类别:
1xx :指⽰信息——表⽰请求已接收,继续处理。
2xx :成功——表⽰请求已被成功接收、理解、接受。
3xx :重定向——要完成请求必须进⾏更进⼀步的操作。
4xx :客户端错误——请求有语法错误或请求⽆法实现。
5xx :服务器端错误——服务器未能实现合法的请求。⽐如我们平时常见两种出错的状态码:
六、持久连接
1、为什么需要持久连接
HTTP 协议的初始版本中,每进⾏⼀次HTTP 通信就要断开⼀次TCP 连接。以当年的通信情况来说,因
为都是些容量很⼩的⽂本传输,所以即使这样也没有多⼤问题。可随着 HTTP 的 普及,⽂档中包含⼤量图⽚的情况多了起来。⽐如,使⽤浏览器浏览⼀个包含多张图⽚的HTML 页⾯时,在发送请求访问 HTML 页⾯资源的同时,也会请 求该 HTML 页⾯⾥包含的其他资源。因此,每次的请求都会造成⽆谓的TCP 连接建⽴和断开,增加通信量的 开销。1name =kevin&password =1234&realName =lqz 1
2403 Forbidden //对被请求页⾯的访问被禁⽌404 Not Found //请求资源不存在,⽐如:输⼊了错误的URL
2、持久连接的特点
为解决上述 TCP 连接的问题, HTTP/1.1 和⼀部分的 HTTP/1.0 想出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive
或 HTTP connection reuse)的⽅法。持久连接的特点是,只要任意⼀端没有明确提出断开连接,则保持TCP连接状态。
持久连接的好处在于减少了 TCP 连接的重复建⽴和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP 请求和响应能够更早地结束,这样 Web 页⾯的显⽰速度也就相应提⾼了。
在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内并未标准化。虽然有⼀部分服务器通过⾮标准的⼿段实现了持久连接,
但服务器端不⼀定能够⽀持持久连接。毫⽆疑问,除了服务器端,客户端也需要⽀持持久连接。
七、管线化
持久连接使得多数请求以管线化(pipelining)⽅式发送成为可能。从前发送请求后需等待并收到响应,才能发送下⼀个请求。管线化技术出现后,不⽤等待响应亦可直接发送下⼀个请求。
这样就能够做到同时并⾏发送多个请求,⽽不需要⼀个接⼀个地等待响应了。通俗地讲,请求打包⼀次传输过去,响应打包⼀次传递回来。管线化的前提是在持久连接下。
假如当请求⼀个包含 10 张图⽚的 HTML Web 页⾯,与挨个连接相⽐,⽤持久连接可以让请求更快结束。⽽管线化技术则⽐持久连接还要快。请求数越多,时间差就越明显。客户端需要请求这⼗个资源。以前的做法是,在同⼀个TCP连接⾥⾯,先发送A请求,然后等待服务器做出回应,收到后再发出B请求,以此类推,⽽管道机制则是允许浏览器同时发出这⼗个请求,但是服务器还是按照顺序,先回应A请求,完成后再回应B请求。
于是在使⽤持久连接的情况下,某个连接上消息的传递类似于:
请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3
管线化⽅式发送变成了类似这样:
请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论