最后更新:2022-08-02 08:33:54 手机定位技术交流文章
TTP协议(英语:TTP protocol)是超文本传输协议(Hyper Text Transfer Protocol)的一个缩写,用于将超文本从一个万维网服务器转移到本地浏览器。
HTTP是传输数据(HTML文件、图像文件、查询结果等)的TCP/IP通信协议。
HTTP协议在客户端-服务器架构上运行。浏览器作为HTTP客户端,通过URL发送所有请求给HTTP服务器。
网络服务器包括: Nginx 、 Apache 和 Internet Information Services。
网络服务器根据收到的请求向客户端发送响应消息。
默认的HTTP端口号码是80,但您可以将其更改为8080或其他端口。
客户端分析DNS域名,获取相应的IP地址
根据此IP,找到相应的服务器建立连接(三个握手)
在建立TCP连接后启动HTTP请求(完整的http请求声明)
服务器响应HTTP请求,客户端获取HTML代码
客户端使用HTML代码中的资源(如js、css、图像等)来分析HTML代码和渲染网页。
服务器关闭TCP连接(四手)
HTTP三个注释:
HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
HTTP无状态: HTTP协议无状态。无状态意味着协议没有处理事务的内存容量。缺乏状态意味着,如果后续行动需要事先的资料,则它必须重传,这可能导致每次连接时发送的数据量增加。另一方面,当服务器不需要以前的信息时,它会更快地响应。
下面的图表显示了HTTP协议通信过程:
HTTP是一个通过可靠的链接交换信息的客户端/服务器(C/S)架构模型,是一个无状态请求/响应协议。
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
HTTP“服务器”也是一种应用程序(通常是网络服务,如Nginx、Apache Web服务器或IIS服务器),它接收客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers,URI)来传输数据和建立连接。
URL:统一资源定位器
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
(QQ音乐_百度搜索, 此连结显示请求标题的内容)


