百摩网
当前位置: 首页 生活百科

熟悉http协议基本原理(网络协议HTTP详解)

时间:2023-06-20 作者: 小编 阅读量: 4 栏目名: 生活百科

HTTP是客户端到服务端请求与应答的标准,http协议规定了超文本传输所要遵守的规则。使用Cookie来管理Session,以弥补HTTP协议中不存在的状态管理功能。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。

一、http协议的定义

HTTP是超文本传输协议的缩写。是互联网上使用最为广泛的一种网络协议,适用于www服务器传输超文本到本地浏览器传输协议。它可以使浏览器的传输更加高效,使网络传输减少。他还能使计算机能快速准确的传输超文本文档。HTTP是客户端到服务端请求与应答的标准,http协议规定了超文本传输所要遵守的规则。客户端是终端用户(浏览器),服务端是网站,当服务端发起一个指定端口的HTTP请求。

二、http协议特性无状态:

1、HTTP协议自身不对请求和响应之间的通信状态进行保存。(即多个请求之间服务器并不知道是否是同一个客户端的请求。)

无状态存在的问题:

1、由于请求之间无状态保持,服务器就无法进行身份识别,比如大部分网站都要求登录后才能进行下一步操作,此时服务器就无法知道请求是哪一个客户端发起的。

解决无状态问题的方法:1、cookie技术

cookie一种用来管理HTTP协议请求状态技术。

Cookie 技术通过在请求和响应报文中写入相应的Cookie 信息来控制客户端的状态。

1、当客户端发起请求时,服务器端发送的响应报文内添加一个 Set-Cookie 的部字段信息, 通知客户端保存Cookie。

2、当下次客户端再次向服务器发送请求时, 客户端的浏览器会自动在请求报文中加入 Cookie字段和值后发送给服务器。

3、服务器端收到客户端发送过来的 Cookie 后, 会将cookie的值与之前保存的cookie进行对比, 通过对比就可以知道是否值之前已经请求过客户端, 也可以得到之前的状态信息了。

如下是第一个是登录请求

第二个是登录后发起请求:

2、session

session 是一种基于cookie技术的让服务器能识别某个用户的「机制」,然也可以1特指服务器存储的 session数据。

使用 Cookie 来 管理 Session,以弥补 HTTP 协议中不存在的状态管理功能。

可以这么认为session是对cookie的一种补充。

1.用户在浏览器输入用户名密码提交给服务端,服务端验证通过后会创建一个session对象用于记录用户的相关信息。

2.服务器创建session后,会生成的session信息 通过setCookie 字段添加到http响应头部中返回给客户端。

3、浏览器处理请求的响应信息发现响应头部有 set-cookie字段,就把这个cookie 保存浏览器指定域名下

4、当浏览器再次对服务器发起请求时,浏览器会自动发送含有session的cookie,服务端接到请求后会通过验证session是否已经存在,如果有,就证明这个用户是登录状态。

三、Http协议状态码

最常见的http状态码:

200 : 请求已经被成功处理

302:302表示重定向,服务返回302时,返回的头部信息中会包含一个 Location 字段,内容是重定向到的url地址,此时浏览器会自动访问该地址。

404:请求的资源不存在

500:服务器错误。无法响应

四、http报文的组成HTTP请求报文:

http请求报文分为三部分:请求行(开始行)、请求首部(首部行)、请求体(实体主体)

请求行(开始行):请求的第一行是“方法、URL、协议/版本”

请求头(请求首部):请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等

常见的请求头参数:

Content-Type

是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。Content-Type: [type]/[subtype]; parameter。例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。原则上浏览器会根据Content-Type来决定如何显示返回的消息体内容

Host

指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回

Accept

浏览器可接受的MIME类型

Accept-Charset

浏览器可接受的字符集

Accept-Encoding

浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间

Accept-Language

浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到

Authorization

授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中

Connection

表示是否需要持久连接。如果Servlet看到这里的值为“Keep- Alive”,或者看到请求使用的是HTTP1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小

Content-Length

表示请求消息正文的长度

Cookie

这是最重要的请求头信息之一

If-Modified-Since

只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答

Referer

包含一个URL,用户从该URL代表的页面出发访问当前请求的页面

User-Agent

浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用请求正文(请求体):

请求头和请求正文之间用空行分隔,表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:

例如:elephone=xxxxx&userType=1&

HPPT响应报文:

http请求报文也分为三部分:状态行(开始行)、响应首部(首部行)、响应体(实体主体)

状态行:由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。

响应头:响应头包含许多有关的服务端环境和服务端的信息

