专栏首页一个爱吃西瓜的程序员Web前端基础【4】--HTTP标准

Web前端基础【4】--HTTP标准

HTTP协议(超文本传输协议),是用于从www服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,减少网络传输。

一:HTTP请求过程 HTTP协议采取的是请求响应模型:即客户端发起请求,服务器端回送。HTTP协议是一个无状态的协议,同一个客户端的这次请求与上次请求没有对应关系。

一次HTTP操作称为一个事务,其执行过程可分为四步,如下图:

1:首先客户端与服务器端需要建立连接,例如单击某个超链接。

2:建立连接后,客户端发送一个请求给服务器,请求方式的格式:统一资源标识符(url)、协议版本号、后边是MIME信息,包括请求修饰符、客户机信息和可能的内容。

3:服务器接到请求后,给予相应的响应信息,其格式为一个状态码,包括信息的协议版本号。一个成功或者错误的代码,后边是MIME信息。

4:客户端接到服务器所返回的信息,通过浏览器将信息显示到用户的显示屏上,然后客户端与服务器端断开连接。

二:HTTP状态码含义: HTTP状态码主要是为了标志此次HTTP请求的运行状态。下面是常见的HTTP状态吗: 1:200———请求成功。 2:301———资源(网页等)被永久转移到其他URL。 3:404———请求的资源(网页)不存在。 4:500———内部服务器错误。

HTTP状态码由三个十进制数组成,第一个十进制数定义了状态码的类型。HTTP状态码共分为五种类型,如下图:

三: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.1 200 OK
Bdpagetype:1
Bdqid:HTTP0xd831b4de00001d40
Bduserid:0
Cache-Control:private
Connection:Keep-Alive
Content-Encoding:gzip
Content-Type: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请求则常用在登录框、提交框的位置。

每天学习一点点,每天进步一点点。

本文分享自微信公众号 - 小白客(youcoding)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 1个知乎相当于20个简书

    最开始接触简书便被它的小而美所吸引,一个很简单很纯粹的写作阅读平台。写者在用心的写,读者在认真的读。后来简书逐渐变得大而全,各种标题党满天飞,五花八门的新闻资讯...

    爱吃西瓜的番茄酱
  • 利用requests和正则表达式抓取猫眼电影top100

    刚学了正则表达式,赶紧用它来练练手,以防搞忘了。这次练习的目标比较简单,就是爬取猫眼电影top100,具体包括电影排名,片名,主演,上映时间,评分等信息。最后存...

    爱吃西瓜的番茄酱
  • 每天学习一点儿算法--递归

    递归是很多算法都使用的一种编程方法。听说递归是一种十分优雅的问题解决办法,可是对于初涉递归的我,还没有形成这种独特的体会。 学习使用递归的关键在于:如何将问题分...

    爱吃西瓜的番茄酱
  • 网络编程之浅谈http无连接、无状态

    一、http协议 HTTP(超文本传输协议)是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬...

    lyb-geek
  • 新梦想干货分享——传说中的HTTP协议(二)

    各位亲,好久不见,长肉肉了没有,学习了没有,说好的新梦想干货分享今天终于弄出来了!!!

    新梦想IT职业教育
  • linux、mysql、nginx、tomcat 环境下压力测试的主要调试参数

    一、linux 系统内核参数 /etc/sysctl.conf文件常用参数 net.core.netdev_max_backlog = 32768 #允许送到队...

    小小科
  • 从RSA 2020大会的十大网络安全热门话题看行业未来发展

    目前在网络安全行业有哪些热门话题?即将在旧金山举行的2020年RSA大会将为此提交一份出色的答卷。

    FB客服
  • EMQ百万级MQTT消息服务(优化和压测)

    如果使用EMQ来承载百万级别的用户连接可以吗?官方的回复是8核心32G的配置能够承载160W台设备的链接,那就究竟性能如何呢?只有你自己试了才知道,本节就带着大...

    喵了个咪233
  • Linux下Sublime Text 2的安装

    安装方法1: 通过apt-get install来安装,可以如下来做: sudo add-apt-repository ppa:webupd8team/subl...

    joshua317
  • Android权限HaloPermission详细使用

    如果你想向用户解释请求权限的原因,你可以使用setRationaleRender方法

    砸漏

扫码关注云+社区

领取腾讯云代金券