• HTTP请求和响应(补充HTTP协议)


    1.HTTP请求

    1.1.HTTP请求中 header 的常见的键值对说明

    • HOST: 域名(IP+端口)
    • Content-Length: body中的数据长度
    • Content-Type: body中的数据格式
    • User-Agent: 用户使用什么东西来上网.(操作系统信息+浏览器信息)
      • 通过这些信息,服务端就可以"区别对待"了.
      • 服务端可以针对信息返回相应的数据
    • Referer: 表示当前页面是从哪个页面跳转过来的.
    • Cookie: 浏览器给页面提供的一种能够持久化存储数据的机制.
      • 持久化指,不会因为程序重启而丢失,写到磁盘里.

    1.1.1.Content-Length 的使用

    • 如果当前有若干个GET 请求,到了 TCP 接收缓冲区中了
      • 应用程序读取请求的时候,就以空行为分隔符.
    • 如果当前是有若干个POST 请求,到了TCP 缓冲区了
      • 这个时候.空行后面还有body, 这个时候 Content-Length 就起到作用了.
      • 当应用程序读到空行之后,就需要按照 Content-Length 表明的长度,继续读若干长度的数据.

    1.2.请求正文

    正文中的内容格式和 header 中的 Content-Type 密切相关.

    常见的请求正文格式.

    • application/x-www-form-urlencoded
      • 格式就和 query string 是一样的.
      • 键值对的结构
      • 键值对之间使用 & 来分割
      • 键和值之间使用 = 分割
      • 并且需要进行 url encode
    • multipart/form-data
      • 用于上传文件
    • application/json
      • {}构成的若干键值对
      • 键值对之间使用逗号(,)分割
      • 键和值之间使用冒号和空格(: )来分割

    2.HTTP响应

    HTTP响应中很多地方都是和HTTP请求类似的.

    2.1.HTTP响应中的状态码

    响应状态码状态码描述状态码解释
    200OK表示浏览器很顺利的就获取到了想要的内容,没有什么差错.
    404Not Found表示浏览器要访问的资源不存在.
    403Forbidden表示要访问的资源是存在的,但是用户没有权限访问.
    405Method Not Allowed浏览器访问使用的方法,在对方服务器中不支持.
    500Internal Server Error服务器出问题了,意味着处bug了.
    504Gateway Timeout服务器繁忙
    302Move temporarily重定向(服务器返回一个新的地址,浏览器重新访问新的网址)

    302 (重定向) 数据报的 header 中就会有一个 Location: 新地址 ,表示要跳转到的地址.因为是重定向数据报,所以这个键值对(Location: 新地址)一般只出现在响应报文中.

    2.1.1.状态码分类

    • 2开头,都属于成功
    • 3开头,都属于重定向
    • 4开头,都属于客户端出现错误
    • 5开头,都属于服务器出现错误
    • 特别的状态码:418->是一个彩蛋状态码.

    2.2.响应报头(header) 和 响应正文(body)

    响应报头(header) 和 响应正文(body) 和请求报头和请求正文是类似的.

    3.关于登录

    • 为啥登录,建议使用POST 实现? 使用GET 能不能实现登录呢??
    • 使用GET是完全可以实现登录功能的.为啥还主要使用POST?
      • 因为登录肯定是要给服务器传递用户名和密码
      • 如果使用 GET. 用户名密码习惯上就会放到URL的query string中来传递
        • 此时浏览器的地址栏里的路径,就可能变的很长一串.用户体验就不是很好.
        • 并且如果密码是明文传输.就会直接在地址栏显示密码.同样,用户体验也不是很好.
      • 而POST是放在body中的,相对来说用户使用就比较舒服.
        • 不会在地址栏中展示过多内容.

    4.关于 Cookie

    浏览器为了安全,默认情况下是不能让页面的js随意访问到用户电脑上的文件系统的.

    • 因为如果某个网页上包含恶意代码.用户不小心点了一下, 就可能触发这个恶意代码, 把用户电脑上的“学习资料"全给删了!

    但是这样的安全限制,也给浏览器交互带来了一些麻烦.

    • 有时候,确实又需要让页面这里持久化存储一些数据, 方便后续访问网站.
    • 其中最典型的,就是需要存储用户当前的身份信息.

    4.1.由于上述原因,于是就产生了 Cookie 的机制

    当用户在登录页面完成身份认证之后, 此时服务器就会给浏览器返回一个用户的身份信息, 浏览器把这个信息就保存到了一个特定的位置上, 后续再访问同一个网站的其他页面的时候, 浏览器会自动的带上这个身份信息. 服务器就能识别了.

    • 当前的浏览器就是采取这样的策略.
    • 虽然不能让页面的js访问用户的整个磁盘数据. 但是可以单独给浏览器分配一个小黑屋.
    • js 代码就可以在这个小黑屋里随便折腾.这里的折腾, 代码不能出小黑屋, 就不会影响到用户磁盘上的其他的学习资料.
    • 这里的小黑屋, 有多种不同的形式.
      • 其中Cookie是一个比较古老,也比较经典的形式.

    4.2.Cookie 具体的组织形式

    1. 先按照域名来组织, 针对每个域名, 分别分配一个小房间(小黑屋).
      • 比如浏览器访问搜狗,就会进入搜狗这个域名记录的cookie.
      • 浏览器访问其他网页,又会进入到对应的cookie.
    2. 一个小房间里,又会按照键值对的方式来组织数据.
      • Cookie数据的来源:服务端返回给客户端的.
  • 相关阅读:
    126. 单词接龙 II BFS
    yolov5 通过视频进行目标检测
    VUE+Nodejs 商城项目练习项目(Node部分)
    Python经典练习题(四)
    linux
    643. 子数组最大平均数 I(javascript)643. Maximum Average Subarray I
    Linux 创建.sh脚本文件
    多线程之一(进程理解、线程理解与创建、Thread类、线程状态)
    criu简单例子
    图上问题训练题解
  • 原文地址:https://blog.csdn.net/m0_58154870/article/details/128207689