一、什么是HTTP协议
打网球的时候 大家统一用网球(注意不是铅球)。
为了统一,服务器跟浏览器提要求;你们发的信息的格式一定要一样的格式 浏览器要跟服务器提要求:要求的不同服务器发送的响应 数据格式要一直统一
所以:HTTP就是一个基于应用层的通信规范:双方要通信,大家就约定遵守一个规范,即 浏览器客户端与服务器端的数据传输格式规范
其他协议
【客户端】-【服务器程序】
-
TCP/IP
三次握手 关注的是数据是否传输成功 -
UDP
只管发送 - HTTP协议:是基于
TCP/IP
传输层协议实现的,主要关注数据传输的格式是否规范
HTTP是基于TCP传输层协议实现的。有时候也承载于TLS和SSL协议层之上(HTTPS),HTTP的端口是80端口,HTTPS的端口号为443
二、HTTP的版本发展
- 1995 1.0
- 1997 1.1
- 2015 HTTP/2 发布。它不叫 HTTP/2.0,是因为标准委员会不打算再发布子版本了,下一个新版本将是 HTTP/3。
Telnet 程序和功能 打开Windows功能
ctrl+]
GET /message/add.php HTTP/1.1
Host: www.study.com
GET /message/add.php HTTP/1.0
Host: www.study.com
三、HTTP的特点
-
HTTP协议是无状态的 就是说每次HTTP请求都是独立的,在这个两个请求之间没有什么必然的联系
-
多次HTTP请求 在客户端请求网页时,多数并不是一次请求就能成功的,服务器首先是响应HTTP页面,然后浏览器收到响应之后发现HTTP页面还引用了其他资源。例如,CSS、Js文件、图片等等,还会自动发送HTTP请求这些需要的资源。
- 基于TCP协议 HTTP协议目的是规定客户和服务器数据的传输的格式和数据交互行为,并不负责数据传输的细节,底层是基于TCP实现的。现在使用的版本当中是默认持久化连接的,也就是多次HTTP请求使用的一个TCP连接
问题: 1、一个网站 一个页面有三个图片 总共几次请求。 2、如果三张相同的图片呢? 3、如果优化请求
四、URL和URi
-
URL 统一资源定位符 http://www.study.com/message/add.php
- URi /message/add 用于任何资源,可以是本地系统,file 局域网的资源
http://user:pass@host.com:80/p/a/t/h?query=string&name=jack#hash
标识 | 说明 |
---|---|
http | 协议名称 |
user | 用户名(可选) |
pass | 对应密码(可选) |
host.com | 主机域名地址(IP地址) |
80 | 端口号 |
/p/a/t/h | 资源路径 |
?query=string&name=jack | 参数传递 |
hash | 锚点 |
五、HTTP的组成
HTTP协议分为 请求 和 响应 两个部分。请求是指客户端向服务器发送的消息,响应时指服务器收到的消息后向客户端返回的消息。
5.1、请求组成
- 请求行
- 请求头信息
- 请求主体信息
请求头信息与主体信息之间要有一个空行
请求格式
请求行(方法、路径、协议)
请求头信息(格式为key=value)
空行
请求主体(可选)发送的内容
—--------------------------
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:25
Content-Type:application/x-www-form-urlencoded
Host:www.study.com
Origin:http://www.study.com
Referer:http://www.study.com/http/login.php
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36
【Form Data】
username=admin&pwd=abc%24123
5.2、响应头格式:
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 23 Aug 2017 09:15:41 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.45
Content-Encoding: gzip
5.3、HTTP动词(请求方式)
-
GET 获取资源 GET方法用来请求访问已被URL识别的资源,也就是指定服务器处理请求后响应的内容
-
POST 创建资源 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致的资源的建立或已有的资源修改
-
PUT 修改资源 从客户端向服务器发送的数据取代指定的内容。就是修改资源
-
HEAD 获取报文首部 HEAD方法类GET方法,不同的是HEAD方法不要求返回数据。用于确认URL的有效性及资源更新时间等
-
DELETE 删除文件 delete方法用来删除文件,与PUT方法相反。DELETE是要求返回URL指定的资源
- OPTIONS 询问支持的方法 因为并不是所有的服务器都支持规定的方法。为了安全有些服务器会禁用一些方法。例如DELETE、PUT等,那OPTIONS就是用来询问服务器支持的方法
HTTP状态码与状态文字
状态码 用来反映服务器响应状态。 状态文 字是用来描述状态码的
HTTP状态码分类
HTTP状态码由三个十进制的数组成。第一个数定义的状态码类型,后两个数字没有分类的作用。HTTP状态码其分为5中类型
分类 | 分类描述 |
---|---|
1xx | 指示信息 - 请求已经接收,继续处理 |
2xx | 成功 - 请求已经成功接收处理 |
3xx | 重定向 - 要完成请求需要进行更近一步的操作 |
4xx | 客户端错误 - 请求有语法错误或请求无法的请求 |
5xx | 服务器端错误 - 服务器未能实现合法的请求 |
常用的状态码、状态描述和说明
状态码 | 说明 |
---|---|
200 | OK:客户端请求成功 |
400 | Bad Request:客户端请求有语法错误,不能被服务器所理解 |
401 | Unauthorize:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用 |
403 | Forbidden:服务器收到请求,但是拒绝提供服务 |
404 | Not Found:请求资源不存在,例如输入了错误的URL |
500 | Internal Server Error:服务器发生了不可预期的错误 |
503 | Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |