HTTP笔记3:报文,抓包与状态码

1 报文

  • 用于 HTTP 协议交互的信息被称为 HTTP 报文
  • HTTP 报文本身是由多行(用 CR+LF 作换行符)数据构成的字符串文本

在这里插入图片描述

1.1 请求报文和响应报文的结构

在这里插入图片描述
在这里插入图片描述

  • 请求行
    包含用于请求的方法,请求 URI 和 HTTP 版本。
  • 状态行
    包含表明响应结果的状态码,原因短语和 HTTP 版本。
  • 首部字段
    包含表示请求和响应的各种条件和属性的各类首部。一般有 4 种首部,分别是:通用首部请求首部响应首部实体首部
  • 其他
    可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)

1.2 内容编码

常用的内容编码有以下几种。

  • gzip(GNU zip)
  • compress(UNIX 系统的标准压缩)
  • deflate(zlib)
  • identity(不进行编码)

分割发送的 分块传输编码

在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面

1.3 获取部分内容的分块请求

  • 下载过程中遇到网络中断的情况,那就必须重头开始。为了解决上述问题,需要一种可恢复的机制。所谓恢复是指能从之前下载中断处恢复下载
  • 要实现该功能需要指定下载的实体范围。像这样,指定范围发送的请求叫做范围请求(Range Request)
    在这里插入图片描述

1.4 内容协商返回最合适的内容

当浏览器的默认语言为英语或中文,访问相同 URI 的 Web 页面时,则会显示对应的英语版或中文版的 Web 页面。这样的机制称为内容协商

2 抓包

网页可以伪造请求,比如cookies获得之后,可以使用这个cookies伪造请求发送给服务器

3 HTTP状态码

状态码类型:
在这里插入图片描述

3.1 2XX 成功

表明请求被正常处理了。

  1. 200 OK
    正常处理并返回对应资源
  2. 204 No Content
    1. 请求收到了,但是没给响应内容,只给响应头,那么浏览器显示的页面
      不发生更新
    2. 一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用
  3. 206 Partial Content
    客户端进行了范围请求,返回一部分资源

3.2 3XX 重定向

  1. 301 Moved Permanently:永久性重定向,这次重定向之后会被记录在浏览器,以后打开同样网址会直接重定向(不必发送给服务器)
    像下方给出的请求 URI,当指定资源路径的最后忘记添加斜杠“/”,就
    会产生 301 状态码。
    http://example.com/sample
  2. 302 Found:临时性重定向,每次都要发送请求给服务器,服务器才会重定向
  3. 304 Not Modified 缓存

3.3 4XX 客户端错误

表明客户端是发生错误的原因所在

  1. 400 Bad Request:该状态码表示*请求报文中存在语法错误
  2. 401 Unauthorized:需要用户授权(以前)
  3. 403 Forbidden:该状态码表明对请求资源的访问被服务器拒绝了
    没有权限
  4. 404 Not Found:表明服务器上无法找到请求的资源,url出错

3.4 5XX 服务器错误

表明服务器本身发生错误

  1. 500 Internal Server Error:表明服务器端在执行请求时发生了错误
  2. 503 Service Unavailable:表明服务器暂时处于超负载正在进行停机维护,现在无法处理请求

3.5 状态码和状况的不一致

  • 不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。
  • 比如 Web 应用程序内部发生错误,状态码依然返回 200 OK,这种情况也经常遇到。

4 node.js 写一个简单服务器

302

let http = require('http');

let server = http.createServer(function(req, res) {
    console.log(req.headers);
    console.log(req.url);
    res.statusCode = 302;
    // res.statusMessage = 'supercll';
    res.setHeader('location', 'http://www.lhikari.com/');
    res.end('hello world');

})
server.listen(3000);

在这里插入图片描述

301

let http = require('http');

let server = http.createServer(function(req, res) {
    console.log(req.headers);
    console.log(req.url);
    res.statusCode = 301;
    // res.statusMessage = 'supercll';
    res.setHeader('location', 'http://www.lhikari.com/');
    res.end('hello world');

})
server.listen(3000);

先访问一次本地ip之后,断掉nodejs写的服务器
在这里插入图片描述
再次访问本地地址
在这里插入图片描述
仍然是跳转连接,说明此次请求并未传到服务器,而是直接跳转,保存在浏览器的缓存中,这就是301与302的区别

4xx

let server = http.createServer(function(req, res) {
    console.log(req.headers);
    console.log(req.url);
    res.statusCode = 404;
    // res.statusMessage = 'supercll';
    // res.setHeader('location', 'http://www.lhikari.com/');
    res.end('hello world');

})
server.listen(3000);

在这里插入图片描述
会报错,但是页面仍会渲染,因为服务器实际上是接受了请求并返回响应了,只是找不到对应的路径。

500

let http = require('http');

let server = http.createServer(function(req, res) {
    console.log(req.headers);
    console.log(req.url);
    res.statusCode = 500;
    res.setHeader('Content-Type', 'text/plain; charest=utf-8')
    res.end('<h1>hello world</h1>');

})
server.listen(3000);

此时服务端叫浏览器按照响应头设置的html模式来渲染,但是浏览器自作主张按照字符串去渲染了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值