1.什么是HTTP协议?
HTTP(Hypertext Transfer Protocol) 超文本传输协议, 是网络应用层上的一种用于传输浏览器与服务器之间数据的协议.
HTTP是一种基于请求/响应式的,无状态的协议(即协议本身并不存储当前状态).
2.HTTP的发展历史?以及他们的区别?
HTTP 0.9 1991 | HTTP1.0 1996 | HTTP 1.1 1996 | HTTP 2.0 2015 |
协议只支持GET方法 只支持HTML格式的响应 每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接 | 支持GET.PUT.HEAD方法 可以传送任意格式的内容 每个TCP连接只能发送一个请求 | 支持PUT.PATCH.HEAD.OPTIONS.DELETE方法 客户端请求的头信息新增了Host字段,用来指定服务器的域名 | 引入头信息亚索机制 浏览器和服务器都可以同时发送多个请求或回应 |
非持续型的连接, 举例:
1.HTTP客户在自己主机上发起一个连接服务器www.colacs.cn的TCP请求.
2.HTTP客户通过通过套接字往该服务器发送一个HTTP报文(message).请求一个 /index.html.
3.HTTP服务器从传输层提供的套接字接口得到这个HTTP报文,从存储器(RAM或磁盘)中取出index.html,把它封装到响应报文中,发送给套接字接口.
4.HTTP服务器随后通知TCP断开该TCP连接.(直到TCP确认客户端已经收到响应报文)
5.HTTP客户端收到了index.html后,通知TCP断开连接.从HTML取出需要继续获取的资源,例如,图片链接
6.继续从2-5的过程(建立链接又断开的过程).
缺点: 1.在每次连接中,在服务器和客户端都要分配TCP的缓冲区和保持TCP变量.给服务器带来负担.2.要进行多次TCP的握手分手连接,RTT交付时延增加.
所以以连接式来进行.当一段默认时间内没有继续请求页面,则断开连接.
3.具体的HTTP请求
第一行是请求行,后继叫做首部行.
请求行包含三个字段:方法, url目录 协议版本. 方法:GET, POST, PUT, HEAD和DELETE,OPTIONS.一般使用GET和POST两种方法.之后的内容就是主机地址,连接方式(keep-alive持续连接). 浏览器版本(User-Agent),客户机支持接收的内容(ACCEPT),接收编码等等的消息.
同理,响应报文,分为三个部分,1.初始状态行,2. 首部行 3. 实体.
状态行是HTTP版本号, 返回的状态码(表示当前服务器对reqeust的响应), 以及响应对应的状态(对状态码的解释). 首部行的内容,大致是服务器地址, Date:返回首部行产生的事件, Content-type:返回资源的类型, Transfer-Encoding:传输的编码, Last-Modified:在服务端最后一次更改的时间(对于本地缓存判断很有用).Expires:表示当前长连接的过期时间.
撸到这里肯定想知道返回头的状态码的常规操作:
200 ok:请求成功,信息返回在响应报中
301 Moved Permanently: 请求的对象已经被永久转移,新的url在响应报文的location:首部行中.浏览器会自动去访问location的地址
302 Found 临时的重定向.
304 Not Modified: 表示当前请求的资源并没有被更改(可以直接使用缓存中的资源)
400 Bad Request: 一个通用的差错码, 表示请求不能被服务器理解
401 Unauthorized 未授权访问.某些需要权限的访问未认证通过
403 Forbidden 禁止访问当前资源
404 Not Found: 被请求的文档不在服务器上.
500 Internal Server Error 内部错误.
503 Server Unavailable 服务不可达.
505 Http version Not Supported: 服务器版本不支持当前的请求报文.
4.cookie是什么?
cookie是用户与服务器的交互方式.
常规操作:
1.HTTP响应报中包含一个cookie的首部行, 即上面的Set-cookie.
2.客户的请求报中带上这个代表身份的值.
其中客户端的浏览器中缓存这个cookie,在之后的访问中使用. 而后端把cookie存入到数据库中.
作用呢?
上面提到http是无状态的,所以为了让他有状态(如登录了一个网站后,之后的操作都是绑定的用户的各种姿势的操作).因此需要有这样的值在客户与服务器直接维护着这一身份.那么cookie就应运而生了. session也是类似的效果,每次登录都可能会产生这样的一个值,当关闭这个网站后,就删除这个值.(expires值常设为1969)
存在问题?
如果cookie被窃取,可能被恶意用户直接拿cookie来登录. 而服务提供方,可以通过cookie绑定唯一的用户来给用户做一些定制化的东西,而定制化的本身是牺牲了用户的信息.如,可能记录用户访问记录,点击记录等等消息.
5.引入Web缓存的作用(与HTTP相关操作)
web缓存也叫做web代理.它是服务器和客户端直接的一个中介, 起着转发请求报和响应报的作用.当然最重要的作用就是它可以缓冲响应的信息.这样就可以提高整体的服务的能力.这样的话服务器的带宽可以相应的减少,只需要保证代理服务器到客户的传输路劲的带宽就行.即使用一种类似Cache的作用.
以上就是常规的HTTP操作.之后介绍HTTPS
引用:https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
计算机网络:从顶到底
图解HTTP