常见的响应头

Server:

Server响应报头域包含了服务器用来处理请求的软件信息。它和User-Agent请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户 端软件(浏览器)和操作系统的信息。下面是Server响应报头域的一个例子:Server: Apache-Coyote/1.1

WWW-Authenticate:

WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,这个报头域和前面讲到的Authorization请求报头域是 相关的,当客户端收到401响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了 Authorization报头域的请求,下面是WWW-Authenticate响应报头域的一个例子:WWW-Authenticate: Basic realm="Basic Auth Test!"

从这个响应报头域,可以知道服务器端对我们所请求的资源采用的是基本验证机制。

Content-Encoding:

Content-Encoding实体报头域被使用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容编码,因而要获得Content- Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding主要用语记录文档的压缩方法,下面是它的一个例子: Content-Encoding: gzip。如果一个实体正文采用了编码方式存储,在使用之前就必须进行解码。

Content-Language:

Content-Language实体报头域描述了资源所用的自然语言。Content-Language允许用户遵照自身的首选语言来识别和区分实体。 如果这个实体内容仅仅打算提供给丹麦的阅读者,那么可以按照如下的方式设置这个实体报头域:Content-Language: da。

如果没有指定Content-Language报头域,那么实体内容将提供给所以语言的阅读者。

Content-Length:

Content-Length实体报头域用于指明正文的长度,以字节方式存储的十进制数字来表示,也就是一个数字字符占一个字节,用其对应的ASCII码存储传输。

要注意的是:这个长度仅仅是表示实体正文的长度,没有包括实体报头的长度。

Content-Type :

Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。例如:

Content-Type: text/html;charset=ISO-8859-1

Content-Type: text/html;charset=GB2312

Last-Modified :

Last-Modified实体报头域用于指示资源最后的修改日期及时间。

五、http协议的请求方式
  • GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
  • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
  • PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
  • HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
  • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
  • OPTIONS:查询相应URI支持的HTTP方法。
最常用的get与post请求的区别:

1、get请求通常是向服务器获取资源、post请求通常是向服务器发送数据

2、get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,传输的数据也是有限的(1M),如http://127.0.0.1/ogin.do?name=admin&password=admin

3、get请求是将请求参数放在请求的url中,相对来说不安全

4、post是通过表单的方式传输数据的,传输数据没有限制、比get请求安全

六、HTTP与HTTPS

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

HTTP协议传输的数据都是明文的,使用HTTP协议传输隐私信息是不安全的,为了保证这些隐私数据能加密传输,于是设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请网站证书。

2、http是超文本传输协议,信息是明文传输,https则是采用ssl加密传输协议。

3、http和https采用不同的连接方式,用的端口也不一样,http的默认端口是80,https的默认端口是443

https建立通信过程如下:

(1)客户使用https的URL访问服务器,请求与服务器建立SSL连接。

(2)服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)返回给客户端。

(3)客户端的浏览器与服务器进行协商SSL连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

(5)服务器利用自己的私钥解密出会话密钥。

