【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":[] }

相关推荐
魔道不误砍柴功1 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2341 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨1 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
_.Switch1 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
qq_254674411 小时前
工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置
网络
JokerSZ.1 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
测开小菜鸟2 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity3 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天3 小时前
java的threadlocal为何内存泄漏
java