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响应中的状态码

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数据的来源:服务端返回给客户端的.
12-07 18:36