http 协议介绍-初识-长短连接-请求报文-请求方式-Web 缓存

http协议

1.HTTP协议介绍

1.HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准

2.HTTP是基于TCP/IP通信协议来传递数据(HTML文件响应头,图片文件,查询结果等)

3.HTTP协议通常承载再TCP协议之上,有时也是HTTPS承载于TLS或者SSL协议层之上

4.HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型

5.HTTP默认的端口号为80,HTTPS的端口号为443

1.1什么是www?

WWW是环球信息网的缩写,(亦作“Web”、“WWW”、“’W3’”,英文全称为“World Wide Web”),中文名字为“万维网”,”环球网”等,常简称为Web。 分为Web客户端和Web服务器程序。 WWW可以让Web客户端(常用浏览器)访问浏览Web服务器上的页面。 是一个由许多互相链接的超文本组成的系统,通过互联网访问。在这个系统中,每个有用的事物,称为一样“资源”;并且由一个全局“统一资源标识符”(URI)标识;这些资源通过超文本传输协议(Hypertext Transfer Protocol)传送给用户,而后者通过点击链接来获得资源。

1.2什么是.com

为了区分不同网站主体,当时规定:所有“工商企业”网址后缀取用英文commercial 的前3个字母,即为.com

“网络提供商”网址,取用network前3个字母,就是.net

“组织团体”以 英文organization 的前3个字母结尾,就是大家现在常看到的 .org

1.3什么是URL

rl是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

[1]

url 是网民们在 Internet 知识海洋中寻找资源、获取信息、用 E- mail 通讯、网上交流等所必不可少的。它最初是由蒂姆·伯纳斯·李发明用来作为万维网的地址。现在它已经被万维网联盟编制为互联网标准RFC1738了。

常用的URL格式如下:

  协议类型://服务器地址[:端口号]/路径/文件名[参数=值]

URL详解

URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下

schema://host[:port#]/path/…/[;url-params][?query-string][#anchor]

scheme 指定低层使用的协议(例如:http, https, ftp)

host HTTP服务器的IP地址或者域名

port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 www.cnblogs.com:8080/

path 访问资源的路径

url-params axios的请求数据格式

query-string 发送给http服务器的数据

anchor- 锚

URL 的一个例子:

http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff

Schema: http

host: www.mywebsite.com

path: /sj/test

URL params: id=8079(获取方式 ctx.Param(“id”))

Query String: name=sviergn&x=true

Anchor: stuff

1.3.1 URL的类型及特点

特点

常见的url表现形式有静态、动态、伪静态三种。

静态页面

优点:相比其他两种页面,速度最快。不仅加载速度最快,而且不需要从数据库里面提取数据,速度快的同时,也不会对服务器产生压力。

缺点:由于数据都是储存在HTML里面,所以导致文件非常大。并且最严重的问题是,更改源代码必须全部更改,而就算只改一个地方,全站静态页面就自动更改了。如果是大型网站有比较多的数据,那会占用大量的服务器空间,每次添加内容都会产生新的页面。

动态页面

优点:空间使用量非常小,一般几万条数据的网站,使用动态页面,可能只有几兆的文件大小,而使用静态页面少则十几兆,多则几十兆。因为数据是从数据库里面调用而来,如果要更改某些数值,直接更改数据库,那么所有的动态页面,就会自动更新了。这一点相比静态页面好处就大很多了

缺点:用户访问速度较慢,为什么会访问动态页面较慢呢。这个问题我们就必须从动态页面的访问机制说起了,其实我们的服务器上面有一个解释引擎,当用户访问的时候,这个解释引擎就会把动态页面翻译为静态页面,这样大家就能够在浏览器里面查看源码了。而这个源码就是解释引擎翻译以后的源码。除访问速度较慢以外,动态页面的数据是从数据库里面调用过来的,如果访问人数非常多,数据库的压力就会非常大的,不过现在动态程序都是使用了缓存技术。但是总体来讲,动态页面对于服务器的压力比较大一点。同时动态页面的网站一般对服务器高求要比较高一些,同时访问的人越多对服务器造成的压力越大。 [3]

伪静态

优点:大家都知道静态页面对seo(seo是什么见下文)有很大益处,而且对服务器的负载很小,但静态页面的缺点是不能随时更新。对于伪静态的优点,这个并不好讲,伪静态网页相比动态网页而言,并没有速度上面的提升,相比较而言,因为是“假”静态页面,其实还是一个动态页面,也是同样需要翻译为静态页面的。最大的好处就是让搜索引擎把自己的网页当做静态页面来处理。

缺点:从名称上面就能够看出来缺点,“伪静态”其实就是“假静态”,搜索引擎会不会把他当做是静态页面来处理,这只是我们靠经验靠逻辑去分析的,并不一定准确。或许搜索引擎直接把他认为是动态页面,我们做那么多努力,其实什么也没有换来。

1.3.1.1

SEO(Search Engine Optimization):汉译为搜索引擎优化。是一种方式:利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。目的是让其在行业内占据领先地位,获得品牌收益。很大程度上是网站经营者的一种商业行为,将自己或自己公司的排名前移

