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响应中的状态码
响应状态码 | 状态码描述 | 状态码解释 |
---|---|---|
200 | OK | 表示浏览器很顺利的就获取到了想要的内容,没有什么差错. |
404 | Not Found | 表示浏览器要访问的资源不存在. |
403 | Forbidden | 表示要访问的资源是存在的,但是用户没有权限访问. |
405 | Method Not Allowed | 浏览器访问使用的方法,在对方服务器中不支持. |
500 | Internal Server Error | 服务器出问题了,意味着处bug了. |
504 | Gateway Timeout | 服务器繁忙 |
302 | Move 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 具体的组织形式
- 先按照域名来组织, 针对每个域名, 分别分配一个小房间(小黑屋).
- 比如浏览器访问搜狗,就会进入搜狗这个域名记录的cookie.
- 浏览器访问其他网页,又会进入到对应的cookie.
- 一个小房间里,又会按照键值对的方式来组织数据.
- Cookie数据的来源:服务端返回给客户端的.
转载:https://blog.csdn.net/m0_58154870/article/details/128207689
查看评论