4)HTTP请求报文和响应报文

1,102 阅读4分钟

URI的结构

Uniform Resource Locator的缩写,译为“统一资源定位 符”

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

URL的格式由三部分组成:

  1. 第一部分是协议(或称为服务方式)。
  2. 第二部分是存有该资源的主机IP地址(有时也包括端口号)。
  3. 第三部分是主机资源的具体地址,如目录和文件名等。

第一部分和第二部分用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略

请求报文组成

http请求报文由(请求行+请求头+请求体)

image.png

请求方法

  • 请求方法:
    • POST:提交数据 (常见数据格式为json或者urlencode)****
    • GET:获取资源 (数据格式为params或query查询参数)
    • HEAD:获取资源的元信息
    • PUT:修改数据
    • DELETE:删除数据
    • CONNECT:建立连接隧道,用于代理服务器
    • TRACE:追踪请求-响应的传输路径

[注]GET和POST的区别

1.从缓存的角度,get请求会被浏览器主动缓存下来,留下历史记录,而post不会 
2.从编码角度,get只能进行URL编码,只接收ASCII编码,而POST没有限制
3.从参数角度,GET一般放在URL中,因此不安全

常见content-type 类型

  • 常见文本格式
    • text/html:HTML格式
    • text/plain:纯文本格式
    • text/xml:XML格式
  • 图片格式
    • image/gif:gif图片格式
    • image/jpeg:jpg图片格式
    • image/png:png图片格式
  • 音频格式
    • audio/video: audio/mpeg, video/mp4 等
  • 以application开头的媒体格式类型:
    • application/xhtml+xml:XHTML格式
    • application/xml:XML数据格式
    • application/atom+xml:Atom XML聚合格式
    • application/json:JSON数据格式
    • application/pdf:pdf格式
    • application/msword:Word文档格式
    • application/octet-stream:二进制流数据(常见的文件下载)
    • application/x-www-form-urlencoded:表单中默认的encType,表单数据被编码为key/value格式发送到服务器
  • 另外一种常见的媒体格式是上传文件时使用:

multipart/form-data:需要在表单中进行文件上传时,就需要使用该格式

响应体组成

http响应报文由(响应行+响应头+响应体)组成 image.png

响应状态码

  • 1xx: 表示目前是协议处理的中间状态,还需要后续操作。
  • 2xx: 表示成功状态。
  • 3xx: 重定向状态,资源位置发生变动,需要重新请求。
  • 4xx: 请求报文有误。
  • 5xx: 服务器端发生错误。

常见响应状态码

  • 101 Switching Protocols。在HTTP升级为WebSocket的时候,如果服务器同意变更,就会发送状态码 101。
  • 2xx
    • 200 OK是见得最多的成功状态码。通常在响应体中放有数据。
    • 204 No Content含义与 200 相同,但响应头后没有 body 数据。
    • 206 Partial Content顾名思义,表示部分内容,它的使用场景为 HTTP 分块下载和断点续传,当然也会带上相应的响应头字段Content-Range。
  • 3xx
    • 301 Moved Permanently即永久重定向,对应着302 Found,即临时重定向。
    • 304 Not Modified: 当协商缓存命中时会返回这个状态码。详见浏览器缓存
  • 4xx
    • 400 Bad Request: 开发者经常看到一头雾水,只是笼统地提示了一下错误,并不知道哪里出错了。
    • 403 Forbidden: 这实际上并不是请求报文出错,而是服务器禁止访问,原因有很多,比如法律禁止、信息敏感。
    • 404 Not Found: 资源未找到,表示没在服务器上找到相应的资源。
    • 405 Method Not Allowed: 请求方法不被服务器端允许。
    • 406 Not Acceptable: 资源无法满足客户端的条件。
    • 408 Request Timeout: 服务器等待了太长时间。
    • 409 Conflict: 多个请求发生了冲突。
    • 413 Request Entity Too Large: 请求体的数据过大。
    • 414 Request-URI Too Long: 请求行里的 URI 太大。
    • 429 Too Many Request: 客户端发送的请求过多。
    • 431 Request Header Fields Too Large请求头的字段内容太大。
  • 5xx
    • 500 Internal Server Error: 仅仅告诉你服务器出错了,出了啥错咱也不知道。
    • 501 Not Implemented: 表示客户端请求的功能还不支持。
    • 502 Bad Gateway: 服务器自身是正常的,但访问的时候出错了,啥错误咱也不知道。
    • 503 Service Unavailable: 表示服务器当前很忙,暂时无法响应服务。

链接:juejin.cn/post/684490…