HTTP协议简介

一、基本概念

HTTP(Hyper Text Transfer Protocol 超文本传输协议)是应用层协议,支持客户端/服务器模式,基于TCP连接。是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口

协议特点

  1. 无连接:限制每次连接只处理一个请求,请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。
  2. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

二、抓包分析

HTTP是基于TCP的连接,因此,建立HTTP连接必须经过TCP连接(3次握手),HTTP报文只有两种,请求和应答报文,完成HTTP过程以后,断开TCP连接(四次挥手)

  1. HTTP请求报文的格式

请求消息包括以下格式:状态行(request line)、请求头部(header)、请求正文组成,下图给出了请求报文的一般格式。
在这里插入图片描述
在这里插入图片描述

(1)状态行:包括请求方式Method、资源路径URL、协议版本Version;
(2)请求头:包括host(要访问的域名),connection(连接类型),user-Agent(浏览器名称),accept(传输文件类型)
(3)请求正文:就是HTTP请求的数据
(4)User-agent的作用:
提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计。

  1. HTTP响应报文的格式
    在这里插入图片描述

(1)状态行:包括协议版本Version、状态码Status Code、回应短语;
(2)响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;
(3)响应正文:就是响应的具体数据。
在这里插入图片描述

三、HTTP 状态码

1xx 表示HTTP请求已经接受,继续处理请求
2xx 表示HTTP请求已经处理完成
3xx 表示把请求访问的URL重定向到其他目录
4xx 表示客户端出现错误
5xx 表示服务端出现错误

常见状态码的含义
200—OK/请求已经正常处理完毕
301—/请求永久重定向
302—/请求临时重定向
304—/请求被重定向到客户端本地缓存

400—/客户端请求存在语法错误
401—/客户端请求没有经过授权
403—/客户端的请求被服务器拒绝,一般为客户端没有访问权限
404—/客户端请求的URL在服务端不存在
405----/客户端的请求方式不对

500—/服务端永久错误
503—/服务端发生临时错误

四、HTTP报文的类型

根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
在这里插入图片描述

五、HTTP 302请求临时重定向 报文抓包

抓包步骤

清空浏览器缓存,访问http://www.taobao.com
选中302这条报文,右键—http流追踪,请求的网址被服务器要求重定向到https://www.taobao.com

服务器无法处理浏览器发送过来的请求(request),服务器告诉浏览器跳转到可以处理请求的url上
在这里插入图片描述
在这里插入图片描述

六、HTTP长连接

长连接的定义

HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的

HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。
也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。
HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议

1,什么是长连接和短连接?

1)在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话

2)而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。

Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

七、POST和Get的区别

HTTP RFC中get和post的定义

1,GET

The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI.

Get方法根据请求的资源来检索信息。

If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the entity in the response and not the source text of the process, unless that text happens to be the output of the process.

如果请求的资源是一个数据产生过程,返回报文的包体中应该存放的是产生完数据的结果,而不是数据产生过程的源代码。

2,HEAD

The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response.

HEAD方法和get方法基本上是等同的,除了head的返回报文中没有body

Head方法经常被用于检查http连接的有效性,可达性和检查网页是否被修改。

3,POST

The POST method is used to request that the origin server accept the entity enclosed(附上的) in the request as a new subordinate(下级) of the resource identified by the Request-URI in the Request-Line.

POST方法用来向服务器发送请求,请求的数据要附在包体里面

POST is designed to allow a uniform method to cover the following functions:
- Annotation of existing resources;
- Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
- Providing a block of data, such as the result of submitting a form, to a data-handling process;
- Extending a database through an append operation.

POST方法用来实现以下功能:
对现有的资源进行注释
在公告栏,新闻组,邮件列表或者相似的文章组里面发布消息
提供数据块,例如像一个数据处理程序提供表单
通过追加操作扩展数据库

在这里插入图片描述

八、http 1.0 1.1 2.0的区别

1,HTTP 1.0 和1.1主要区别
长连接

HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接

节约带宽

TTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401

客户端如果接收到100,才开始把请求body发送到服务器。这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

HOST域
web server上的多个虚拟站点可以共享同一个ip和端口,只能通过host域来区分站点

2,HTTP1.1与HTTP 2.0的主要区别
多路复用

HTTP2.0使用了多路复用的技术,做到同一个TCP连接并发处理多个请求

首部压缩

HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快

HTTP2.0的服务器推送

HTTP 2.0 新增的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。换句话说,除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值