• 【超全汇总】HTTP协议


    之前学http协议的时候,云里雾里的,再次学了之后,感觉理解的比以前透彻了,所以今天就来总结一下,因为我也是小白~ 如有错误,那么希望指正


    请求与响应
    当我们在浏览器的地址栏中输入一个网址之后,然后出现一个网页,

    这其中的原理应该是这样的:浏览器,也就是客户端向服务器发送请求,然后服务器进行处理请求,然后返回请求。

    浏览器发送请求的这个过程就叫做请求,而服务器处理请求,返回请求的过程就叫做响应。

    在请求和响应的过程中,双方都会遵守一个约定,这个约定就是HTTP协议

    HTTP协议有很多个版本,但是现在使用最多的版本是HTTP/1.1


    HTTP请求

    在浏览器的导航栏中输入下面这个地址

    http://xxx.com/uesrs?gender=male
    
    • 1

    http叫做协议类型,xxx.com叫做服务器地址,uesers?gender= male叫做请求路径

    这段网址在http请求中是这样的

    GET usrs?gender-male HTTP/1.1
    HOST:xxx.com
    Content-Type: text/plain
    Content-Length: 243
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    http请求的格式

    请求(的)行
    头信息
    ----这是空行
    主体信息
    
    • 1
    • 2
    • 3
    • 4

    GET是HTTP请求的方法,用来获取资源,但是这种请求没有主体信息,除了GET这种请求方式还有
    POST,PUT, HEAD ,DELETE

    POST和PUT请求方法有主体信息,而HEAD请求方法和GET请求是基本相同的

    DELETE主要是用来删除资源

    PUT主要用于增加或者修改资源,而PUT主要用于修改资源,这两个没啥区别,

    PUT还有一个性质叫做幂等性质,幂等这个性质的意思是就是数据不会重复增加

    HTTP响应

    HTTP/1.1 200 OK
    content-type: application/json; charset=utf-8
    cache-control: public, max-age=60, s-maxage = 60
    vary: Accept, Accept-Encoding
    etag:...
    content-encoding...
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    响应的状态码:

    1xx: 临时性信息,
    2xx: 表示成功
    3xx: 重定向
    4xx: 客户端错误
    5xx: 服务器错误

    100表示继续发送,101表示正在切换协议, 200表示成功,201创建成功,201创建成功,301永久移动,302暂时移动, 304内容未改变

    这里的重定向, 指的是如果你在浏览器的地址栏中输入一个地址,比如http://www.csdn.net,注意这里使用的是HTTP协议,但是最终访问的却是https://www.csdn.net,这就叫重定向,这个重定向可以由你来进行规定。

    说完了请求行,我们现在来说一下,头部信息

    Headers区域

    作用:HTTP消息的元数据,元数据就是数据中包含数据,可以将这个理解为你传输的数据的属性

    HOST的理解

    HOST叫做目标主机地址,你的主机可能有多个子主机,请求开始之前进行DNS查询,将域名转化为IP地址,然后发送到HOST, 主机接收后观察HOST,去定位子主机,最终定位到子主机

    Content-Type 和Content-Length

    Content-Length表示报文长度,服务器接收的数据有多种类型,这个content-length就是一个标志,相当于一个换行符号,标志着结束,服务器根据报文长度进行接收。

    下面说一下Content-Type,Content-Type表示的是返回数据的格式,返回数据的格式主要有以下几种


    Text/HTML形式:就是单纯的HTML格式

    http/1.1 200 OK
    Content-Type: text/html; charset=utf-8
    Content-Length: 853
    
    • 1
    • 2
    • 3

    普通表单形式
    普通表单主要是用户进行提交信息,其格式为x-www-form-urlencoded

    特殊表单
    用户可能不仅仅是提交个人信息,还有可能提交文件,比如说提交头像,这个时候就使用这个特殊表单,既然不只是信息,还有文件,文件和信息使用boundary进行分隔

    multipart/form-data; boundary....
    
    • 1

    使用multipart进行传用于传输二进制内容的多项内容,不要使用其它的,这样显得没文化。

    json格式
    用于web api的响应式或者POST/PUT请求

    {"name":"xxxx", "gender", "male"}
    
    • 1

    图片格式
    image/jpeg/application,这种方式非常的好,但是这种方式使用的很少,因为大多数人使用的是multipart,虽然这种

    推荐使用json这种格式,这种格式的扩展性更好

    chunked transter encoding
    分块传输,使传输的延迟降低,使用分块传输的时候,我们要记住不可以使用Content-Length

    它的body格式为

    length1
    data1>
    <length2
    data2
    
    • 1
    • 2
    • 3
    • 4

    用户代理
    user-agent
    用户代理指的就是浏览器客户端,浏览器都是兼容mozilla的, 根据user-agent信息进行返回,有可能用户是pc端,还有可能是移动端。

    Range
    指定Body的内容范围,进行加载内容,如加载图片,可能只会加载多少,

    部分其它header

    • accept:客户端能够接收的数据类型: text/html
    • accept-Charset:客户端接受的字符集合utf-8
    • Accept-Encoding:客户段接收的压缩编码类型, 如gizp
    • Content-Encooding压缩类型,如g-zip

    Cache
    cache是缓存的意思,也就是提前存下来,以便后序的使用

    与这个概念相仿的是buffer,叫做缓冲区的概念,这个存在,那们一定有上游和下游的概念,上游先预先存放着一些东西,如果下游需要使用的话,那么就会调出来这个缓存


    好了今天的分享就到此结束了~

  • 相关阅读:
    alova.js快速入门教程
    Camtasia2023免费升级最新版本下载
    面对海量数据挑战,企业怎样进行数据处理?
    五个元素的整形数组
    flask参数校验自定义返回
    课设之跨网段攻击
    Redis入门 (店铺营业状态设置) --苍穹外卖day4
    华为机试真题 C++ 实现【无向图染色】【2022.11 Q4新题】
    mysql数据库通过拷贝目录实现迁移
    RabbitMQ的工作模式——WorkQueues
  • 原文地址:https://blog.csdn.net/user_2022_5_1/article/details/125598224