有兴趣能够关注个人博客 王二小的博客php
维基百科上解释为:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协做式和超媒体信息系统的应用层协议[1]。HTTP是万维网的数据通讯的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。经过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。css
GET
请求,且不支持请求头,HTTP
请求第一步,应该是由客户端发起一个HTTP
请求,固然这个客户端能够是例如咱们的浏览器,F12调试,发起咱们的第一个请求头信息。
假设咱们如今开始请求我本身的博客 王二小的博客nginx
你会看到,这是几行文本,这里插一句,HTTP/1.1
沿用的是文本类型的请求头,HTTP/2
则会使用二进制数据。
接下来,咱们分析下这个请求编程
GET
请求,地址是http://www.wedophp.com/
,使用的协议是HTTP/1.1
URL
地址keep-alive
指的是使用长链接,请记住啊,HTTP/1.1
默认使用的就是长链接,什么是长链接?待会在分析。HTTPS
,这种页面的请求中不容许附带HTTP
请求,一旦附带,就会报错,因此有这个之后,浏览器就会自动升级请求。IE
版本。cookie
信息,每一个cookie
是由一个key
,一个value
形式的,每一个key=>value
以后都会有一个空格隔开说道如何链接的,咱们必需要回顾一个东西,那就是大学学到过的计算机网络基础,几乎全部的大学生
都应该了解过计算机的网络模型,也就是咱们熟知的七层网络模型
,以下图浏览器
可是计算机网络中的七层模型毕竟是理想中的状况,现实是不多有应用实现了七层模型,通常都是整合其中两个或多个,实现一个四层或者五层的模型。缓存
在这里咱们研究的是HTTP
,天然要知道它所处在哪一个模型中,答案是应用层
。这里要引入一个TCP\IP
的概念,你们应该知道,TCP
处于传输层,IP
属于网络层,而咱们这里所探究的HTTP
,实际上就是基于TCP/IP
协议开发的,至于TCP/IP
的网络模型,它没有照搬计算机网络的七层模型,而是整合了表示层
,会话层
,应用层
,统一为应用层,比较有争议的是,关于TCP/IP
到底是几层协议,目前为止没有定论,通常我比较习惯统称为四层协议,至于别人说的五层协议,其实就是数据链路层
,物理层
是否是一层有所争议吧。如图:安全
由于HTTP
是基于TCP/IP
开发的协议,看过HTTP
协议的同窗确定都知道,有句话概述HTTP
协议为无差错的协议
,按序传输
,未分段的数据流
,这其实说的就是TCP
协议。性能优化
当你在浏览器输入一个URL
的时候,有没有想过这其中发生了什么?服务器
http://www.wedophp.com
DNS
获取服务器IP
112.23.59.223:80
服务器 (这里实际上是TCP
链接)TCP
信道发送一个HTTP
请求HTTP
请求TCP
信道返回资源TCP
链接咱们每次发送一个HTTP
请求,会附带一个Proxy-connection: keep-alive
,这个参数就是声明一个持久链接,那么你会问,什么是持久链接?cookie
持久链接,本质上是客户端与服务器通讯的时候,创建一个持久化的TCP
链接,这个链接不会随着请求结束而关闭,一般会保持链接一段时间,至于保持多长时间,则根据你的服务器软件决定,例如nginx
配置文件中能够配置。
为何要持久链接?一般咱们请求一个HTML
文档,文档中不只仅只有一个请求,包括加载的图片,js,css,加起来的HTTP
请求可能会不少,若是每次请求都去创建一个TCP
链接,势必会形成浪费,若是并发足够,系统资源一定不够用,而持久化链接可让每一个用户尽可能少的去创建TCP
链接,从而减小服务器资源开销。
HTTP1.1容许在持久链接上可选的使用请求管道,这是相对于持久链接的又一性能优化。
假设请求服务器的一个HTML
资源,这个HTML
中包含不少JS
,CSS
文件,最开始的请求获取HTML
文件,而后等待服务器回传HTML
,客户端拿到了HTML
以后,开始解析,而后请求CSS
,而后是JS
,这个过程是线性的,也就是说客户端发送一个HTTP
请求之后,必需要等待服务器返回结果而且本身接收到完毕之后再发送第二个请求,这样的方式有一个严重的问题,当第一个请求阻塞之后,客户端始终拿不到响应报文,第二个请求也发不出去,致使严重的问题。
何为管道化链接,如图所示:
在响应到达以前,能够将多条请求放入请求对列。当第一条请求经过网络到达服务器的过程当中,第二条已经开始发送了,在高时延网络条件下,这样作能够下降网络的环回时间,提升性能。
何为无状态,《用TCP/IP进行网际互联:第三卷 客户端-服务器编程与应用》书中提到过,服务器所维护的与客户端交互活动的信息称为状态信息,不保存任何状态信息的为无状态服务器,不然就是有状态服务器,咱们知道HTTP
自己是不保存任何用户的状态信息的,因此HTTP
是无状态的协议
对于开发比较熟悉的朋友应该知道,HTTP维护一套cookie
和session
体系,即用户第一次访问服务器的时候,服务器响应报头一般会出现一个Set-Cookie
响应头,这里其实就是在本地设置一个Cookie
,当用户再次访问服务器的时候,HTTP
会附带这个Cookie
过去,其实就是一个身份证样的东西,证实我仍是刚刚那个小明,我第二次来了,这是个人身份证,服务器看到了你的身份证以后,想起来,你是小明啊,来,这是有关于你的东西,再传递回来。
这里咱们先看看一个响应报文