HTTP简介:
1.HTTP是Hyper Text Transfer Protocol的缩写(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。你问我什么是超文本?
2.是基于TCP/IP通信协议来传递数据的(HTML文件,图片文件,查询结果等)。
3.HTTP基于C/S架构模型(客户端/服务端),通过一个可靠的链接来交换信息。浏览器作为HTTP客户端向WEB服务器发送所有的请求,WEB服务器收到请求以后,向HTTP客户端发送响应消息。
特点:
1.简单快速:客户端每次向服务器发出请求的时候只需要传递请求方法和路径。常用方法比如:GET,POST,每种方法规定了客户端和服务端联系方式的不同。由于HTTP协议简单,使得HTTP服务器程序规模小,因此通信速度较快。
2.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type标记。
3.无连接:无连接的意思是每次连接只会处理一个请求(相对的也会有一个响应)。服务器处理完客户的请求以后,客户端拿到了服务器发出的响应,随后断开连接。采用这种方式节省传输时间。
4.无状态:HTTP协议是无状态协议。无状态是指协议对事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP请求报文:
HTTP请求报文由三部分组成
请求行由(123)组成:1是请求方法;2是url地址,它和报文头的Host属性组成完整的请求URL;3是协议名称和版本号。
请求头(4):是HTTP的报文头,报文头包含若干个属性,格式均为"属性名:属性值",服务端由此获得客户端的信息。与缓存有关的信息都放在头部(header)。(key:value的形式,一个key对应一个value,一个key对应多个value,但是其实一个key也可以对应多个value。结果区别就是aa:bb和aa:bb,cc)
请求体(5):它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载着多个请求参数的数据。
HTTP请求报文属性:
Accept :请求报文通过Accept属性告诉服务器,大哥我就只能接受这个类型的响应(比如纯文本),你发图片我就GG了!(当然了,Accept属性的值可以为一个或者多个MIME类型的值,就可以接受几种响应啦)
cookie:缓存信息。
Cache-Control:对缓存进行控制。比如你希望禁止缓存,或者缓存一年,或者一月,这些都是通过设置这个属性。
HTTP响应报文也由三部分组成
响应行(12) 组成:1是报文协议及版本,2是状态码及描述。
响应头(3):和请求头一样,由属性组成。
响应体(4):是服务器返回给客户端的文本信息。
HTTP响应报文属性
Cache-Control :响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。常见的有:(默认 为private)
private: 客户端可以缓存
public: 客户端和代理服务器都可缓存(前端的同学,可以认为public和private是一样的)
max-age=xxx: 缓存的内容将在 xxx 秒后失效
no-cache: 需要使用对比缓存来验证缓存数据
no-store: 所有内容都不会缓存Location:当我们想要页面重定向redirect的时候,设置Location的属性值(地址)跳转到该地址
Cookie:缓存信息
响应状态码
- 1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急...
- 2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
- 3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
- 4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
- 5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。
◆200 (OK): 找到了该资源,并且一切正常。
◆302/307:临时重定向,指出请求的文档已被临时移动到别处, 此文档的新的url在location响应头中给出
◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。
◆500 Internal Server Error:看到这个错误,你就应该查查服务端的日志了,肯定抛出了一堆异常,别睡了,起来改BUG去吧!