• HTTP原理入门


    HTTP服务器用途

    • 用于Web服务器访问网站
    • 上传,下载
    • 注册,登录,数据请求交互操作
    • 服务器GM封号,限制登录,发放道具,后台充值
    • 其他企业级应用的数据获取

    HTTP工作原理

    HTTP协议采用请求/响应模型——客户端向服务器发送请求报文,服务器以一个状态作为响应。

    客户端和服务器进行一次交互的过程主要可以拆解为一下5步:

    1. 客户端连接到HTTP服务器:Http客户端与Web服务器建立一个TCP连接
    2. 客户端向服务器发起HTTP请求:客户端通过已建立的TCP连接向服务器发送一个请求报文
    3. 服务器受到HTTP请求,并返回Http响应:服务器解析请求,定位请求资源,服务器将资源副本写道TCP连接,由客户端进行读取
    4. 释放TCP连接:若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keep-alive,则该连接会保持一段时间,在该时间内可以继续接收请求
    5. 客户端浏览器解析html内容:客户端将服务器响应的信息进行解析

    URL

    何为URL?URL全拼Uniform Resource Locator,即统一资源定位符,我们俗称的网址一般就是指它。

    组成:

    • 传送协议、层级URL标记符号(“//”)
    • 传送资源需要的凭证信息(可省略)
    • 服务器(通常为域名,有时为IP地址)
    • 端口号(以数字方式表示,若为Http的默认值“:80”可省略)
    • 路径(以“/”区分路径中的各级目录)
    • 查询(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突)

    在浏览器内键入某个URL,其内部一般具体会有以下的流程:

    1. 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址
    2. 之后,根据IP地址和默认端口80,和服务器建立TCP连接
    3. 浏览器发送出读取文件的Http请求
    4. 服务器对浏览器请求做出响应,将对应的请求数据发送给浏览器
    5. 释放TCP连接
    6. 浏览器将对应数据进行显示

    报文

    请求报文

    请求报文的结构:

    请添加图片描述

    请求行(requestline)

    • 请求方法

    GET方法主要用于查询和下载,参数直接显示在地址栏中,不适合传递私密数据,也不适合传递大量数据;
    POST方法常用于游戏行业,将数据封装在请求数据中,对数据量没有限制,不会显示在地址栏中;
    PUT方法主要用于上传,将资源存放到指定位置,与POST的区别主要体现在是否指定存放位置(POST是服务器自己决定位置);
    HEAD
    DELETE
    OPTIONS
    TRACE
    CONNECT

    • 请求URL(不包括域名)
    • HTTP协议版本
    POST /user HTTP/1.1 \r\n
    
    • 1

    请求头部(header)

    请求头部由关键字/值对组成,每行一对。

    HOST: 127.0.0.1:8080 \r\n
    User-Agent: Mozilla/5.0 \r\n
    Accept: text/xml, application/xml, text/html \r\n
    Accept-Language: zh-cn,zh;q=0.5 \r\n
    Accept-Encoding: gzip,deflate \r\n
    Accept-Charset: gb2312,urf-8;q=0.7,*;q=0.7
    Content-Type: application/x-www-form-urlencoded;charset=:UTF-8 \r\n
    Content-Length: 12
    Connection: keep-alive/close
    Keep-Alive: 300
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 客户端告诉服务器,其想要访问的主机名;
    • HTTP客户端运行的浏览器类型的详细信息;
    • 客户端希望接收的数据类型;
    • 指定HTTP客户端浏览器用来展示返回信息所优先选择的语言;
    • 浏览器能够进行解码的数据编码方式;
    • 请求头用来告诉服务器客户端所能够处理的字符集类型;
    • 显示此HTTP请求提交的内容类型;
    • 表示请求消息正文的长度;
    • 表示是否需要持久连接;
    • 显示此HTTP连接的Keep-Alive时间;

    空行

    请求头之后是一个空行,通知服务器以下不再有其他的请求头的内容。

    \r\n
    
    • 1

    请求体

    待发送的数据。

    GET没有请求数据,POST有。相关的请求头内容有Content-TypeContent-Length

    name=world
    
    • 1

    请求报文的实体举例:

    请添加图片描述

    响应报文

    响应报文的结构:

    请添加图片描述

    状态行

    HTTP/1.1 200 OK
    
    • 1
    • 服务器HTTP协议版本
    • 响应状态码

    由3位数字组成,第一个数字定义了响应的类别:

    1xx消息——表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程;
    2xx成功——表示成功接收请求并已完成整个处理过程,常用200;
    3xx重定向——需要后续操作才能完成这一请求;
    4xx请求错误——客户端的请求有错误,常用404,403;
    5xx服务器错误——服务端出现错误,常用500;

    • 状态码的文本描述

    取值举例:

    200 OK:表示客户端请求成功;
    400 Bad Request:表示客户端请求有语法错误,不能被服务器理解;
    401 Unauthorized:表示请求未经授权;
    403 Forbidden
    404 Not Found

    响应头部

    用于描述服务器的基本信息以及数据的描述,服务器通过返回这些数据的描述信息,可以通知客户端如何处理它返回的信息。

    • Allow:服务器支持哪些请求方法
    • Content-Encoding:文档的编码方式
    • Content-Length:内容长度
    • Content-Type:后续文档属于什么类型
    • Date:当前的GMT时间
    • Expires:告知浏览器把回送的资源缓存多长的时间,-1或0表示不缓存
    • Last-Modified:文档的最后改动时间
    • Location:配合302状态码使用,用于重定向接收者到一个新的URL地址
    • Refresh:告诉浏览器隔多久刷新一次,以秒计
    • Server:服务器通过这个头告诉浏览器服务器的类型
    • Set-Cookie:设置和页面关联的Cookie
    • Transfer-Encoding:数据的传送格式
    • WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息

    空行

    通过客户端以下不再有其他的响应头

    响应体

    响应的消息体。

    响应报文的实体举例:

    请添加图片描述

  • 相关阅读:
    【Mybatisplus】初识Mybatisplus+SpringBoot整合
    J2EE项目部署与发布(Windows版本)->会议OA单体项目Windows部署,spa前后端分离项目Windows部署
    列表与字典—>一维列表
    软件工程与计算总结(十)软件体系结构设计与构建
    博客园主题美化(仅兼容 Markdown)
    Python爬虫之简单学习BeautifulSoup库,学习获取的对象常用方法,实战豆瓣Top250
    React生命周期理解
    基于k8s、rancher的集群kubectl容器命令行的功能实现
    AI低代码维格云日历视图怎么用?
    MATLAB算法实战应用案例精讲-【集成算法】集成学习模型Bagging(附Python和R语言代码)
  • 原文地址:https://blog.csdn.net/xcinkey/article/details/126575452