HTTP报文及状态码

作者: 学的会的前端 | 来源:发表于2019-03-04 19:03 被阅读10次

HTTP报文

用于HTTP协议交互的信息被称为HTTP报文,HTT报文大致可以分为:报文主体和报文首部两大块,并一定要有报文主体。

  • 请求报文:请求方法,请求URI,协议版本,可选的请求首部字段,内容实体。
  • 响应报文:协议版本,状态码(表示请求成功或失败的数字代码),用以解释状态码的原因短语,可选的响应首部字段,实体主体。


    请求报文和响应报文的结构.jpg
  • 请求行:POST/api/vote HTTP/1.1
  • 响应行:HTTP/1.1 200 OK

编码提升传输速率

  • 内容编码:指明应在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接受并负责解码。
  • 内容编码方式(压缩方法)
    • gzip(GNU zip)
    • compress(UNIX系统的标准压缩)
    • deflate(zlib)
    • identify(不进行编码)
  • 分块传输编码:把实体主体分隔成多块,之后再客户端解码。

多部分对象集合

多部分对象集合用于发送多种数据。主要原因是其采用了MIME(多用途因特网邮件扩展)机制,它允许邮件处理文本、图片、视频等多个不同类型的数据。在MIME中会使用一种称为多部分对象集合的方法。来容乃多份不同类型的数据。

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

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户最为合适的资源,内容协商会以语言、字符集、编码方式等为基准判断响应的资源。

  • 判断基准:一下首部字段为判断基准
Accept
Accept-Charset
Accept-Encoding
Accpet-Language
Content-Language
  • 服务器驱动协商
  • 客户端驱动协商
  • 透明协商
  • 浏览器如何解析,是根据请求报文的字段决定的,是可以进行设置的。
res.setHeader('Content-Type','text/html;charset = utf-8')
解析依据.PNG

服务器告诉浏览器是什么类型,浏览器就如何渲染。
请求报文首部和响应报文首部,就是浏览器和服务器之间的约定。

状态码

HTTP状态码负责表示客户端HTTP请求的返回结果,标记服务器端出路是否正常,通知出现错误等工作。

  • http响应报文的状态码在响应头部中

  • 状态码类别:


    状态码类别.jpg
  • nodejs创建一个静态服务器:

let http = require('http')
let server = http.createServer(function(req,res){
    console.log(req)
    //查看请求头
    console.log(req.headers)
    console.log(req.url)
    //设置响应的状态码
    //res.statusCode = 200
    //设置响应状态码的解释
    //不设置的话,默认为ok,可以通过设置改变statusMessage的值
    //res.statusMessage = "OK"
        res.setHeader('name','jirengu')//设置想硬头对应的字段
        //响应报文主体内容
    res.end('hello word')
})
server.listen(3000)

2XX成功

2XX的响应结果表明请求被正常处理了

  • 200 ok
    表示从客户端发来的请求在服务器端被正常处理了。
  • res.statusCode = 204
    该状态码代表服务器接受的请求已成功处理,但在返回的响应报文中不含实体主体部分。
    204.PNG
    response为空。服务器响应之前页面是什么,还是什么。当前页面什么都不做。浏览器显示的页面不会发生跟新。
  • 206 Partial Content
    该状态码表示客户端进行了范围请求,服务器执行了这部分的GET请求。

3XX:重定向

  • 301 Moved Permanently
    永久性重定向。该状态码鄙视请求的资源已被分配了新的URI,以后应该使用资源现在所指的URI。
res.statusCode = 301    
res.setHeader('location','https://www.baidu.com')
301.PNG

刷新后重新请求localhost:3000,,此时顺序如下:


顺序.PNG

虽然刷新后仍然看到了localhost:3000,但是这个localhost:3000并没有网络传输,浏览器自己就会跳转。

  • 302 Found
    临时重定向,该状态码表示请求的资源已被分配了新的URI,希望用户本次能访问新的URI。
res.statusCode = 302    
res.setHeader('location','https://www.baidu.com')
302.PNG

location:为跳转地址。
清空后,每次输入localhost:3000,都是先有localhost:3000再有baidu.com这个请求。(localhost就是127.0.0.1)


请求顺序.PNG
  • 303 See Other
    该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法获取请求资源。
    当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求包完内的主体,之后请求会自动再次发送。301、302标准时禁止将POST改成GET的,但实际使用时都会这样做。
  • 304 Not Modified
    该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304。
  • 307:Terporary Rediect
    临时状态码,和302差不多,但不会把POST改成GET 。

4XX:客户端错误

  • 400 Bad Request
    该状态码表示请求报文中存在语法错误。
  • 401 Unanthorized
    该状态码表示发送的请求需要通过HTTP验证。
  • 403 Forbidden
    该状态码表示请求资源的访问被服务器拒绝了,没有权限。
  • 404 Not Found
    该状态码表示服务器上无法找到指定的资源。
res.statusCode = 404
404.PNG

5XX:服务器错误

  • 500 Internal Server Error
    该状态码表示服务器在执行时发生了错误,也可能是web应用存在的bug或者某些临时的障碍。


    500.PNG
  • 503 Server Unavailable
    该状态码表明服务器暂时处于超负载或正在进行停机维修,现在无法处理请求。

不少返回的状态码响应都是错误的

相关文章

  • HTTP报文及状态码

    HTTP报文 用于HTTP协议交互的信息被称为HTTP报文,HTT报文大致可以分为:报文主体和报文首部两大块,并一...

  • HTTP 报文结构及状态码

    URL URL标准格式: frag <片段>:HTTP服务器通常只处理整个对象,而不是对象的片段,客户端不能将片段...

  • HTTP报文、HTTP状态码

    HTTP报文简介 HTTP报文构成 报文首部 + 空行(CR+LF)+ 报文主体 编码提升传输速率: 压缩传输的内...

  • HTTP报文

    报文 请求报文 响应报文 备注: HTTP常用方法 GET方法与POST方法的区别 状态码分类状态码分类.png ...

  • Http报文

    http请求报文:方法、URI、HTTP版本、HTTP首部字段等构成。http响应报文:HTTP版本、状态码(数字...

  • HTTP报文、方法、状态码及缓存

    超文本传输协议 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一...

  • HTTP——首部

    HTTP请求报文由请求方法、URI、HTTP版本、HTTP首部字段等构成。HTTP响应报文由HTTP版本、状态码(...

  • 图解HTTP解析5(状态码与通信数据名词)

    一、状态码 HTTP响应报文的响应行会返回HTTP状态码,这些状态码代表HTTP请求的返回结果。标记客户端是否处理...

  • HTTP请求响应报文&&相关状态码&&a

    HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结HTTP请求报文: 一个HTTP请求报文由四个...

  • http-报文首部

      上次谈了谈http报文的状态码,这一次来说说报文的首部。我们都知道通过http协议传输的信息就是HTTP报文。...

网友评论

    本文标题:HTTP报文及状态码

    本文链接:https://www.haomeiwen.com/subject/behiuqtx.html