目录
写在前面
今天简单抽一小段时间来说一下作为一个客户端开发人员应该掌握的一些关于HTTP协议相关的知识点,基本上都是一些理论知识,大家可以根据自身需要选择性了解。
一、HTTP基础
1.1、HTTP概念
首先对HTTP最直观的印象就是以下两点,至于它内部到底是如何工作的,我们暂时还不了解
- 浏览器地址栏中输入地址——打开网页
- Android中发送网络请求——返回对应的数据
从概念上看,HTTP英文全称:Hypertext Transfer Protocol,超⽂本传输协议,和 HTML (Hypertext Markup Language 超⽂本标记语⾔) ⼀起诞⽣,⽤于在⽹络上请求和传输HTML内容。超⽂本即:扩展型文本,是指带有链接的文本(hyperlink)。
1.2、URL和HTTP报文
URL格式:
分为三部分:协议类型、服务器地址(和端口号)、路径(Path)
协议类型://服务器地址[:端口号]路径,举个例子:http://www.baidu.com/users?name=jarchie
报文格式:
①、请求报文:(图片源自网络)
HTTP请求包含的内容:1、请求行;2、HTTP头;3、内容
第一部分请求行的写法是固定的,分别是请求方法、请求网址和HTTP版本。
第二部分HTTP头在HTTP请求中可以是3中HTTP头,分别是:1、请求头(request header)2、普通头(general header)3、实体头(entity header),通常GET请求不包含内容实体,因此不会有实体头。
第三部分内容只在POST请求中存在,因此GET请求并不包含任何实体。
②、响应报文:(图片源自网络)
HTTP响应包含的内容:1、状态行;2、HTTP头;3、返回内容
第一部分状态行包含:HTTP版本、响应状态码、状态码的描述。
第二部分HTTP头包括:响应头(response header)、普通头(general header)、实体头(entity header)。
第三部分HTTP响应内容就是HTTP请求所得到的信息,该信息可以是一个HTML,也可以是一个图片等内容。
补充知识点:HTTP请求头(见下图说明)
二、HTTP请求方法和状态码
2.1、Request Method 请求方法
最常用的是GET和POST这两种请求方式:
①、GET
- 用于获取资源
- 对服务器数据不进行修改
- 不发送Body
②、POST
- 用于增加或修改资源
- 发送给服务器的内容写在Body里
③、PUT
- 用于修改资源
- 发送给服务器的内容写在Body里
④、DELETE
- 用于删除资源
- 不发送Body
⑤、HEAD
- 和GET使用方法相同
- 和GET唯一的区别在于它返回的响应中没有Body
2.2、状态码 Status Code
三位数字,用于对响应的结果做出类型化描述,具体类型如下:
- 100-199:信息类,比如:100继续发送
- 200-299:响应成功,最常见的就是200
- 300-399:重定向类,比如:301永久移动
- 400-499:客户端错误类,比如:400客户端请求错误
- 500-599:服务端错误类,比如:500服务器内部错误
三、HTTP的Header
Header:
- 作用:Http消息的元数据(metadata) 关于数据的数据,对数据进行修饰的
- Host:服务器主机地址即:目标主机地址,注意它不是用来寻址的,不是用来查找对方ip地址的,查找ip地址实际上是在请求开始之前就已经完成了,那一步叫做DNS查询(Domain Name System)
- Content-Length:Body长度
- Content-Type:内容的类型
- text/html:html文本,用于浏览器页面响应
- application/x-www-form-urlencoded:普通表单,encoded URL格式
- multipart/form-data:多部分形式,一般用于传输包含二进制内容的多项内容,boundary作为分界
- application/json:json形式,用于Web Api的响应或POST/PUT请求
- image/jpeg/application/zip...:单文件,用于Web Api响应或POST/PUT请求
- Location:重定向的目标URL
- User-Agent:用户代理
- Range/Accept-Range:指定Body的内容范围
- Cookie/Set-Cookie:发送Cookie/设置Cookie
- Authorization:授权信息
接着再来看一个和内容长度相关的东西,它的优先级相对低一些,我们平时用的可能不多,了解即可:
- Chunked Transfer Encoding:分块传输编码
- 目的:在服务端还未获取到完整内容时,更快对客户端做出响应,减少用户等待
- Transfer-Encoding: chunked
- 表示Body长度无法确定,Content-Length不能使用
- Body格式:
<length1>
<data1>
<length2>
<data2>
0(最后传输0表示内容结束)
举个例子:比如:
4
anqi
10
hello anqi
0
还有就是一些我们做客户端基本上无需直接接触到的其他的Header:
- Accept:客户端能接受的数据类型,比如text/html
- Accept-Charset:客户端接受的字符集,比如utf-8
- Accept-Encoding:客户端接受的压缩编码类型,比如gzip
- Content-Encoding:压缩类型,比如gzip
最后就是Cache,这个客户端开发基本上也是用不到的,这里简单了解即可:
- Cache和Buffer的区别:一个是缓存一个是缓冲,缓冲是有上下游的概念的
- Cache作用:在客户端或者中间网络节点缓存数据,降低从服务器取数据的频率,可以提高网络性能
关于HTTP相关的知识就总结这么多,希望对大家能够有所帮助吧,咱们下期再会!
祝:工作顺利!