一、啥是HTTP?为毛会有它
http 全称 hypertext transfer protocol (超文本传输协议,强烈建议以后把相关词汇的英语记熟),是基于tcp协议的面向连接的安全可靠的应用层网络传输协议。创建的初衷是为了接收和发布html格式信息,其请求方式是客户端通过url来发送请求和获取响应,也就是说http是一种只能实现客户端发送,服务端响应的tcp/ip协议(这就和websocket等协议不同,因为这些协议是可以由服务端来主动发送报文的)。
二、特点
1.基于请求/响应模型的协议。请求和响应必须成对,先有请求后有响应
2.http协议默认端口:80
3.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
4.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
5.无连接 (注意不是面向无连接):无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
6.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
三、状态码
状态码:发送请求后,服务端会有响应,响应的类型对应一个状态码,由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:虽然304被划分在3XX,但和重定向一毛钱关系都没有。表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体,比如请求路径在本地已经缓存过,直接本地获取。
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:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,
四、请求报文结构:
请求消息(Request Message):客户端向服务器发送的请求消息,具体图片如下:
请求消息包括三部分:
1、请求起始行
- 请求方法
- GET :表示客户端向获取服务器上的资源(img/js/..),无请求主体 ,依靠地址栏传递数据给服务器
- POST:表示客户端想传递数据给服务器,有请求主体
- PUT: 表示客户端想把文件放到服务器上(禁用),有请求主体
- DELETE:表示客户端想删除服务器上指定的文件(禁用)
- HEAD: 表示只想获取指定 的响应头
- CONNECT: 测试连接
- TRACE: 追踪请示路径
- OPTIONS: 选项,保留以后使用...
- 请求URL
- 协议 和 版本号 :HTTP / 1.1
2、请求头
- Host:localhost :告诉服务器请求哪一个虚拟主机
- Connection:keep-alive:告诉服务器做持久连接
- User-Agent; 告诉服务器,客户端浏览器的类型
- Cache-Control:max-age=0;: 告诉服务器缓存信息,max-age,即不缓存
- Accept-Language : zh-CN :告诉服务器自己能接收的自然语言
- Accept-Encoding:gzip:告诉服务器自己可以接收的压缩类型
- Referer: url :告诉服务器请求来自于哪个页面
3、请求体
- Form Data : 是真正的请求主体
五、响应报文结构
响应消息(Response Message ): 服务器端根据客户端的请求消息,返回给客户端的响应消息。图片如下:
http协议—响应报文格式
1、响应起始行
- 协议版本号: HTTP / 1.1
- 响应状态码
- 1-100: 提示信息
- 2-200:服务器端成功响应所有的信息 OK
- 3-300:需要客户端进行重定向301 :
- 永久性重定向
- 302 :临时重定向
- 304 :Not Modified
- 4-400:客户端请求错误
- 404 :Not Found,请求资源不存在
- 403 :Forbidden,没有访问权限
- 405 :Method Not Allowed,请求方法不被允许
- 5-500:服务器运行错误
- 500 :服务器内部错误
- 501 :没有实现
3. 原因短句:对状态码的简单解释
200 : OK
404 : Not Found
2、响应消息头:
- Content-Type:
- 响应的主体类型,告诉浏览器,响应的数据时什么格式以及什么类型的
- 取值:
- text/plain:纯文本,告诉浏览器按纯文本的方式解析
- text/html:文本与网页,告诉浏览器按html的格式解析内容
- text/css:样式,告诉浏览器按 css 的方式解析
- application/javascript:JS代码片段,按JS的方式运行数据
- application/xml: 按 xml 的方式解析
- application/json: 按 json 的方式解析
3、响应体:
- 服务器响应信息
六、缓存
缓存的作用:可以让客户端自动保存已经访问过的文档副本,这些内容会被key-value的格式被存储,当客户端再次访问同一个URL时,就会将其作为key来获取本机存储的对应value,不用再重新发送请求
缓存优点:
1、减少了冗余的数据传输,节省流量
2、缓解服务器带宽瓶颈的问题,服务器可以节省更多的带宽
3、降低了对服务器的资源消耗和运行要求
4、降低了由于远距离而造成的加载延迟
与缓存相关的消息头
- Cache-Control:从服务器将文档传来之时起,认为新鲜的秒数 : 取值:秒数 60 / 3600 / ... ... 如果取值为 0 / no-cache,表示每次都要重新刷新网页
- Expires: 明确指定缓存的过期时间,取值是格林尼治标准时间(GMT) : Expires:Fri,25 Aug 2017,08:00:00 GMT, Expires:0 表示不需要缓存
如何在HTML网页中设置消息头
- http-equiv :指定消息头的名称
- content :指定消息头对应的内容
例子展示: