Http协议
1、HTTP协议是超文本传输协议,用于万维服务器和浏览器之间传输数据。
2、HTTP协议基于TCP/IP通信协议来传递数据,TCP/IP协议共分为4层,应用层,传输层、网络层、数据链路层,Http协议位于应用层。
TCP/IP:传输控制协议,三次握手,可靠,双向通信。
UDP:用户数据包协议,无连接,提供数据发送包。
HTTP:客户端/服务端(C/S)的架构、模型HTTP是无连接、无状态、媒体独立性。
3、Http采用明文传输,因此存在很大的安全隐患,即使使用对称加密和非对称加密也存在中间人攻击风险,对称加密第一次被发送密钥的时候可能被截取,非对称加密,可能会会伪造公钥和私钥对,为了解决此问题,采用https协议,https协议核心,采用非对称加密并引入第三方机构,对公钥进行认证,中间人就无法伪造密钥对。
4、客户端请求消息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
5、HTTP响应由四个部分组成:状态行、消息报头、空行和响应正文。
6、常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
7、Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
8、关于http协议长链接短接的问题:
http协议基于请求/响应模式,数据传输完成就断开,本质上是无链接的,只是一个应用层协议,只有传输层才需要建立链接。http所谓的长链接,本质上是TCP的长链接,因为链接是一种宝贵的资源,http 1.1协议,为了复用链接资源,所以让TCP的链接活的久一些。
http1.1是如何复用TCP链接的呢:
打开一个网页里肯定还包含了CSS、JS等等一系列资源,如果你是短连接(也就是每次都要重新建立TCP连接)的话,那你每打开一个网页,基本要建立几个甚至几十个TCP连接,浪费很多资源。
但如果是长连接的话,那么这么多次HTTP请求(这些请求包括请求网页内容,CSS文件,JS文件,图片等等),其实使用的都是一个TCP连接,很显然是可以节省很多消耗的。
数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。
http keep-alive这个参数主要作用,用于判断TCP长链接是否断开。
参考链接:https://blog.csdn.net/maquealone/article/details/87345795
9、配置支持Http协议
可通过修改服务器配置文件的方法支持http1.1协议,例如:
nginx在反向代理HTTP协议的时候,默认使用的是HTTP1.0去向后端服务器获取响应的内容后在返回给客户端。
HTTP1.0和HTTP1.1的一个不同之处就是,HTTP1.0不支持HTTP keep-alive。
nginx在后端服务器请求时使用了HTTP1.0同时使用HTTP Header的Connection:Close通知后端服务器主动关闭连接。这样会导致任何一个客户端的请求都在后端服务器上产生了一个TIME-WAIT状态的连接。所以我们需要在Nginx上启用HTTP1.1的向后端发送请求,同时支持Keep-alive。
配置HTTP1.1
http{
''' 省去其他的配置
upstream www{
keepalive 50; # 必须配置,建议50-100之间
'''
}
server {
'''省去其他的配置
location / {
proxy_http_version 1.1; # 后端配置支持HTTP1.1,必须配
proxy_set_header Connection ""; # 后端配置支持HTTP1.1 ,必须配置。
}
'''
}
'''
}
我们增加三个参数keepalive 50,proxy_http_version 1.1 , proxy_set_header Connection 来配置。
本文地址:https://blog.csdn.net/u011582840/article/details/107329823
下一篇: 特殊的赋值运算符
推荐阅读
-
Android studio中HTTP协议代理怎么设置?
-
HttpUtils 发送http请求工具类(实例讲解)
-
mssql sqlserver 禁止删除数据表中指定行数据(转自:http://www.maomao365.com/?p=5323)
-
Android中发送Http请求(包括文件上传、servlet接收)的实例代码
-
ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER方法探讨
-
Java网络编程实现HTTP协议(Socket API)
-
Java编程实现基于TCP协议的Socket聊天室示例
-
Java下http下载文件客户端和上传文件客户端实例代码
-
iOS的HTTP请求和请求回执类用法小结
-
xcode升级后ios9.0不能使用http协议的版本的解决方法介绍