首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HTTP协议

HTTP协议

HTTP:Hyper Text Transfer Protocol,即超文本传输协议

一、请求与响应

我们手动提交一个请求时,浏览器可能提交多个请求,因为我们直提交一个访问html页面的请求,而浏览器还需要访问html中引用的js、css等,所以需要提交多个请求。

图中用到的工具是HttpWatch,可以帮助我们解析请求与响应。

二、HTTP版本

客户端向服务端发出请求时,必须首先在它们之间建立一个TCP(Transfer Control Protocal,传输控制协议)连接。当客户端与服务端的通讯结束后,TCP连接将被关闭,而这个连接就是基于HTTP的。

TCP连接的建立需要经过“三次握手”,TCP连接的关闭需要经过“四次通信”。

在通讯中真正使用的HTTP协议,共有两种:HTTP1.0和HTTP1.1,这两个版本目前都在使用中。浏览器默认使用的版本是1.1,而1.0在一些特殊的地方使用。

HTTP1.0版本

HTTP1.1版本

两个版本对比

他们的共同点是:请求与响应是成对出现的,客户端的一次请求一定会对应服务端的一次响应。

他们的区别如下:

HTTP1.0

HTTP1.0协议中的连接属于非持久连接,一次TCP连接只能进行一次请求与响应

一次请求与相应对应一个TCP连接

客户端只有在接收到服务端对上一次的响应后,客户端才可发出第二次请求

HTTP1.0不支持对虚拟主机的访问。因为没有HOST请求头属性,会将用户所发出的域名直接通过DNS转换为IP后,发送到服务端。也就是说,服务端而非域名接收到的直接就是个IP而非域名。这样HTTP1.0的请求就不支持对虚拟主机的访问了。

HTTP1.0协议中在客户端收到服务端的响应后,马上发送关闭TCP连接的请求,服务端关闭连接。

HTTP1.1

HTTP1.1支持持久连接,在一个TCP连接上可以传送多个请求和响应

一般情况下,一个页面中的请求和响应对应一个TCP连接

HTTP1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求

HTTP1.1支持对虚拟主机的访问。其在请求头属性中增加了HOST属性,用于记录所要访问的虚拟域名。当然,请求中所携带的域名,肯定会通过DNS将其转换为IP,然后查找到相应的主机。但由于请求中还携带有HOST属性,即要访问的域名仍然在请求中,这样的话,服务器就可以从请求中解析出请求要访问的虚拟主机名。

HTTP1.1协议中在客户端接收到对最后一次请求的响应后,马上发送关闭TCP连接请求,服务端关闭连接。

三、HTTP协议组成

请求协议:请求行、请求头、空白行、请求正文

相应协议:响应行、响应头、空白行、响应正文

URL:统一资源定位符,http://localhost:8080/myweb/hello.html

URI:统一资源标识符,myweb/hello.html

四、状态码

常用的状态码以2、4、5开头,分别表示的意义为:

2xx:表示对请求计算与响应成功,如200

4xx:表示请求错误,如404,表示资源找不到,一般都是请求路径书写有问题

5xx:表示服务端错误,如500,表示服务器内部错误,一般是服务器端的java代码错误

当发生404或500这样的错误时,我们可以指定错误的页面,使界面看起来更友好,做法是在eclipse中的WEB-INF里的web.xml中添加几句代码:

当然了,errors.html什么的需要自己编写。

五、GET与POST请求方式GET请求

GET请求会将请求所携带的参数作为URL中的一部分出现,所以请求参数会显示在地址栏,而这就导致了GET提交方式的三点不足:

参数值只能是字符串,而不能是其它类型

可以携带的数据量小

数据安全性低

但GET请求有一个很重要的特征,客户端一旦收到“服务器向GET发送的响应”后,浏览器会自动缓存响应。当客户再次提交相同请求时,将直接读取本地浏览器缓存中的数据,而不再向服务端真正发送数据,让用户感觉服务端的响应很快,提升用户体验,减轻了服务器压力。

POST请求

POST请求会将请求所携带的数据以请求正文的形式出现,所以与GET方式相比,就显示出了三点长处:

数据类型可以是任意类型,还可以是声音、视频、图片等文件

请求可以携带的数据量大

数据安全性高

但发出POST请求的客户端浏览器不会对接收到的“服务器向POST发送的响应”进行缓存。当用户再次进行相同请求时,仍是真正向服务器发送出请求,从服务器读取数据。

GET请求的响应结果会被浏览器缓存,而PSOT请求的响应结果不会被缓存,主要有两点原因:

1.以不同的方式提交请求目的也是不同的:

GET的目的一般是客户端要从服务端下载资源,而POST的目的一般是客户端向服务端上传资源,这就导致了一个需要浏览器缓存而另一个不需要;

2.比较是否是相同的请求难易程度不同:

GET方式只包含请求行、请求头与空行三个部分,请求体为空,所以很好比较两次请求是否相同。而POST的数据量比较大,请求正文可以是文件,这就很不好比较了。

请求提交方式的选择

具有一下情况之一的,选择POST提交方式,其它均采用GET提交方式:

提交时所携带的数据类型不是字符串

提交时所携带的数据量比较大

提交时所携带的数据具有敏感性,安全性比较高

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128G0L75X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券