HTTP响应也由四个部分组成:状态行、消息头条、空行和响应规则表达式,分别。
实例
下面的例子是使用GET传输数据的典型例子:
客户端请求:
服务端响应:
输出结果:
根据HTTP标准,HTTP请求可以使用多个请求方法。
HTTP1.0定义了三个请求方法:GET、 POST和HEAD。
HTTP1.有五种新的请求方法: Options, PUT, DELETE, TRACE, and CONNECT.
重点方法:
获取: 简单的获取数据( 获取索引.(html页)
POST:上传/创建文件(生成新数据)
PUT:保存数据(覆盖/更新文件、图片等,不会生成新的数据)
DELETE:删除
HTTP请求头提供关于请求、响应或其他发送实体的信息。
在本节我们将详细介绍HTTP响应标题信息。
| 应答头 | 说明 |
|---|---|
| Allow | 服务器支持哪些请求方法(例如GET、 POST等)。 |
| Content-Encoding | 文档编码方法。只有在解码后才能获得在“内容类型”标题中指定的内容类型。使用gzip压缩文档可以大大降低HTML文档的下载时间。Java的GZIPOutputStream可以方便地压缩gzip,然而,只有Unix上的Netscape和Windows上的IE4和IE5都支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,返回由gzip压缩的HTML页面,用于gzip启用浏览器,返回其他浏览器的正常页面。 |
| Content-Length | 表示内容长度。只有当浏览器使用持久的HTTP连接时才需要这些数据。如果你想利用长期的联系,您可以将输出文件写入ByteArrayOutputStream,完成后查看其大小,然后将值放在“内容长度”头上,最后通过byteArrayStream.WriteTo(response.getOutputStream()发送内容。 |
| Content-Type | 指示文件的MIME类型。Servlet默认为text/plain,但通常需要明确指定为 text/html。由于经常需要设置内容类型,HttpServletResponse因此提供了一个特殊的方法setContentType。 |
| Date | 当前GMT时间.您可以使用setDateHeader设置这个标题,以避免转换时间格式的麻烦。 |
| Expires | 该文件应该什么时候被认为已经过时,因此不再存档? |
| Last-Modified | 最后一次文件更改.客户可提供一个日期,提供“如果-修改-自”请求标题,申请将被视为有条件的GET,只将返回更改时间较指定时间晚的文件,否则返回一个304(Not Modified)状态。最后修改也可以使用setDateHeader方法设置。 |
| Location | 指示客户端应该去何处检索文档。 位置通常不是直接设置的,而是通过HTTP ServletResponse sendRedirect 方法,同时设置状态代码为 302。 |
| Refresh | 指示浏览器应该更新该文档多久,以秒计。除了更新当前文件外,也可以使用setHeader("Refresh","5; URL= http://host/path 让浏览器阅读指定的页面。 注意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL= http://host/path ">实施,这是因为,自动更新或重新引导对于不能使用CGI或Servlet的HTML编写者来说非常重要。但是,对瑟夫莱特来说,直接设置刷新头很容易.注意“更新”表示“在N秒后更新此页或访问指定页”,而不是“每N秒浏览这个页面或访问指定的页面”。因此,每次持续更新请求时,发送一次更新头,发送204个状态代码可以阻止浏览器继续更新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。注意,更新头条不属于HTTP 1.1的正式标准的一部分,而是一个扩展,但Netscape和IE都支持它。 |
| Server | 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。 |
| Set-Cookie | 设置与页面关联的cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),相反,您应该使用HTTPServletResponse提供的特殊方法 addCookie。请参见以下关于Cookie设置的讨论。 |
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
英文版本的HTTP状态代码是HTTP状态代码。
以下是常见的HTTP状态代码:
200 - 请求成功
301-资源(例如网页)永久转移到其他URL
302-资源(例如网页)临时转移到其他URL
404 - 请求的资源(例如网页)不存在
403 -服务器了解客户端的请求,但拒绝执行请求
500 - 内部服务器错误
HTTP状态码分类
HTTP状态代码由三个十进制数字组成,第一个十进制数字定义了状态代码的类型,第二个两个十进制数字没有分类函数。
HTTP状态代码列表:
| 状态码 | 状态码英文名称 | 中文描述 |
|---|---|---|
| 100 | Continue | 继续下去。 客户应该继续要求 |
| 101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
| 200 | OK | 请求成功。 一般用于GET和 POST请求 |
| 201 | Created | 创建。 成功地请求并创建新的资源 |
| 202 | Accepted | 请求接受,但未处理完成 |
| 203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
| 204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
| 205 | Reset Content | 如果服务器正常处理,用户端口(例如浏览器)应该重新定位文件视图。 这个返回代码可以清除浏览器的表格字段 |
| 206 | Partial Content | 内容的一部分。 服务器成功处理了一些GET请求 |
| 300 | Multiple Choices | 请求的资源可以包含多个位置,相应地返回用户终端(例如浏览器)选择的资源功能和地址列表 |
| 301 | Moved Permanently | 请求资源已经永久移到一个新的URI,返回信息将包含一个新的URI,浏览器将自动导航到新的URI。 今后任何新的请求都应该被一个新的URI取代 |
| 302 | Found | 它与301类似,但资源只能暂时移动。 用户应该继续使用原来的URI |
| 303 | See Other | 类似于301。 使用GET和 POST请求查看 |
| 304 | Not Modified | 请求的资源未被修改,当服务器返回此状态代码时,服务器不会返回任何资源。 客户通常通过提供一个标记,表示客户只在指定日期后返回修改的资源,以缓存访问的资源 |
| 305 | Use Proxy | 使用代理。 请求的资源必须通过代理访问 |
| 306 | Unused | 已经丢弃的HTTP状态代码 |
| 307 | Temporary Redirect | 临时重新定位。 类似于 302。 使用GET请求重新定位 |
| 400 | Bad Request | 客户端请求有一个语法错误,服务器无法理解 |
| 401 | Unauthorized | 请求用户身份验证 |
| 402 | Payment Required | 保留,将来使用 |
| 403 | Forbidden | 服务器了解客户端的请求,但拒绝执行请求 |
| 404 | Not Found | 服务器无法根据客户的要求找到资源(页面)。 通过这个代码,网站设计师可以设置个人页面“您请求的资源无法找到” |
| 405 | Method Not Allowed | 客户端请求中的方法被禁止 |
| 406 | Not Acceptable | 服务器不能根据客户端请求的内容特性完成请求 |
| 407 | Proxy Authentication Required | 请求要求代理人的认证,类似于401,但请求者应该使用代理人进行授权 |
| 408 | Request Time-out | 服务器等待客户端发送请求太长,太晚 |
| 409 | Conflict | 服务器为客户端完成的PUT请求可能会返回这个代码,当服务器处理请求时发生了冲突 |
| 410 | Gone | 客户请求的资源不再存在。 410与404不同,如果以前使用的资源现在以410代码永久删除,网站设计师可以通过301代码指定资源的新位置 |
| 411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
| 412 | Precondition Failed | 客户请求信息的前提错误 |
| 413 | Request Entity Too Large | 由于请求的实体太大,服务器无法处理请求,因此请求被拒绝。 为了防止客户端继续请求,服务器可能关闭连接。 如果服务器暂时无法处理,它将包含一个“再尝试后”响应 |
| 414 | Request-URI Too Large | 请求的URI太长(URI通常是URL),服务器无法处理 |
| 415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
| 416 | Requested range not satisfiable | 客户端请求的范围无效 |
| 417 | Expectation Failed | 服务器无法满足预期请求标题信息 |
| 500 | Internal Server Error | 内部服务器错误,无法完成请求 |
| 501 | Not Implemented | 服务器不支持请求函数,无法完成请求 |
| 502 | Bad Gateway | 当服务器试图作为门户或代理执行请求时,远程服务器收到一个无效的响应 |
| 503 | Service Unavailable | 由于过载或系统维护,服务器暂时无法处理客户端请求。 延迟的长度可以包含在服务器的“再尝试后”项中 |
| 504 | Gateway Time-out | 作为门户或代理的服务器,不会及时从远程服务器接收请求。 |
| 505 | HTTP Version not supported | 服务器不支持请求的HTTP协议版本,无法处理它 |
HyperText Transfer Protocol over Secure Socket Layer (HTTPS)。事实上,HTTPS并不是一个新的协议,谷歌早在很久以前就上市了,目的是确保数据的安全。 近些年,Google、Baidu、Facebook 等这样的互联网巨头,无意地与HTTPS的引入结合起来,国内外的许多大型互联网公司也推出了完整的HTTPS,这也是未来互联网发展的趋势。
对称加密
A要给B发送数据
1、A做一个对称密钥 2、使用密钥给文件加密 3、发送加密以后的文件和钥匙 4、B拿钥匙解密
加密和解密都使用相同的密钥。
不对称加密 -- 公共密钥加密,私钥解密
A要给B发送数据
做一对不对称键(公共键、私人键)
2、发送公钥给A
A采用公开密码加密数据
向B发送加密数据
5、B拿私钥解密
哈希算法将任何长度的信息转换为更短的固定长度值,通常比信息短得多。
例如: MD5, SHA-1, SHA-2, SHA-256等。
数字签名 签名被添加到信息内容( Hash 之后的值)来证明信息没有被修改。 Hash 值通常被加密 ( 即 签名 ) 并与信息一起发送,以确保 Hash 值没有被修改。
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是客户端浏览器或其他程序与Web服务器之间的应用程序级通信协议。
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS,换句话说,在HTTP下添加SSL层,HTTPS的安全基础是SSL,所以加密的细节需要SSL,用于安全HTTP数据传输。
如上面所示,HTTPS具有比HTTP更高的SSL/TLS水平
SSL/TLS: Secure Sockets Layer (SSL)及其继任者, Transport Layer Security (TLS)。TLS是一个为网络通信提供安全和数据完整性的安全协议。TLS和SSL提供传输层的数据通信加密的安全支持。
SSL协议可分为两层:SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,在实际数据传输开始之前使用,身份认证 、 谈判加密算法 、 加密钥匙交换等.相当于连接
SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。相当于通信
SSL提供的服务主要是:
ssl:验证和数据加密。 确保数据完整性1)验证用户和服务器,确保数据被发送到正确的客户端和服务器;
(二)加密数据以防止数据在中间被盗;
(三)维护数据的完整性,确保数据在传输过程中不会改变。
1.HTTP访问过程
如上图所示,HTTP请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,“裸奔”在互联网上,所以很容易遭到黑客的攻击,如下:
正如你所看到的,客户端发送的请求很容易被黑客截获,如果攻击者是一个服务器,它可以返回任何信息给客户端而不被客户端发现。
因此与HTTP传输相关的风险是:
窃听威胁: 黑客可以检测通信.
操作风险: 黑客可以修改通信内容.
冒险: 黑客可以通过假装是别人来参与通信.
那有没有一种方式既可以安全的获取公钥,又能防止黑客冒充呢? 那就需要用到终极武器了:SSL 证书(申购)
证书:.crt, .pem
私钥:.key
证书请求文件:csr

如上所示,在步骤2中,服务器将SSL证书发送给客户端。SSL证书的具体内容包括:
(一)证书发行人(CA证书中心)
(2)证书的有效期
(3)公钥
(4)证书所有者
(五)签名-- 签名可以理解为银行钞票内部的伪造标签。
客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明如下:
(1)首先浏览器在证书中读取证书持有人、有效性等信息并检查
(二)浏览器开始寻找在操作系统内嵌入的信任证书签发人的CA和服务器签发的证书中的签发人的CA,以验证证书是否向合法机构签发
(3)如果您无法找到它,浏览器将报告一个错误,表示服务器发送的证书不值得信任。
(4)如果发现,浏览器将从操作系统中提取发行人CA的公开密钥,然后解密由服务器发出的证书中的签名
(五)浏览器使用相同的 hash 算法计算由服务器发送的证书的 hash 值,并与证书中的签名比较计算的 hash 值
(六)如果结果一致,服务器发出的证书是真实且不误导的
(7)此时,浏览器可以读取证书中的公共密钥进行后续加密
(8)客户与网络进行对称加密算法的协商,客户生成对称加密密钥,使用网络公共密钥加密,发送给网络服务器,网络服务器使用网络私人密钥解密
(9)使用对称加密键传输数据和验证数据完整性
因此,传输比HTTP更安全
(1)所有信息都是加密和传输的,而黑客不能盗窃。
(2)使用校正机制,一旦它被修改,通信双方将立即找到它。
(三)配备身份证以防止身份滥用。
3.HTTPS概要
总体而言,与HTTP相比,HTTPPS增加了大量的握手、加密和解密过程,虽然过程复杂,但它可以保证数据传输的安全。
HTTPS 缺点:
SSL证书是昂贵的,并且在服务器上部署、更新和维护非常繁琐
HTTPS降低用户访问速度(多个握手)
在网站转换为HTTPPS后,从HTTP到HTTPS的路径增加了用户访问时间(大多数网站使用302跳跃)
HTTPS包含消耗CPU资源和需要大量机器的安全算法(https访问过程需要解密)
申请证书与认证
证书下载与配置
问题分析与总结
1、申请证书与认证
要建立一个 https 服务,你必须先拥有一个SSL证书,通常是第三方应用程序,以及Ali云安全服务中的一个SSL证书,可以免费申请;
它也可以生成在您的电脑上,虽然它也可以加密,但浏览器不被识别,所以最好应用于第三方
1、证书申请
阿里云提供免费证书,不需要手动验证,测试是很好的选择,应用地址如下URL。
点击购买阿里免费SSL证书
选择后,继续单击下一个步骤,然后您可以购买完整的免费购买证书,作者需要回到证书控制面板,单击控制面板中的证书应用程序。

2、域名验证
补全个人信息之后,还需要给阿里云验证当前域名是属于本人的,验证方式有两种,第一种是通过dns解析认证,第二种是通过上传验证文件认证,这里采用的dns解析认证,如下图

Ali Cloud的验证
在确保文件放置正确之后,关键的是能让阿里云能访问到,阿里云这里提供了一个检查配置的功能,在下载验证文件页面,有一个检测配置的链接,单击之后便可进行检查,如下图。
点击“检查配置”后,如果可以正常访问Ali云,左边会显示一个提示,现在可以返回证书列表,显示当前的验证状态
由于审计不需要任何人干预,所以证书可以迅速地发出,大约在2分钟内。
2、证书下载与配置
1、证书下载
在证书签字后,您可以在列表中看到状态栏为签字,而操作栏可以下载并查看详细信息等,如下图所示

在点击下载后,它跳到下载细节页,您可以选择自己的相应的网络服务,例如使用nginx。在选择nginx之后,下面还有如何配置,下载nginx配置文件的一个有用的提示。
下载配置文件后,需要解开zip。解开zip后,可以看到里面有两个证书文件
xxx.key
xxx.pem
然后您需要将两个证书文件复制到服务器上。首先您需要在服务器上创建相应的文件夹。参考命令如下
在服务器创建和完成相应的文件夹后,复制证书文件到服务器上
2、证书配置
在证书副本完成后,您可以使用vm命令更改 nginx配置文件,以编辑 nginx配置文件。参考命令如下:
3、重启Nginx
在修改配置文件后,必须测试nginx配置文件的正确性
如果你看到浏览器, 显示安全, 显示绿色表示任务已经完成!
当我需要执行性能优化时,这表明我们的服务器无法满足不断增长的业务需求。 性能优化是一个相对大的课题,需要从几个方面讨论
当前系统结构瓶颈
了解业务模式
性能与安全
1、当前系统结构瓶颈
首先需要了解的是当前系统瓶颈,用的是什么,跑的是什么业务。里面的服务是什么样子,每个服务最大支持多少并发。比如针对Nginx而言,我们处理静态资源效率最高的瓶颈是多大?
您可以查看当前的CPU负载,内存使用率,过程利用率以作简单的判断.它还可以利用操作系统的一些工具来判断当前系统性能瓶颈,如分析对应的日志,查看请求数量。还可以通过 nginx http_stub_status_module 模块查看相应的连接数目,总握手次数,总请求数。也可以在线路上进行压力测试,了解当前系统的性能,并发数,做好性能评估。
2、了解业务模式
虽然我们正在进行性能优化,但还是要熟悉业务,最终目的是为企业服务.我们需要了解每个类型的接口业务的业务类型,例如,电子商务收购模式,在这种情况下,流动通常很小,但是到了抢购时间,流速会立刻急剧上升.同时了解系统层结构,每个层是作为代理或移动静态分离的中间层,这是后排的直接服务.我们需要对企业访问和系统水平进行综合研究
3、性能与安全
性能和安全也是需要考虑的因素,人们常常关心表现,忽视安全,或者关心安全和忽视表现。例如,当我们设计防火墙时,如果规则过于全面肯定会对性能方面有影响。如果对性能过于注重在安全方面肯定会留下很大隐患。让我们来评估两者之间的关系。了解重量和轻度,以及整体的相关性。权衡好对应的点。
系统和Nginx性能优化
每个人对相关系统瓶颈和现状有一定了解后,可以根据影响性能进行全面评估和优化。
网络(网络流量,无论有损伤还是没有损伤,网络的稳定性会影响用户的要求)
系统(系统负载 、 饱和 、 内存利用率 、 系统稳定性 、 硬件磁盘损伤)
服务(连接优化、内核性能优化、http服务请求优化可根据操作设置在inginx)
程序(界面性能、请求处理速度、每个程序的性能)
数据库、底层服务
上面列举出来每一级都会有关联,也会影响整体性能,这里主要关注的是Nginx服务这一层。
1、文件句柄
在linux/unix操作系统中一切皆文件,我们的设备是文件,文件是文件,文件夹也是文件。当我们用户每发起一次请求,就会产生一个文件句柄。文件句柄可以简单的理解为文件手柄是索引.文件处理随着请求数目、进程调用数目和生成的文件处理数目而增加。
系统默认对文件句柄是有限制的,不可能会让一个进程无限制的调用句柄。因为系统资源是有限的,所以我们需要限制每一个服务能够使用多大的文件句柄。操作系统默认使用的文件句柄是1024个句柄。
2、设置方式
系统全局性修改
用户局部性修改
进程局部性修改
系统全球修改和用户本地修改
可以看到root和*,root代表是root用户,*代表的是所有用户,后面的数字就是文件句柄大小。大家可以根据个人业务来进行设置。
4、进程局部性修改
worker_rlimit_nofile它仅限于过程上.
CPU的相对配置
cpu的亲和能够使nginx对于不同的work工作进程绑定到不同的cpu上面去。可以减少工作间的Cpu连续转换,进程通常不经常在处理器之间移动,进程迁移的频率小,来减少性能损耗。 nginx母配置
查看cpu核心数
查看cpu使用率
6、配置worker_processes
7、cpu
假设配置为2个CPU,每个CPU为8个核心,配置如下:
Innginx1.版本9之后,它帮助我们自动绑定cpu;
nginx的一般配置优化
Ab接口压力测试工具
ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。
1、参数选项
2、内容解释
3、示例演示
注意事项
将测试机与测试机分开
不要紧张测试在线上的服务器
●观察测试工具位置的机器,测试机器的 CPU 、 内存 、 网络等不超过最大限度的75%
本文由 在线网速测试 整理编辑,转载请注明出处。