Http基础
   Author: Gentleman.Hu
   Create Time: 2021-06-18 17:26:25
   Modified by: Gentleman.Hu
   Modified time: 2021-06-18 18:19:23
   Email: [email protected]
   Home: https://crushing.xyz
   Description: HTTP基础HTTP的定义
Hypertext Transfer Protocol, 超文本传输协议, 与HTML一起诞生, 用于请求和传输HTML内容.
HTTP工作机制
浏览器
用户输入地址后回车或点击链接->浏览器拼装HTTP报文并发送给服务器->服务器处理请求后发送响应报文给浏览器->浏览器解析响应报文并使用渲染引擎显示到界面
手机APP
用户点击界面或者自动触发联网请求-> Android代码调用拼装HTTP报文并发送请求到服务器->服务器处理请求后发送响应报文给手机->Android代码处理响应报文并作出相应处理(存储数据,加工数据,显示数据到界面等)
URL和HTTP报文
URL格式
- 协议类型 
- 服务器地址(端口号) 
- 路径(path) 
协议://服务器地址[:port]/路径 https://www.crushing.xyz
报文格式
- 请求报文 

- 响应报文 

请求方法 - Request Method
- GET - 获取资源 
- 不对服务器数据进行修改 
- 不发送body 
 
GET /users/1 HTTP/1.1
Host: api.github.com对应的Retrofit代码:
@GET("/users/{id}")
Call<User> getUser(@Path("id") String id, @Query("gender") String gender);- POST - 增加或者修改资源 
- 发送给服务器的内容在body里 
 
POST /users HTTP/1.1 
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=godlin&gender=male对应Retrofit代码:
@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name, @Field("gender") String gender);- PUT 
PUT /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
gender=female对应Retrofit代码:
@FormUrlEncoded
@PUT("/users/{id}")
Call<User> updateUser(@Path("id") String id, @Field("gender") String gender);- DELETE 
DELETE /users HTTP/1.1
Host: api.github.comRetrofit代码
@DELETE("/users/{id}")
Call<User> deleteUser(@Path("id") String id,@Query("gender") String gender);- HEAD - 跟GET用法一致 
- 唯一区别,返回响应无Body 
 
状态码 - Status Code
- 1xx: 临时消息,100继续发送,101正在切换协议 
- 2xx: 成功.200 ok,201 创建成功 
- 3xx: 重定向. 301永久移动,302临时移动,304内容未改变 
- 4xx: 客户端错误. 400客户端请求错误,401认证失败,403禁止,404找不到 
- 5xx: 服务器错误. 500服务器内部错误. 
头部 - Header
作用: HTTP消息的metadata
- Host: 目标主机. ! 不是用于网络寻址的,而是在目标服务器上用于定位子服务器的. 
- Content-Type: 指定Body类型,主要4类 - text/html 
- x-www-form-urlencoded 
- multipart/form-data 
- application/json, image/jpeg, application/zip ... 
 
- Content-Length 
- Transfer: chunked 
- Location 
- User-Agent: 用户代理.谁实际发送请求,接受响应. 
- Range/Accept-Range - Accept-Range: bytes 服务器按照字节取范围数据 
- Range: bytes=- 请求报文出现,表示取那段数据 
- Content-Range: -/total 响应报文中出现,表示发送的是那段数据 
- 作用: 断点续传,多线程下载 
 
- Accept: 客户端可以接受的数据类型.如 text/html 
- Accept-Charset: 客户端接受的字符集.如 utf-8 
- Accept-Encoding: 客户端接受的压缩编码类型.如gzip 
- Content-Encoding: 压缩类型. 如gzip 
Cache
作用: 在客户端或者中间网络节点缓存数据,降低从服务器取数据的频率,提高网络性能.
REST
- 使用资源的格式定义URL 
- 规范使用method定义网络请求操作 
- 规范使用status code表示响应状态 
- 其他服务HTTP规范的设计准则 
copy from hencoder notes pdf
Last updated
Was this helpful?