HTTP定义
Hypertext Transfer Protocol,超⽂文本传输协议,和 HTML (Hypertext Markup Language 超⽂文本标 记语⾔言) ⼀一起诞⽣生,⽤用于在⽹网络上请求和传输 HTML 内容。
超⽂文本,即「扩展型⽂文本」,指的是 HTML 中可以有链向别的⽂文本的链接(hyperlink)。
URL格式
URL格式:
协议类型://服务器器地址[:端⼝号]路径
http://hencoder.com/users?gender=male
报文格式
- 请求报文:
- 响应报文:
HTTP方法
- GET
- 用于获取资源
- 对服务器器数据不进行修改
- 不发送Body
1 | GET /users/1 HTTP/1.1 |
对应 Retrofit 的代码:
1 | @GET("/users/{id}") |
- POST
- 用于增加或修改资源
- 发送给服务器器的内容写在Body⾥面
1 | POST /users HTTP/1.1 |
对应 Retrofit 的代码:
1 | @FormUrlEncoded |
- PUT
- 用于修改资源
- 发送给服务器器的内容写在Body里面
1 | PUT /users/1 HTTP/1.1 |
对应 Retrofit 的代码:
1 | @FormUrlEncoded |
- DELETE
- 用于删除资源
- 不发送Body
1 | DELETE /users/1 HTTP/1.1 |
对应 Retrofit 的代码:
1 | @DELETE("/users/{id}") |
- HEAD
- 和 GET 使⽤用⽅方法完全相同
- 和 GET 唯⼀一区别在于,返回的响应中没有 Body
其中GET、PUT、DELETE、HEAD是幂等的。
HTTP响应码
常用响应码:
- 100:继续,用于多段HTTP请求。
- 101:切换协议。例如由HTTP1.1变为2.0
- 200:请求成功。
- 301:资源被永久移动,浏览器会自动定向到新URI。
- 302:资源被临时移动,客户端应继续使用原有URI。
- 400:客户端语法错误,服务器无法解析。
- 401:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403:服务器理解请求客户端的请求,但是拒绝执行此请求。
- 404:服务器无法根据客户端的请求找到资源。
- 500:服务器内部错误,无法完成请求。
Header
Content-Type
内容类型,主要有四类:
- text/html
请求 Web ⻚页⾯面是返回响应的类型,Body 中返回 html ⽂文本。
格式如下:
1 | HTTP/1.1 200 OK |
- x-www-form-urlencoded
Web ⻚页⾯面纯⽂文本表单的提交⽅方式。
格式如下:
1 | POST /users HTTP/1.1 |
对应 Retrofit 的代码:
1 | @FormUrlEncoded |
- multitype/form-data
Web ⻚页⾯面含有⼆二进制⽂文件时的提交⽅方式。
格式如下:
1 | POST /users HTTP/1.1 |
对应 Retrofit 的代码:
1 | @Multipart |
- application/json , image/jpeg , application/zip …
单项内容(⽂文本或⾮非⽂文本都可以),⽤用于 Web Api 的响应或者 POST / PUT 的请求 请求中提交 JSON。
JSON方式
请求中提交JSON:
1 | POST /users HTTP/1.1 |
对应 Retrofit 的代码:
1 | @POST("/users") |
响应返回JSON:
1 | HTTP/1.1 200 OK |
二进制方式
请求中提交二进制内容:
1 | POST /user/1/avatar HTTP/1.1 |
对应 Retrofit 的代码:
1 | @POST("users/{id}/avatar") |
响应中返回二进制内容:
1 | HTTP/1.1 200 OK |
Content-Length
指定 Body 的⻓长度(字节)。
Transfer: chunked (分块传输编码 Chunked Transfer Encoding)
⽤于当响应发起时,内容⻓长度还没能确定的情况下。和 Content-Length 不不同时使⽤用。⽤用途是尽早给 出响应,减少⽤用户等待。
格式:
1 | HTTP/1.1 200 OK |
Location
指定重定向的⽬目标 URL
User-Agent
用户代理,即是谁实际发送请求、接受响应的,例如⼿机浏览器、某款手机App。
Range / Accept-Range
按范围取数据。
Accept-Range: bytes 响应报⽂文中出现,表示服务器器⽀支持按字节来取范围数据 Range: bytes=
作⽤:断点续传、多线程下载。
charset
编码,例如utf-8。
HTTP缓存
ETag
ETag是服务器生成并返回的随机令牌,通常是文件内容的哈希值或某个其他指纹。
验证令牌可实现高效的资源更新检查:资源未发生变化时不会传送任何数据,服务器将返回“304 Not Modified”响应。
在下一次请求中,If-None-Match的值为上次的ETag的值。服务器根据If-None-Match的值(即内容摘要)判断缓存的资源是否有效。
Cache-Control
- no-cache:表示必须先与服务器确认返回的响应是否发生了变化,然后才能使用该响应来满足后续对同一网址的请求。
- no-store:直接禁止浏览器以及所有中间缓存存储任何版本的返回响应。
- public:是指资源应该被缓存,并且中间经过的代理服务器(假如有的话)也应该缓存这个资源。
- private:是指资源应该被缓存,但是只能被客户端的浏览器缓存。
- max-age:指令指定从请求的时间开始,允许获取的响应被重用的最长时间(单位:秒)
- Expires:表示在某个时间点后过期。