(6)服务器利用会话密钥加密与客户端之间的通信。

    推荐阅读
  • 霸气有个性的微信网名起名方法(霸气有个性的微信网名)

    以下内容大家不妨参考一二希望能帮到您!霸气有个性的微信网名起名方法金钱主宰人生。*淡蓝色的天空。太阳神、你的微笑。我是你的小星星。宁愿二,不愿装。少年痴货最帅比@。分开是最切肤的伤痛。如果_没有如果。你真让我很蛋疼。小闹心°奈何桥上唱征服。我是星星我会发光。假装过去不重要。忠於爱情忠於你。谁的青春无试探。但愿一切来得及。寂寞来了肿么办。

  • 南华大学是几本(你喜欢这所学校吗)

    南华大学属于一本大学,该校是国家工业和信息化部、国防科技工业局、中国核工业集团公司、中国核工业建设集团公司与湖南省人民政府共建的综合性大学,是国家中西部高校基础能力建设工程支持建设高校,我来为大家科普一下关于南华大学是几本?南华大学是国家工业和信息化部、国防科技工业局、中国核工业集团公司、中国核工业建设集团公司与湖南省人民政府共建的综合性大学。学校坐落在湖南省衡阳市,现有红湘和雨母两个校区。

  • 柿子苹果能一起吃(柿子苹果能不能一起吃)

    接下来我们就一起去研究一下吧!柿子苹果能一起吃柿子和苹果都是水果,互不影响可以一起吃。柿子吃的不宜过多,吃柿子期间不能饮酒,以免引起肠道的结石。怀孕以后需要多吃含有维c比较丰富的食物,服用硫酸亚铁,对铁剂的吸收没有一定的作用,促进铁的吸收,可以快速缓解贫血或者预防贫血。平时多吃蔬菜水果,营养丰富,有利于胎儿的正常发育,也可以预防病毒和细菌的感染。

  • 新鲜南瓜的保存方法(新鲜南瓜怎么保存)

    新鲜南瓜的保存方法地面堆码贮藏。地面垫5cm厚稻草或麦秸,将老熟、无损伤南瓜堆上。堆放时,保持南瓜挨着地面的方向向下,瓜蒂朝里瓜顶向外码成圆锥形。贮藏室内用竹木或角铁搭成分层贮藏架,每层高度比南瓜高8~10cm。南瓜摆放状态与堆藏相同,架式分层贮藏效果优于地面贮藏。窖内温度控制在10℃左右,相对湿度保持70%~80%。贮藏前要注意选好南瓜,适期采收,不能遭受霜打,瓜蒂处保留5cm长的瓜梗,防止机械损伤。

  • 18款索纳塔二手值不值得购买(太原索纳塔限时大促)

    汽车报价早知道:山西茂元现代4S店,索纳塔限时特惠大酬宾,即日起到08月31日第十代索纳塔现已炫耀上市,【现车优惠8000元】,分期可享3年0息;【5年10次基础保养(首任车主,含首保)】;置换补贴高达8000元;店内提供试乘试驾服务,欢迎莅临赏车订购:有购车意向的朋友不妨亲自去试驾一下,店铺地址:太榆路39号(火车南站北500米)促销时间2022年08月28日至2022年08月31日索纳塔最新报

  • 怀旧服联盟哪个职业操作简单(赚钱最快的职业)

    怀旧服联盟哪个职业操作简单怀旧服联盟最简单的职业当属恶魔猎手,不需要任何触发监控,一顿1234就可以打出不俗的DPS,堪比万年TBC中的惩戒骑,而在魔兽世界60年代有个职业在团本输出中比DH还要简单的多。在60年代最老实稳妥的办法非搬砖莫属,而搬砖最效率的当然是单刷各种副本精英了。法师满级后,学好剥皮,然后去祖格刷鳄鱼应该是最能赚金的办法了。依靠冰环暴风雪和冰锥术,法师能拥有得天独厚的单刷能力!

  • 猫瘟建议治疗吗(猫瘟必须要治疗7天吗)

    猫瘟治疗7天,并不是那么绝对和必须的。并且当猫瘟爆发后,猫猫免疫系统受到猫瘟病毒的刺激,会产生抗体抵御病毒的入侵,产生抗体的时间一般需要7天左右。所以一般认为,猫瘟的发病病程为7天。图来源网络,侵删猫瘟病毒具有高度传染性和致死率,并且猫瘟的症状表现程度,往往取决于猫猫自身的免疫力、年龄以及是否存在并发症。

  • 你知不知道自己是什么血型(你知道自己的血型吗)

    你知不知道自己是什么血型从20世纪初,人类ABO血型被发现以来,已经检出人红细胞血型500余种。目前已确认了200余种,并将其分为血型系统、血型集合和血型系列。最为常见的就是ABO血型系统。ABO血型有三个遗传基因即A、B、O基因,四种表现型即A型、B型、AB型、O型。A和B基因为共显性,而O为隐性基因或无效基因,因此A型个体基因型可能有AA和AO两种。

  • 乘风破浪的姐姐们现在还有谁(乘风破浪的姐姐介绍)

    乘风破浪的姐姐们现在还有谁还有宁静、伊能静、金晨、蓝盈莹、万茜、吴昕、郁可唯、黄龄、王霏霏、张雨绮、黄圣依、张含韵、白冰、李斯丹妮。该节目召集了30位1990年之前出生的女艺人,通过训练和考核,最终选出5位成员组成女团。该节目于2020年6月12日起在芒果TV播出。

  • 如何批量调整excel列宽(应需而变Excel列宽快速调整)

    在Excel中输入数据时,因为数据内容的长度与列宽不相匹配,就会造成显示上的麻烦,下面根据不同的情况,通过一些小技巧快速解决。要想让列宽和输入内容大小保持一致,只需要将光标移到该列右侧的边线上,当光标变成十字状时,双击即可自动调整该列列宽。这时也有一个小技巧,同样的选中所有列,然后将光标移到最右侧列的边线上,当光标变成十字状时,此时不要双击,而是按下鼠标左键不放并拖动,即可让所有列宽相等啦。