Bootstrap

通信 / HTTP 详解

一、基本信息

1、英文简称

HyperText Transfer Protocol

2、一种网络协议,在网络中传输的特定格式的字符串。所以该协议并没有强调下层协议的类型,即承载方,所以不必须为 TCP/IP,只要是可靠的协议就行,因为 HTTP 协议通信仅仅是交互特定格式的字符串,只要保质保量能够传输双方的字符串即可,故对底层协议无过多要求。

3、一般 HTTP 底层网络使用 TCPIP,提供 HTTP 服务的服务器提供的端口号为 80 。

4、HTTP 协议是基于请求 / 响应模型的协议。请求和响应必须成对,先有请求后有响应。

5、HTTP 协议可以传输任何类型的数据,例如 JSON,XML等,其格式的说明由 Content-Type 加以标记。

6、面向无连接,即:每个连接只能处理一个客户端的请求,服务器处理完该请求并收到客户端的应答之后,就断开了连接。

7、版本

  • HTTP / 1.0,发送请求,创建一次连接,获得一个 web 资源,连接断开。
  • HTTP / 1.1,发送请求,创建一次连接,获得多个 web 资源,连接断开。

二、诞生原因

提供一种发布和接收 HTML 页面的方法,该 HTML 页面在网络中就是特定格式的字符串。

三、协议组成

http 请求包括:请求行、请求头、请求体。

http 响应包括:响应行、响应头、响应体。

1、请求协议

(1)请求行 

格式:请求方式      资源路径      协议 + 版本

注意:请求行必须在http请求格式的第一行。

栗子:POST /chapter17/user.html HTTP/1.1

请求方式作用优点缺陷其他
get请求从服务器中获取数据 

参数位于 URL 中,有安全隐患;

URL 长度限制 get 请求方式数据的大小。

 
post

向服务器中提交数据,

数据位于请求体中

   
HEAD服务器只返回响应行和响应头较 get 速度快,节省带宽  
DELETE删除服务器上资源   
OPTIONS

用于获取当前URL所支持的方法。

若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

   
PUT把一个资源存放在指定的位置上。  与 POST 相似,区别在于 PUT 指定了资源的存放位置,而 post 上传的数据由服务器决定存放位置。
TRACE回显服务器收到的请求,主要用于测试或诊断。   

(2)请求头 

① Accept:告诉服务端,该请求所能支持的响应数据类型,采用 MIME 格式(文件类型的一种描述方式)。

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

栗子:

text / html,html 文件

text / css,css 文件

text / javascript,js 文件

image/*,所有图片文件

② User-Agent:浏览器通知服务器,客户端浏览器与操作系统相关信息。

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

③ Connection:表示客户端与服务连接类型;Keep-Alive 表示持久连接,close 短链接。

Connection: keep-alive

④ Content-Length:请求体的长度。

POST http://39.108.107.149:8080/vk/app/rest/ddp/iModelServiceImpl/findModelByType HTTP/1.1
User-Agent: Fiddler
Host: 39.108.107.149:8080
Content-Length: 11
 
name=城市

⑤ Content-Type:请求的与实体对应的MIME信息。如果是 post 请求,会有这个属性,默认值为 application/x-www-form-urlencoded,表示请求体内容使用 url 编码。

Content-Type: application/x-www-form-urlencoded

⑥ Accept-Encoding:浏览器通知服务器,浏览器支持的数据压缩格式。如 GZIP 压缩。

Accept-Encoding: gzip, deflate

⑦ Accept-Language:浏览器通知服务器,浏览器支持的语言。各国语言(国际化 i18n )

Accept-Language: zh-CN,zh;q=0.9

 

更多请求头属性可以参考这篇文章:HTTP响应头和请求头信息对照表 。

(3)请求体

当请求方式是 post 时,请求体会有请求的参数,格式如下:

username=zhangsan&password=123

2、响应协议

(1)响应行

① 报文协议及版本;

例如:

HTTP/1.1 200 OK

② 状态码及状态描述;

状态码:由3位数字组成,第一个数字定义了响应的类别

1xx:指示信息,表示请求已接收,继续处理。

2xx:成功,表示请求已被成功接受并处理。

  • 200 OK:客户端请求成功
  • 204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
  • 206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容

3xx:重定向

  • 301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。

  • 302 Found:临时重定向,表示请求的资源临时搬到了其他位置

  • 303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问

  • 307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET

  • 304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有

4xx:客户端错误

  • 400 Bad Request:客户端请求有语法错误,服务器无法理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务
  • 404 Not Found:请求资源不存在。比如,输入了错误的url
  • 415 Unsupported media type:不支持的媒体类型

5xx:服务器端错误,服务器未能实现合法的请求。

  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,

(2)响应头

服务器通过响应头来控制浏览器的行为,不同的头浏览器操作不同。

响应头属性可以参考这篇文章:HTTP响应头和请求头信息对照表

(3)响应体

 响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染并显示。

四、长连接和短链接区别

1、当请求头中的 Connection 为 keep-alive 时该连接为长连接(默认)。

2、当请求头中的 Connection 为 close 时该链接为短链接。

 

(SAW:Game Over!) 

;