周末闲着没事,就复习下 HTTP 基础知识。
HTTP到底是什么?
- 浏览器输入url,打开一个网页。
- 开发者发送网络请求,返回数据。
以上2点都是 HTTP 的应用,HTTP 的全称是 HyperText Transfer Protocol 超文本传输协议。我们要获取想要的数据,就需要定义一种协议,不然怎么知道拿到的或者发出的是对方需要的呢。
HTTP 的工作方式是声明?
sequenceDiagram
浏览器->>服务器: 发送请求
服务器-->>浏览器: 响应
在浏览器输入一个地址,显示一个网页的过程,也就是浏览器发送请求到输入地址对应的服务器,服务器把对应页面数据返回给浏览器,浏览器渲染出来的。这个过程中,怎么把地址栏的url转化成请求的?请求和响应的数据格式是声明呢?
转化
https://api.github.com/users/octocat/orgs
上面的url会被拆分为3部分:
- 协议类型 :HTTP
- 服务器地址:api.github.com
- 路径:/users/octocat/orgs
然后组成请求报文,被浏览器通过 HTTP 发送。
请求报文
requese 报文结构:
报文.jpg上面的URL转化后的样子如下:
未命名绘图.jpg请求方法
- GET
获取资源,没有body。 - POST
增加或修改资源,有body。 - PUT
修改资源,有body。 - DELETE
删除资源,没有body。 - HEAD
类似于 GET ,响应报文没有body。比如下载文件,利用 HEAD 快速获取文件大小。
PUT 和 POST 的区别在于,PUT 只修改数据,不增加。
响应报文
response 报文结构:
响应.jpg截屏2020-09-12 上午11.00.45.png
一些常见响应码:
- 1xx:指示信息--表示请求已接收,继续处理。
- 2xx:成功--表示请求已被成功接收、理解、接受。
- 3xx:重定向--要完成请求必须进行更进一步的操作。
- 4xx:客户端错误--请求有语法错误或请求无法实现。
- 5xx:服务器端错误--服务器未能实现合法的请求。
各类型常见状态代码、状态描述的说明如下:
- 200 OK:客户端请求成功。
- 301 资源永久重定向:请求服务器,返回301,响应头里带着 Location 指向新的地址。浏览器会帮我们向新的地址再发一次请求。
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
Header
Header 里是 HTTP 消息的元数据,常用的有下面几项:
Host
Host 的值是服务器主机地址,在请求发送前,通过 dns寻址,找到对应的主机。
Content-Type/Content-Length
Content-Length:内容的长度,字节为单位
Content-Type:内容的类型,一般有以下几种:
- text/html: html 文本,就是浏览器上的网页。
- application/x-www-form-urlencoded:普通表单,拼接成 key=value格式,多组数据用
&
分割。 - multipart/form-data:多部分形式,一般用于传输二进制内容,比如图片上传,一次可以提交多种信息。内容如果是多部分,用
bodundart
分割。 - img/jpeg: 传输单张图片,与上面的区别是,上面可以传输单张或者多张,也可以是别的类型,比如一个文件。
- applation/json: json 形式,用于 Web Api的响应或者 PUT/POST 请求,一般开发移动端,后台返回的数据格式就是 json。
- application/zip:单文件,多用于 Web Api 的文件上传下载。
Location
在 服务器重定向的时候,会返回 Location ,它的值就是新的主机地址。
User-Agent
是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识,应用开发中,我们可以告诉浏览器我们是哪个版本的应用,方便前端做版本控制。
Range/Accept-Range
响应头里如果有Accept-Range
,说明支持分段加载,比如打开一个百度美女图片
就代表支持分段加载,单位是 bytes,我们可以在请求头里指定 Range:bytes=0-1000,这个图片是 2000 字节,这样只会显示一半。下半段我们没有请求。
Cookie/Set-Cookie
发送和设置 Coolie
Authorization
授权信息
Accept
客户端能接受的数据类型,如 text/html
Accept-Charset
客户端能接受的字符集
Accept-Encoding
客户端能接受的压缩编码类型,如 gzip
Content-Encoding
压缩类型,如 gzip
网友评论