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')
服务器告诉浏览器是什么类型,浏览器就如何渲染。
请求报文首部和响应报文首部,就是浏览器和服务器之间的约定。
状态码
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')
刷新后重新请求localhost:3000,,此时顺序如下:
虽然刷新后仍然看到了localhost:3000,但是这个localhost:3000并没有网络传输,浏览器自己就会跳转。
- 302 Found
临时重定向,该状态码表示请求的资源已被分配了新的URI,希望用户本次能访问新的URI。
res.statusCode = 302
res.setHeader('location','https://www.baidu.com')
location:为跳转地址。
清空后,每次输入localhost:3000,都是先有localhost:3000再有baidu.com这个请求。(localhost就是127.0.0.1)
- 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
5XX:服务器错误
-
500 Internal Server Error
该状态码表示服务器在执行时发生了错误,也可能是web应用存在的bug或者某些临时的障碍。
500.PNG
- 503 Server Unavailable
该状态码表明服务器暂时处于超负载或正在进行停机维修,现在无法处理请求。
不少返回的状态码响应都是错误的
网友评论