HTTP协议(超文本传输协议),是用于从www服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,减少网络传输。
一:HTTP请求过程
HTTP协议采取的是请求响应模型:即客户端发起请求,服务器端回送。HTTP协议是一个无状态的协议,同一个客户端的这次请求与上次请求没有对应关系。
一次HTTP操作称为一个事务,其执行过程可分为四步,如下图:
image1:首先客户端与服务器端需要建立连接,例如单击某个超链接。
2:建立连接后,客户端发送一个请求给服务器,请求方式的格式:统一资源标识符(url)、协议版本号、后边是MIME信息,包括请求修饰符、客户机信息和可能的内容。
3:服务器接到请求后,给予相应的响应信息,其格式为一个状态码,包括信息的协议版本号。一个成功或者错误的代码,后边是MIME信息。
4:客户端接到服务器所返回的信息,通过浏览器将信息显示到用户的显示屏上,然后客户端与服务器端断开连接。
二:HTTP状态码含义:
HTTP状态码主要是为了标志此次HTTP请求的运行状态。下面是常见的HTTP状态吗:
1:200———请求成功。
2:301———资源(网页等)被永久转移到其他URL。
3:404———请求的资源(网页)不存在。
4:500———内部服务器错误。
HTTP状态码由三个十进制数组成,第一个十进制数定义了状态码的类型。HTTP状态码共分为五种类型,如下图:
image三:HTTP头部信息:
HTTP头部信息由众多的头域组成,每个头域由一个域名、冒号(:)、和域值三部分组成。
通过浏览器访问百度首页时,右键检查,在里面查看整个HTTP访问的过程,首先是浏览器发出请求,请求头的数据如下:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:en,zh-CN;q=0.8,zh;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Cookie:BAIDUID=5B0DE8754CD9C7FD0B4606751125D30A:FG=1; BIDUPSID=5B0DE8754CD9C7FD0B4606751125D30A; PSTM=1497970650; __cfduid=df9fa56b6193a39ac162e322f7aa7a0021508679057;pgv_pvi=150157120;BDRCVFR[ird_eQEYn]=mk3SLVN4HKm;pgv_si=s9886431232;BDRCVFR[ISR1xZMpC9b]=mk3SLVN4HKm; BD_HOME=0; BD_UPN=12314553; H_PS_645EC=b833N3G6NF8lbH9RZXAkMCCKgHYIsKg3GGzIzAnQQh4vXLe1OO9RS00JdtU; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BD_CK_SAM=1; PSINO=1; BDSVRTM=154; H_PS_PSSID=1463_24565_21111_24879
Host:www.baidu.com
Referer:https://www.baidu.com/
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36
在请求头中包含以下内容:
1:Accept请求报头域
,用于指定客户端接受哪些类型的信息,例如:text/html表明客户端希望接受文本信息或者HTML网页信息。
2:Accept-Encoding:
用于指定可接受的内容编码。
3:Accept-Language:
用于指定一种自然语言。
4:Cache-Control:
用于指定缓存指令,缓存指令是单向的,且是独立的。
5:Connection:
指定连接的选项,例如:keep-alive表示连接的状态是连续的
6:Cookie:
将状态保存在客户端。
7:Host:
用于指定请求资源的intenet主机和端口号。
8:Referer:
告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。
9:Upgrade-Insecure-Requests:
为1,则是告诉服务器,浏览器可以处理https协议。
10:User-Agent:
包含发出请求的用户信息,其中有使用的浏览器型号、版本和操作系统的信息。
请求发送成功后,服务器进行响应,接下来看一下响应头的信息:
HTTP/1.1200OKB
dpagetype:1
Bdqid:HTTP0xd831b4de00001d40
Bduserid:0
Cache-Control:private
Connection:Keep-Alive
Content-Encoding:gzip
ContentType:text/html;charset=utf-8
Cxy_all:baidu+87abafa180337e66f63a0cfac6a710b6
Date:Wed, 08 Nov 2017 11:35:39 GMT
Expires:Wed, 08 Nov 2017 11:35:22 GMT
Server:BWS/1.1
Set-Cookie:BDSVRTM=0; path=/
Set-Cookie:BD_HOME=0; path=/
Set-Cookie:H_PS_PSSID=1463_24565_21111_24879; path=/; domain=.baidu.com
Strict-Transport-Security:max-age=172800
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-By:HPHP
X-Ua-Compatible:IE=Edge,chrome=1
响应头中包含以下内容:
1:HTTP/1.1
表示使用HTTP1.1协议标准,200表示请求成功。
2:Bdpagetype
: 我暂时这个不知道什么意思。
3:Bdqid:
暂时不知道什么意思。
4:Bduserid:
暂时不知道什么意思。
5:Cache-Control:
用于指定缓存指令,缓存指令是单向的,且是独立的。
6:Connection:
指定连接的选项,例如:keep-alive表示连接的状态是连续的
7:Content-Encoding:
被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码。
8:Content-Type:
用于指明发送给接收者的实体正文的媒体类型。
9:Cxy_all:
暂时不知。
10:Date:
表示消息产生的日期和时间。
11 :Expires:
给出响应过期的日期和时间。
12:Server:
包含了服务器用来处理请求的软件信息。
13:Set-Cookie:
setcookie() 函数向客户端发送一个 HTTP cookie。cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。
14:Strict-Transport-Security:
它的作用是,对某些站点,当用户在浏览器输入不带协议的网址的时候,自动识别协议为https,而不是http。例如用户输入paypal.com,浏览器会自动访问https://paypal.com,而不:http://paypal.com。
15:Transfer-Encoding:
chunked表示输出的内容长度不确定。
16:Vary:
Accept-Encoding 响应头,明确告知缓存服务器按照 Accept-Encoding 字段的内容,分别缓存不同的版本。
17:X-Powered-By:
这个值的意义用于告知网站是用何种语言或框架编写的。
18:X-Ua-Compatible:
X-UA-Compatible是自从IE8新加的一个设置,对于IE8以下的浏览器是不识别的。通过设置X-UA-Compatible的值,可以指定网页的兼容性模式设置。在网页中指定的模式优先权高于服务器中(通过HTTP Header)所指定的模式。IE=edge告诉IE使用最新的引擎渲染网页,chrome=1则可以激活ChromeFrame。
四:Cookie状态管理:
cookie和session都用作来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题所作的努力。其中,cookie将状态保存在客户端,session将状态保存在服务器端。
Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie实际上是一小段的文本信息。
客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Session是另一种记录客户状态的机制
不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
五:HTTP请求方式:
如下图:
| 1 | :GET : 请求指定的页面信息,并返回实体主体。
| 2 | :HEAD :类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
| 3 | :POST :向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
| 4 | :PUT :从客户端向服务器传送的数据取代指定的文档的内容。
| 5 | :DELETE :请求服务器删除指定的页面。
| 6 | :CONNECT : HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
| 7 | :OPTIONS :允许客户端查看服务器的性能。
| 8 | :TRACE : 回显服务器收到的请求,主要用于测试或诊断。
其中常用的请求方式是GET和POST:
1:GET方式:
向特定的资源发出请求。
2:POST 方式:
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
GET和POST的区别:
1:在客户端,get方式通过url提交数据,数据在url中可以看见;post方式,数据放置在实体区提交。
2:get方式提交的数据最多只能有1024字节,而post则没有限制。
3:安全性问题,使用get的时候,参数会显示在地址栏中,而post不会。
4:get请求在访问网页是很常见,post请求则常用在登录框、提交框的位置。
网友评论