URI的结构
Uniform Resource Locator的缩写,译为“统一资源定位 符”
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
URL的格式由三部分组成:
- 第一部分是协议(或称为服务方式)。
- 第二部分是存有该资源的主机IP地址(有时也包括端口号)。
- 第三部分是主机资源的具体地址,如目录和文件名等。
第一部分和第二部分用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。
请求报文组成
http请求报文由(请求行+请求头+请求体)
请求方法
- 请求方法:
- 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响应报文由(响应行+响应头+响应体)组成
响应状态码
- 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: 表示服务器当前很忙,暂时无法响应服务。