HTTP
-
概述:超文本传输协议(Hyper Text Transfer Protocol)
-
传输协议:定义了客户端和服务器通信时,发送数据的格式
-
客户端和服务器端交互:客户端向服务器端发送请求,服务器端向客户端响应请求
-
HTTP特点:
- 基于 TCP/IP 的高级协议
- 默认端口号:80
- 基于请求/响应模型的-一次请求对应一次响应
- 无状态的:每次请求之间相互独立,不能交互数据
Request:请求消息数据格式
-
概述:客户端发送给服务器端的数据
-
请求行的格式
GET /login.html HTTP/1.1 // 请求方式 请求url 请求协议/版本
-
请求方式:HTTP协议中有 7 种请求方式,常用的有下边 2种
- GET
- 请求参数在请求行中,在URL后
- 请求的URL长度有限制
- 不太安全
- POST
- 请求参数在请求体中
- 请求的URL长度没有限制
- 相对安全
- GET
-
请求头:客户端浏览器告诉服务器一些信息
-
请求头格式
- 请求头名称:请求头值
-
常见的请求头
-
User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息,可以在服务器端获取该头的信息,解决浏览器的兼容性问题
-
Referer:告诉服务器,当前请求从哪里来,可以用于防盗链和统计工作
-
-
-
请求空行:用来分割 POST 请求的请求头和请求体的
-
请求体(正文):封装 POST 请求消息的请求参数
-
示例代码
POST /login.html HTTP/1.1 // 请求行 Host: localhost // 请求头 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Referer: http://localhost/login.html Connection: keep-alive Upgrade-Insecure-Requests: 1 // 请求空行 username=zhangsan // 请求体
Response:响应消息数据格式
-
概述:服务器端发送给客户端的数据
-
响应行:
- 格式:协议/版本 响应状态码 状态码描述
- 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态,状态码都是 3 位数字
- 响应状态码分类:
响应状态码 作用 1xx 服务器接收客户端的消息,但没有接收完成,等待一段时间后,发送 1xx 状态码 2xx 成功,状态码:200 3xx 重定向,代表:302(重定向),304(访问缓存) 4xx 客户端错误,代表:404(请求路径没有对应的资源),405(请求方式没有对应的 doXxx方法) 5xx 服务器端错误,代表:500(服务器内部出现异常) -
响应头:
- 格式:头名称:值
- 常见响应头:
响应头名称 作用 Content-Type 服务器告诉客户端本次响应体数据格式以及编码格式 Content-disposition 服务器告诉客户端以什么格式打开响应体数据 响应头的名称 响应头的值 响应值的作用 Content-Type text/plain 纯文本格式,适合显示普通文本内容 text/html HTML格式,用于显示网页内容 application/json JSON格式,用于传输和解析 JSON 数据 application/xml XML格式,用于传输和解析 XML 数据 application/pdf PDF格式,用于传输和现实 PDF 文档 image/jpeg JPEG图像格式,用于传输和显示 JPEG 图片 image/png PNG图像格式,用于传输和显示 PNG 图片 audio/mpeg MPEG 音频格式,用于传输和播放音频文件 video/mp4 MP4 视频格式,用于传输和播放视频文件 multipart/form-data 用于在 HTTP POST 请求中上传文件和表单数据 Content-disposition in-line 默认值,在当前页面内打开 attachment;filename=xx 以附件形式打开响应体。文件下载 -
响应空行
-
响应体:通过POST方式传输的数据
-
示例代码
HTTP/1.1 200 OK // 响应体 Content-Type: text/html;charset=UTF-8 // 响应头,html 方式传输 Content-Length: 101 Date: Wed, 06 Jun 2018 07:08:42 GMT <html> <head> <title>响应消息</title> </head> <body> hello , response </body> </html>