前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP 的基础概念

HTTP 的基础概念

作者头像
SkyRiN
发布2018-11-20 17:10:26
8180
发布2018-11-20 17:10:26
举报
文章被收录于专栏:Coding+Coding+

HTTP 的定义

HTTP (Hypertext Transfer Protocol) 即超文本传输协议,和 HTML (Hypertext Markup Language) 超文本标记语⾔一起诞⽣,用于在⽹络上请求和传输 HTML 内容。

超文本 (Hypertext),即「扩展型⽂本」,指的是 HTML 中可以有链向别的⽂本的超链接 (Hyperlink)。

以上定义中 Hyper 有拓展的一层意思,互联网创始之初,人们就在思考如何更加方便的在互联网传输信息,最初这些信息都是以文本形式进行传输,随着互联网信息越积约多,就急需一种让文件之间互相关联起来的方式来提高信息查找效率,于是 HTML 这种在文本文件中可以指向别的文本的语言(Hypertext Markup Language 超文本标记语言)就诞生了,随后用户传输这种文本的协议也诞生了也就是 HTTP 协议。

URL 和 HTTP 报文

URL 格式

三部分:协议类型、服务器地址(和端口号)、路径(Path) 组成结构:协议类型://服务器地址[:端口号]路径 eg.:https://skyrin.cc/user?gender=male

报文格式
请求报文

image.png

响应报文

image.png

HTTP 的工作方式

浏览器

用户在地址栏输入 URL -> 回车 -> 浏览器拼装 HTTP 报文并发送请求到服务器 -> 服务器处理请求后发送响应报文给浏览器 -> 浏览器解析响应报文并使用渲染引擎显示到界面

APP

用户通过点击或其它交互触发联网需求 -> APP 代码执行调用拼装 HTTP 报文并发送请求到服务器 -> 服务器处理请求后发送响应报文给手机 -> 手机接收到响应报文并做相应处理(接收到 HTML 页面加载显示到 WebView,接收到 Json 数据解析存储或展示到 UI 等)

请求方法(Request Method)

GET
  • 用于获取资源
  • 对服务器数据不进行修改
  • 不发送 Body

请求头

代码语言:javascript
复制
GET /users/1 HTTP/1.1
Host: api.github.com
cache-control: no-cache

对应的 Retrofit 代码

代码语言:javascript
复制
@GET("/users/{id}")
Call<User> getUser(@Path("id") String id, @Query("gender") String gender);
POST
  • 用于增加会修改资源
  • 发送给服务器的内容写在 Body 里面

请求头

代码语言:javascript
复制
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

name=rengwuxian&gender=male

对应的 Retrofit 代码

代码语言:javascript
复制
@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name, @Field("gender") String
gender);
PUT

请求头

代码语言:javascript
复制
PUT /users/1 HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

gender=female

对应的 Retrofit 代码

代码语言:javascript
复制
@FormUrlEncoded
@PUT("/users/{id}")
Call<User> updateGender(@Path("id") String id, @Field("gender") String
gender);
DELETE

请求头

代码语言:javascript
复制
DELETE /users/1 HTTP/1.1
Host: api.github.com

对应的 Retrofit 代码

代码语言:javascript
复制
@DELETE("/users/{id}")
Call<User> getUser(@Path("id") String id, @Query("gender") String gender);
HEAD
  • 和 GET 使用方法完全相同
  • 和 GET 唯一区别在于,返回的响应中没有 Body
  • 一般用于下载比较大的文件,从响应报文头获取文件大小等属性

状态码(Status Code)

状态码全部表现为三位数字,用于对应响应结果的类型描述(如「200 请求成功」 「404 内容未找到」),常见如下

  • 1xx:临时性消息;100(继续发送)、101(正在切换协议)。
  • 2xx:成功;200(OK)、201(创建成功)。
  • 3xx:重定向;301(永久移除)、302(暂时移动)、304(内容未改变)。
  • 4xx:客户端错误;400(客户端请求出错)、401(认证失败)、403(被禁止)、404(找不到内容)。
  • 5xx:服务器错误;500(服务器内部错误)、502(网关错误)。

首部(Header)

作用:HTTP 消息的 metadata,也就是属性

Host

目标主机。用于在目标服务器上定位子服务器。

Content-Type

指定 Body 的类型。主要分四类:

1. text/html

请求 Web 页面时返回数据的类型,Body 中返回 html 文本。格式如下:

代码语言:javascript
复制
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 853
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
......
2. x-www-form-urlencoded

Web ⻚面纯⽂本表单的提交⽅式。

3. multitype/form-data

Web ⻚面含有⼆进制⽂件时的提交方式。

4. application/json , image/jpeg , application/zip ...

单项内容(文本或⾮文本都可以),用于 Web Api 的响应或者 POST / PUT 的请求

Content-Length

指定 Body 的长度(字节)

Transfer:chunked(分块传输编码 Chunked Transfer Encoding)

用于当响应发起时,内容长度还没能确定的情况下。和 Content-Length 不同时使⽤。用途是尽早给 出响应,减少⽤用户等待。

格式:

代码语言:javascript
复制
HTTP/1.1 200 OK
Content-Type: text/html
Transfer-Encoding: chunked

4
Chun
9
ked Trans
12
fer Encoding
0
Location

指定重定向的目标 URL

User-Agent

用户代理标识,即谁实际发送和接受请求,例如手机浏览器、某个手机 APP。服务端可以根据它来判断返回界面的类型、样式等达到更好的用户体验,我们也可以用它在 PC Chrome 上调试预览手机页面,例如如下标识,可以让服务端返回手机样式的 HTML 页面:

代码语言:javascript
复制
Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) > AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 > MicroMessenger/6.0.1 NetType/WIFI
Range / Accept-Range

按范围取数据

Accept-Range: bytes 响应报⽂文中出现,表示服务器器⽀支持按字节来取范围数据 Range: bytes=<start>-<end> 请求报⽂文中出现,表示要取哪段数据 Content-Range:<start>-<end>/total 响应报⽂文中出现,表示发送的是哪段数据

作用:断点续传、多线程下载。

其他 Headers
  • Accept: 客户端能接受的数据类型。如 text/html
  • Accept-Charset: 客户端接受的字符集。如 utf-8
  • Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
  • Content-Encoding:压缩类型。如 gzip
Cache

作用:在客户端或中间⽹络节点缓存数据,降低从服务器取数据的频率,以提⾼网络性能。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTTP 的定义
  • URL 和 HTTP 报文
    • URL 格式
      • 报文格式
        • 请求报文
        • 响应报文
    • HTTP 的工作方式
      • 浏览器
        • APP
        • 请求方法(Request Method)
          • GET
            • POST
              • PUT
                • DELETE
                  • HEAD
                  • 状态码(Status Code)
                  • 首部(Header)
                    • Host
                      • Content-Type
                        • 1. text/html
                        • 2. x-www-form-urlencoded
                        • 3. multitype/form-data
                        • 4. application/json , image/jpeg , application/zip ...
                      • Content-Length
                        • Transfer:chunked(分块传输编码 Chunked Transfer Encoding)
                          • Location
                            • User-Agent
                              • Range / Accept-Range
                                • 其他 Headers
                                  • Cache
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档