聊聊HTTP协议
-
简介:Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
-
HTTP协议属于应用层,是基于TCP/IP协议传输数据。
-
HTTP协议是工作于客户端——服务器架构之上,浏览器作为HTTP客户端通过URL向HTTP服务器发送所有请求,而后服务器根据请求经过处理,返回相应的响应信息。
-
HTTP协议的三特性:
-
无连接:限制每次连接只处理一个请求,当服务器处理完客户请求并返回响应后,即刻断开连接(类似短连接),以此节省传输时间,HTTP/1.0默认为短连接而HTTP/1.1后默认为长连报文头中会有keepAlive,服务器端需开启支持。
-
媒体独立:只要客户端和服务器端知道如何处理数据内容,任何数据类型都可以通过HTTP发送,可指定适合的内容类型。
-
无状态:对事务处理没有记忆功能,这也就意味着后续处理需要之前的信息时需要重传,为了保持会话,我们使用了COOKIE和SESSION来保持会话机制。
-
-
工作原理:
-
HTTP长连接/短连接:其实说的是TCP/IP传输层的长连接和短连接;
长连接:两端数据传输完成后,TCP连接会保持不断,等待在同域名下复用此通道传输数据。
短连接:两端数据传输完成后,TCP连接直接断开,下次需要时,再次建立新连接传输数据。
两者优劣:长连接比短连接能带来更高的TPS(每秒处理消息数,也为吞吐量),更低的CPU消耗,更少的IO,更高的内存占用,更少的系统调用
-
Apache 可在prefork模式下进行压力测试使用ab。
-
可参见 web服务器长连接
-
-
-
长连接的使用场景以及Web_Server相关配置
-
我们在什么情况下适合使用长连接:
-
服务器内存充足的情况下,KeepAlive on or off 对系统性能影响不大。
-
若服务器上静态资源(HTML、js、CSS、图片文件)居多时,建议开启KeepAlive。
-
若服务器上多为动态请求(数据库连接较多,对文件系统访问较多),KeepAlive 关掉,会节省一定的内存,节省出来的内存可作为文件系统缓存,降低I/O压力。
-
-
Web_Server长连接配置:
-
Apache:
// httpd.conf 引用此扩展文件,默认不引用
#Include conf/extra/httpd-default.conf
// 编辑 httpd-default.conf 文件部分参数罗列
// 发起请求后和响应前的超时时间
TimeOut 300
// on or off KeepAlive
KeepAlive on
// 允许长连接请求最大数
MaxKeepAliveRequests 100
// 等待来自相同客户端下次连接,保持时间设置
KeepAliveTimeOut 5 -
Nginx:Nginx反向代理实现长连接
-
-
-
消息结构
-
客户端请求消息格式:
-
请求头(header)
-
请求行(request line)
-
空行
-
请求数据
-
-
-
服务器响应消息格式:
-
状态行
-
消息报头
-
空行
-
响应正文
-
-
-
常用方法
方法 描述 是否包含主题 GET 从服务器获取一份文档 否 POST 向服务器发送需要处理的数据 是 PUT 将请求的主题部分储存在服务器上 是 DELETE 从服务器删除一份文档 否 -
GET和POST请求方式对比
-
GET:从指定的资源请求数据。
-
注意:
-
GET 请求可被缓存
-
GET 请求保留在浏览器历史记录中
-
GET 请求可被收藏为书签
-
GET 请求不应在处理敏感数据时使用
-
GET 请求有长度限制
-
GET 请求只应当用于取回数据
-
GET请求所传参数会在请求URL的
?
后通过&
符拼接发送,且在地址栏可见
-
-
POST:向指定的资源提交要被处理的数据
-
注意:
-
POST 请求不会被缓存
-
POST 请求不会保留在浏览器历史记录中
-
POST 不能被收藏为书签
-
POST 请求对数据长度没有要求
-
-
-