• HTTP协议


    1. 什么是HTTP协议

        HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于服务器客户端浏览器之间传输超文本数据(文字、图片、视频、音频)应用层协议

    同时也是一个双向协议,通过请求与响应的方式,基于浏览器-服务器架构模型进行工作。

    2. HTTP协议通信过程

    常见总结为以下七个步骤。

    1. 建立TCP连接
    Web浏览器首先要通过网络与Web服务器之间通过TCP建立连接,TCP与IP协议共同构建Internet
    HTTP协议是比TCP处于更高层的应用层协议,只有当低层协议建立练接之后才能进行更高层次的连接。TCP连接的端口号一般是80
    2. Web浏览器向Web服务器发送请求行
    建立TCP连接之后,Web浏览器会向Web服务器发送请求命令
    3. Web浏览器向服务器发送请求头
    浏览器发送请求信息之后,还要以头信息的形式发送相关信息,并以空行代表发送结束
    4. Web服务器应答
    Web服务器接收请求后返回应答,第一部分是协议的版本号和应答状态码 例:“HTTP/1.1 200OK”
    5. Web服务器发送应答头
    服务器也会随着应答发送一些相关信息,并以空行代表发送结束
    6. Web服务器向浏览器发送数据
    Web服务器向浏览器发送头信息之后,就以Content-Type格式发送用户所请求的信息
    7. Web服务器关闭TCP连接
    一般情况下,一旦Web服务器向浏览器发送请求数据后,就要关闭TCP连接了
    若在报文中加入:connection:Keep-alive 则保持长连接状态,可以继续通过相同的连接发送请求

    3. 关于URL

    HTTP协议使用 URLUniform Resource Locator,统一资源定位符)来定位资源。

    格式:http://host[":"port][abs_path]

    示例:http://192.168.0.116:8080/index.html

    • http表示要通过HTTP协议来定位网络资源;
    • host表示合法的InternetWeb服务器或者IP地址;
    • port指定一个端口号,为空则使用缺省端口80
    • abs_path指定请求资源的URI

    什么是URI

    URLURIUniform Resource Identifier,统一资源标识符)的子集,URLURI 的基础上增加了定位能力。URN(Uniform Resource Name,统一资源名称)只是用来定义一个资源的名称不能够定位。

    4. HTTP报文 

    请求报文结构

    第一行是请求行,包含:请求方式URL协议版本

    响应报文结构

    第一行是状态行,包含:协议版本状态码以及描述

    最常见的状态码及描述是: 200OK ,表示请求成功。

    • 接下来的多行都是http消息头,其中包含若干个http首部字段。
    • 一个空行用来分隔
    • 最后是请求的消息体

    5. HTTP 请求方式 

    HTTP请求报文 第一行为请求行,其中包含了请求方式字段,常见的请求方式GETPOSTHEADPUTDELETEOPTIONS

    • GET : 获取资源
    • POST :提交数据增加资源
    • HEAD :获取响应报头
    • PUT :修改资源
    • DELETE :删除资源
    • OPTIONS :查询支持的方法

    常见问题:GET 和 POST 的区别:

    • GET用于获取数据,POST用于提交数据;
    • GETPOST的请求报文格式不同
      • POST方法请求报文第一行是这样的 POST /URL HTTP/1.1 \r\n
      • GET方法请求报文第一行是这样的 GET /URL HTTP/1.1 \r\n
    • GET使用请求报文中的首部字段URL传递请求参数,POST使用Request Boby提交数据;
    • GET是幂等且可缓存,POST非幂等且不可缓存;

    6. 常见HTTP首部字段

    Host字段:浏览器发送http请求时,用来指定服务器的域名。

    Content-Length字段:服务器在响应数据时,表明本次响应数据的长度。

    Content-Type 字段:服务器响应时,告诉浏览器,本次响应数据的内容类型。

    Accept 字段:用于浏览器发起请求的时候,声明可以接受哪些响应数据格式。

    7. HTTP 状态码

    1XX 信息

    1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际工作中使用场景比较少。

    2XX 成功

    • 200 OK」最常见的成功状态码,表示一切正常。
    • 204 No Content」常见的成功状态码,与 200 OK 基本相同,但响应报文没有 body 数据。

     3XX 重定向

    • 301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

    4XX 客户端错误

    • 400 Bad Request」表示客户端请求的报文有错误。
    • 404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
    • 405 Not Allowed」表示服务器不支持客户端采用的请求方式。

    5XX 服务器错误

    • 500 Internal Server Error」服务器发生了内部错误。
    • 502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
    • 503 Service Unavailable」表示服务器当前很忙,暂时无法响应服务器。

    8. 连接方式

        HTTP 1.0 默认使用短连接,每次使用HTTP协议进行通信,都需要重新按照三次握手的方式,建立一个独立的TCP连接,响应完毕后,通过四次挥手断开连接。这种重复的连接创建和断开,增加了通信的开销。

    为了解决这个问题,HTTP/1.1 改用长连接的通信方式,也叫持久性连接。只需要建立一次 TCP 连接就能进行多次 HTTP通信,这种方减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

    9.HTTP协议存在的问题

    HTTP由于使用明文传输,所以存在以下安全问题:

    • 使用明文进行通信,内容可能会被窃听,比如被抓包;
    • 不验证通信方的身份,通信方的身份有可能遭遇伪装,比如钓鱼网站;
    • 无法证明报文的完整性,报文有可能遭篡改,比如强制在线广告植入。

     为了解决这些问题出现了HTTPS协议:
            HTTPS 的全称是超文本传输安全协议Hypertext Transfer Protocol Secure ,是以安全为目标的 HTTP 通信协议。HTTPS不是一个新的协议,通过使用 SSL使用非对称加密算法(RSA)完成一个随机秘钥的交换,在随后的数据传输当中,使用该随机秘钥进行数据内容的对称式加密(AES)。具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)等功能特点。

  • 相关阅读:
    《痞子衡嵌入式半月刊》 第 57 期
    RocketMQ(二十)消息消费重试机制
    JavaScript基础大总结
    php 生成excel文件 并压缩成zip包加密
    Learn Dijkstra For The Last Time
    第一季:19单点登录【Java面试题】
    JAVA:实现Damm达姆算法(附完整源码)
    记一次 .NET 某企业采购平台 崩溃分析
    c# HttpClient 获取cookie
    Mybatis逆向工程---在SpringBoot项目中构建Mybatis生成器
  • 原文地址:https://blog.csdn.net/weixin_62221994/article/details/133313289