【JavaEE网络】HTTP响应详解:状态码、报头与正文的全面解析

目录

        • HTTP响应(Response)
          • [认识 "状态码" (status code)](#认识 "状态码" (status code))
          • [认识响应 "报头"(header)](#认识响应 “报头”(header))
          • [认识响应 "正文"(body)](#认识响应 “正文”(body))

HTTP响应(Response)

响应:

  1. 首行
  2. 响应头
  3. 空行
  4. 正文
认识 "状态码" (status code)

响应的首行和请求的相比差异就比较大了

状态码表示访问一个页面的结果。(是访问成功,还是失败,还是其他的一些情况...)

以下为常见的状态码

200 OK (成功)

这是一个最常见的状态码, 表示访问成功

抓包抓到的大部分结果都是 200

404 Not Found (你要访问的资源不存在)

没有找到资源.

浏览器输入一个 URL, 目的就是为了访问对方服务器上的一个资源. 如果这个 URL 标识的资源不存在, 那么就会出现 404

例如, 在浏览器中输入 www.sogou.com/index.html , 此时就在尝试访问 sogou 上的/index.html 这个资源.

如果输入正确, 则可以正确访问到. 但是如果输入错误, 比如 www.sogou.com/index2.html , 就会看到 404 这样的响应.

403 Forbidden (没有权限)

表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.

405 Method Not Allowed

前面我们已经学习了 HTTP 中所支持的方法, 有 GET, POST, PUT, DELETE 等.

但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法).

500 Internal Server Error

服务器出现内部错误. 一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码.

咱们平时常用的网站很少会出现 500 (但是偶尔也能看到).

502 Bad Gateway

表示Internet上的一台服务器收到来自另一个服务器的无效响应,也就是指网关错误,无效网关;在互联网中表示一种网络错误。表示web浏览器中给出的页面反馈。

504 Gateway Timeout (服务器响应超时)

当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况.

这种情况在双十一等 "秒杀" 场景中容易出现, 平时不太容易见到.

302 Move temporarily (重定向)

临时重定向,跳转到其他页面上

理解 "重定向"

就相当于手机号码中的 "呼叫转移" 功能.

比如我本来的手机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友知道新号码,

只要我去办理一个呼叫转移业务, 其他人拨打 186-1234-5678 , 就会自动转移到 135-1234-5678 上.

在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页.

响应报文的 header 部分会包含一个 Location 字段, 表示要跳转到哪个页面

301 Moved Permanently

永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址.

301 也是通过 Location 字段来表示要重定向到的新地址

状态码小结

认识响应 "报头"(header)

响应报头的基本格式和请求报头的格式基本一致.

类似于 Content-Type , Content-Length 等属性的含义也和请求中的含义一致.

Content-Type

响应中的 Content-Type 常见取值有以下几种:

  • text/html: body 数据格式是 HTML
  • text/css: body 数据格式是 CSS
  • application/javascript: body 数据格式是 JavaScript
  • application/json : body 数据格式是 JSON
认识响应 "正文"(body)

正文的具体格式取决于 Content-Type. 观察上面几个抓包结果中的响应部分.

  1. text/html

    Server: nginx/1.17.3
    Date: Thu, 10 Jun 2021 07:25:09 GMT
    Content-Type: text/html; charset=utf-8
    Last-Modified: Thu, 13 May 2021 09:01:26 GMT
    Connection: keep-alive
    ETag: W/"609ceae6-3206"
    Content-Length: 12806

    <!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible

    content="IE=edge,chrome=1"><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,userscalable=no"><link rel=icon href=/favicon.ico><title id=bodyTitle>比特教务管理系统

    </title><link href=https://cdn.bootcss.com/jquerydatetimepicker/2.5.20/jquery.datetimepicker.css rel=stylesheet><script src=https://cdn.bootcss.com/highlight.js/9.1.0/highlight.min.js></script><script src=https://cdn.bootcss.com/highlightjs-line-numbers.js/2.5.0/highlightjs-linenumbers.min.js></script><style>html, body, #app { height: 100%; margin: 0px; padding: 0px; } .chromeframe { margin: 0.2em 0; background: #ccc; color: #000; padding: 0.2em 0; } #loader-wrapper { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 999999; } ......
  2. text/css

    HTTP/1.1 200 OK
    Server: nginx/1.17.3
    Date: Thu, 10 Jun 2021 07:25:09 GMT
    Content-Type: text/css
    Last-Modified: Thu, 13 May 2021 09:01:26 GMT
    Connection: keep-alive
    ETag: W/"609ceae6-3cfbe"
    Content-Length: 249790
    @font-face{font-family:element-icons;src:url(../../static/fonts/elementicons.535877f5.woff) format("woff"),url(../../static/fonts/elementicons.732389de.ttf) format("truetype");font-weight:400;font-style:normal}
    [class*=" el-icon-"],
    ......

  3. application/javascript

    HTTP/1.1 200 OK
    Server: nginx/1.17.3
    Date: Thu, 10 Jun 2021 07:25:09 GMT
    Content-Type: application/javascript; charset=utf-8
    Last-Modified: Thu, 13 May 2021 09:01:26 GMT
    Connection: keep-alive
    ETag: W/"609ceae6-427d4"
    Content-Length: 272340
    (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["app"],
    {0:function(t,e,n){t.exports=n("56d7")},"00b3":function(t,e,n){},"
    ......

  4. application/json

    HTTP/1.1 200
    Server: nginx/1.17.3
    Date: Thu, 10 Jun 2021 07:25:10 GMT
    Content-Type: application/json;charset=UTF-8
    Connection: keep-alive
    X-Content-Type-Options: nosniff
    X-XSS-Protection: 1; mode=block
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate
    Pragma: no-cache
    Expires: 0
    vary: accept-encoding
    Content-Length: 12268
    {"msg":"操作成功","code":200,"permissions":[] }

相关推荐
李宥小哥17 分钟前
C#基础11-常用类
android·java·c#
AALoveTouch1 小时前
网球馆自动预约系统的反调试
javascript·网络
一个响当当的名号1 小时前
一些主要应用和NAT
运维·服务器·网络
小许学java1 小时前
数据结构-ArrayList与顺序表
java·数据结构·顺序表·arraylist·线性表
Java 码农3 小时前
Centos7 maven 安装
java·python·centos·maven
harmful_sheep3 小时前
maven mvn 安装自定义 jar 包
java·maven·jar
洋葱圈儿6663 小时前
nat静态地址转化
网络·智能路由器
007php0073 小时前
某大厂跳动面试:计算机网络相关问题解析与总结
java·开发语言·学习·计算机网络·mysql·面试·职场和发展
OPTree4123 小时前
H3C网络设备 实验三: 搭建两个局域网,使两个局域网相互通信(路由器,自动分配ip,DHCP协议)
网络·tcp/ip·智能路由器
WTCLLB4 小时前
netgear r6220 路由器,刷openwrt后,系统备份还原
linux·网络·智能路由器·openwrt