HTTP 介绍

      最后更新:2022-08-02 08:33:54 手机定位技术交流文章

      TTP协议(英语:TTP protocol)是超文本传输协议(Hyper Text Transfer Protocol)的一个缩写,用于将超文本从一个万维网服务器转移到本地浏览器。

      HTTP是传输数据(HTML文件、图像文件、查询结果等)的TCP/IP通信协议。

      1.HTTP工作原理

      • HTTP协议在客户端-服务器架构上运行。浏览器作为HTTP客户端,通过URL发送所有请求给HTTP服务器。

      • 网络服务器包括: Nginx 、 Apache 和 Internet Information Services。

      • 网络服务器根据收到的请求向客户端发送响应消息。

      • 默认的HTTP端口号码是80,但您可以将其更改为8080或其他端口。

        1. 客户端分析DNS域名,获取相应的IP地址

        2. 根据此IP,找到相应的服务器建立连接(三个握手)

        3. 在建立TCP连接后启动HTTP请求(完整的http请求声明)

        4. 服务器响应HTTP请求,客户端获取HTML代码

        5. 客户端使用HTML代码中的资源(如js、css、图像等)来分析HTML代码和渲染网页。

        6. 服务器关闭TCP连接(四手)

      HTTP三个注释:

      • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

      • HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

      • HTTP无状态: HTTP协议无状态。无状态意味着协议没有处理事务的内存容量。缺乏状态意味着,如果后续行动需要事先的资料,则它必须重传,这可能导致每次连接时发送的数据量增加。另一方面,当服务器不需要以前的信息时,它会更快地响应。

      下面的图表显示了HTTP协议通信过程:

      2.HTTP消息结构

      HTTP是一个通过可靠的链接交换信息的客户端/服务器(C/S)架构模型,是一个无状态请求/响应协议。

      一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

      HTTP“服务器”也是一种应用程序(通常是网络服务,如Nginx、Apache Web服务器或IIS服务器),它接收客户端的请求并向客户端发送HTTP响应数据。

      HTTP使用统一资源标识符(Uniform Resource Identifiers,URI)来传输数据和建立连接。

      URL:统一资源定位器

      3、客户端请求消息

      客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。

      (QQ音乐_百度搜索, 此连结显示请求标题的内容)

      4、服务器响应消息

      HTTP响应也由四个部分组成:状态行、消息头条、空行和响应规则表达式,分别。

      实例

      下面的例子是使用GET传输数据的典型例子:

      客户端请求:

      服务端响应:

      输出结果:

      HTTP请求方法

      根据HTTP标准,HTTP请求可以使用多个请求方法。

      HTTP1.0定义了三个请求方法:GET、 POST和HEAD。

      HTTP1.有五种新的请求方法: Options, PUT, DELETE, TRACE, and CONNECT.

      重点方法:

      获取: 简单的获取数据( 获取索引.(html页)

      POST:上传/创建文件(生成新数据)

      PUT:保存数据(覆盖/更新文件、图片等,不会生成新的数据)

      DELETE:删除

      HTTP响应头信息

      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状态代码

      当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含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协议版本,无法处理它

      HTTPS

      https 介绍

      HyperText Transfer Protocol over Secure Socket Layer (HTTPS)。事实上,HTTPS并不是一个新的协议,谷歌早在很久以前就上市了,目的是确保数据的安全。 近些年,Google、Baidu、Facebook 等这样的互联网巨头,无意地与HTTPS的引入结合起来,国内外的许多大型互联网公司也推出了完整的HTTPS,这也是未来互联网发展的趋势。

      1、加密算法

      1. 对称加密

        A要给B发送数据

        1、A做一个对称密钥 2、使用密钥给文件加密 3、发送加密以后的文件和钥匙 4、B拿钥匙解密

        加密和解密都使用相同的密钥。

      2. 不对称加密 -- 公共密钥加密,私钥解密

        A要给B发送数据

        做一对不对称键(公共键、私人键)

        2、发送公钥给A

        A采用公开密码加密数据

        向B发送加密数据

        5、B拿私钥解密

      3. 哈希算法将任何长度的信息转换为更短的固定长度值,通常比信息短得多。

        例如: MD5, SHA-1, SHA-2, SHA-256等。

      4. 数字签名 签名被添加到信息内容( Hash 之后的值)来证明信息没有被修改。 Hash 值通常被加密 ( 即 签名 ) 并与信息一起发送,以确保 Hash 值没有被修改。

      HTTPS协议的介绍

      超文本传输协议(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)验证用户和服务器,确保数据被发送到正确的客户端和服务器;

      (二)加密数据以防止数据在中间被盗;

      (三)维护数据的完整性,确保数据在传输过程中不会改变。

      3.HTTPS原则

      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 缺点:

      1. SSL证书是昂贵的,并且在服务器上部署、更新和维护非常繁琐

      2. HTTPS降低用户访问速度(多个握手)

      3. 在网站转换为HTTPPS后,从HTTP到HTTPS的路径增加了用户访问时间(大多数网站使用302跳跃)

      4. HTTPS包含消耗CPU资源和需要大量机器的安全算法(https访问过程需要解密)

      Nginx HTTPS部署

      1. 申请证书与认证

      2. 证书下载与配置

      3. 问题分析与总结

      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配置文件的正确性

      如果你看到浏览器, 显示安全, 显示绿色表示任务已经完成!

      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%

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/31247.html

          热门文章

          文章分类