2.HTTP协议工作流程

一次HTTP操作称为一个事务,其工作过程大概如下:

  1. 用户在浏览器中键入需要访问网页的URL或者点击某个网页中链接;

url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
  1. 浏览器根据URL中的域名,通过DNS解析出目标网页的IP地址;

浏览器请求这个页面:http://hackr.ip/index.html

1.在这一步,需要域名系统DNS解析域名hackr.ip,得主机的IP地址 20X.189.105.112。

html是请求的静态页面

2.然后将上面结合本机自己的信息,封装成一个http请求数据包

3.代码体

​ 3.在HTTP开始工作前,客户端首先会通过TCP/IP协议来和服务端建立链接(TCP三次握手)

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

http协议介绍-初识-长短连接-请求报文-请求方式-web缓存

​ 5.服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

​ 6.一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码: Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽

2.1短链接

短连接的操作步骤是: 建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接

一次一链接

如果客户请求频繁,将在TCP的建立和关闭操作上浪费较多时间和带宽。

2.2长连接

长连接是指在一个链接上可以连续发送多个数据包,在连接期间,如果没有数据包发送,需要双方发链路检测包

长链接操作步骤: 建立连接——数据传输…(保持连接)…数据传输——关闭连接

长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间

长链接分为 without pipelining 和 with pipelining,下图中是without pipelining,客户端只在收到前一个请求的响应后,才发出新的请求。

2.3管线化

每次建立连接后,无需等待请求回来就可以发送下一个请求

3.HTTP请求报文

请求行(request line)、请求头部(header)、请求体组成,下图给出了请求报文的一般格式


请求行:

方法:

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:

OPTIONS- 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。

HEAD- 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。

GET- 向特定的资源发出请求。

POST- 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

PUT- 向指定资源位置上传其最新内容。

DELETE- 请求服务器删除Request-URI所标识的资源。

TRACE- 回显服务器收到的请求,主要用于测试或诊断。

CONNECT- HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

PATCH- 用来将局部修改应用于某一资源,添加于规范RFC5789。

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

协议/版本号

URL

请求头:

通用首部(General Header)

请求首部(Request Header)

响应首部(Response Header)

实体首部(Entity Header Fields)

请求体

{"class":"test"}

4.HTTP响应报文

HTTP响应组成:响应行,响应头,响应体


响应行

(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

响应头

Date:生成响应的日期和时间;

Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1

响应体

{"class":"test"}

http协议介绍-初识-长短连接-请求报文-请求方式-web缓存

4.1.1请求报文

###

①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。

②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL

③是协议名称及版本号。

④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。key:value形式

⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

4.1.2响应报文

http协议介绍-初识-长短连接-请求报文-请求方式-web缓存

①报文协议及版本;

②状态码及状态描述;

③响应报文头,也是由多个属性组成;

④响应报文体,即我们真正要的“干货”。

5.GET和POST的区别

1、GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。

2、GET提交的数据大小有限制,最多只能有1024字节(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。

3、GET方式需要使用 ctx.Query()来取得变量的值,而POST方式:ctx.PostForm() json数据:ctx.Bind()来获取变量的值。

4、GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码

**6.通过Session保存状态信息*

Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识

- 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session

id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session

id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session

id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

Session的实现方式:

1、使用Cookie来实现

服务器给每个Session分配一个唯一的sessionID,并通过Cookie发送给客户端。

当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。

2、使用URL回写来实现

URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带会服务器。如果直接在浏览器输入服务端资源的url来请求该资源,那么Session是匹配不到的。

Tomcat对Session的实现,是一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回写。如果发现Cookie被禁用,就一直使用URL回写。jsp开发处理到Session的时候,对页面中的链接记得使用response.encodeURL()

Cookie和Session有以下明显的不同点:

1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。Cookie最早在RFC2109中实现,后续RFC2965做了增强。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并没有在HTTP的协议中定义;

3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

4)就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些。因为它不会任意读取客户存储的信息。

7.缓存的实现原理

WEB缓存(cache)位于Web服务器和客户端之间。

缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。

HTTP协议定义了相关的消息头来使WEB缓存尽可能好的工作。

http状态码对照表: tools.jb51.net/table/http_request_m...

http请求头大全:tools.jb51.net/table/http_header

原文地址

本文来自互联网知识整合,以及书籍。

防爬虫说明

禁止 学习某地爬虫,知乎爬虫,CSDN 爬虫。

本文,首发在 learnku 社区。

@author
汪春波(www.shxdledu.cn)

本作品采用《CC 协议》,转载必须注明作者和本文链接
嗨,我是波波。曾经创业,有收获也有损失。我积累了丰富教学与编程经验,期待和你互动和进步! 公众号:上海PHP自学中心 付费知识星球:破解面试:程序员的求职导师
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
司机 @ 欣昊玉
文章
273
粉丝
339
喜欢
557
收藏
1103
排名:64
访问:12.1 万
私信
所有博文
社区赞助商