vlambda博客
学习文章列表

是时候该了解一下啦:什么是HTTP协议呢

是时候该了解一下啦:什么是HTTP协议呢
是时候该了解一下啦:什么是HTTP协议呢
关注我,让我成为你的专属小太阳吧


1
简介


  • http协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。


  • http是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。


  • http是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。


  • http协议工作于客户端-服务端架构为上。浏览器作为http客户端通过URL向http服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。


是时候该了解一下啦:什么是HTTP协议呢

讲到http协议,我们首先简单了解什么是url?


在浏览器输入URL,会经历以下过程:


浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器。

服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器。
⑤ 释放 TCP连接。

浏览器将该 html 文本并显示内容


2
http协议特点


HTTP 协议一共有五大特点:

  • 支持客户/服务器模式

  • 简单快速

  • 灵活

  • 无连接

  • 无状态(重点介绍无连接和无状态)


无连接


  • 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。


  • 早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,大部分通道实际上会很空闲、无端占用资源。因此 HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。

    是时候该了解一下啦:什么是HTTP协议呢

  • 随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来,Keep-Alive 被提出用来解决这效率低的问题。


  • Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接。市场上的大部分 Web 服务器,包括 iPlanet、IIS 和 Apache,都支持 HTTP Keep-Alive。对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive 功能对资源利用的影响尤其突出。


  • 协议规定HTTP/1.0如果想要保持长连接,需要在请求头中加上Connection: keep-alive,而HTTP/1.1默认是支持长连接的,有没有这个请求头都行。


无状态


  • 无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。

    是时候该了解一下啦:什么是HTTP协议呢

  • 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息


  • 客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。


  • Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私


  • Cookies 最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是 Cookies 的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入 Cookies,以便在最后付款时提取信息。

                    是时候该了解一下啦:什么是HTTP协议呢

  • 与 Cookie 相对的一个解决方案是 Session,它是通过服务器来保持状态的。


  • 当客户端访问服务器时,服务器根据需求设置 Session,将会话信息保存在服务器上,同时将标示 Session 的 SessionId 传递给客户端浏览器,浏览器将这个 SessionId 保存在内存中,我们称之为无过期时间的 Cookie。浏览器关闭后,这个 Cookie 就会被清掉,它不会存在于用户的 Cookie 临时文件。


  • 以后浏览器每次请求都会额外加上这个参数值,服务器会根据这个 SessionId,就能取得客户端的数据信息。


  • 如果客户端浏览器意外关闭,服务器保存的 Session 数据不是立即释放,此时数据还会存在,只要我们知道那个 SessionId,就可以继续通过请求获得此 Session 的信息,因为此时后台的 Session 还存在,当然我们可以设置一个 Session 超时时间,一旦超过规定时间没有客户端请求时,服务器就会清除对应 SessionId 的 Session 信息。


3
http协议格式


1、Http请求消息结构:
抓包的request结构如下:


是时候该了解一下啦:什么是HTTP协议呢


注:每行数据后面都有/r/n


  • 请求首行:GET为请求类型, / 为要访问的资源,HTTP/1.1是协议版本

  • 请求头部:从第二行起为请求头部,Host指出请求的目的地(主机域名);User-Agent是客户端的信息,它是检测浏览器类型的重要信息,由浏览器定义,并且在每个请求中自动发送。

  • 空行:请求头后面必须有一个空行。

  • 请求数据:请求的数据也叫请求体,可以添加任意的其它数据。


2、响应:


是时候该了解一下啦:什么是HTTP协议呢


  • 状态行:状态行由协议版本号、状态码、状态消息组成。

  • 响应头:响应头是客户端可以使用的一些信息,如:Date(生成响应的日期)、Content-Type(MIME类型及编码格式)、Connection(默认是长连接)等等。

  • 空行:响应头和响应体之间必须有一个空行。

  • 响应体:响应正文。


3、HTTP常见Header

  • Content-Type: 数据类型(text/html等)

  • Content-Length: Body的长度

  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;

  • User-Agent: 声明用户的操作系统和浏览器版本信息;

  • referer: 当前页面是从哪个页面跳转过来的;

  • ocation: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;

  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;


4
http状态码


是时候该了解一下啦:什么是HTTP协议呢常见的http状态码

  • 200:OK   //客户端请求成功

  • 400:Bad Request   //客户端请求有语法错误,不能被服务器所理解

  • 401:Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

  • 403:Forbidden   //服务器收到请求,但是拒绝提供服务

  • 404:Not Found  //请求资源不存在,eg:输入了错误的URL

  • 500:Internal Server Error //服务器发生不可预期的错误

  • 503:Server Unavailable   //服务器当前不能处理客户端的请求,一段时间后可能恢复正常


5
http的方法


是时候该了解一下啦:什么是HTTP协议呢

下面讲一下GET和POST的区别


  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.(注意对于用户登录来说,get是不安全的,网页直接显示你的用户名和密码) POST方法是把提交的数据放在HTTP包的Body中。


  • GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。


  • GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。


  • GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。当然,安全只是相对的,不管是GET还是POST都能直接获取到数据


是时候该了解一下啦:什么是HTTP协议呢
END
是时候该了解一下啦:什么是HTTP协议呢

你的每个赞和在看,我都喜欢!