关于http协议
Posted ttg-123456
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于http协议相关的知识,希望对你有一定的参考价值。
一、HTTP协议简介
Http协议又叫超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
它是基于TCP的应用层协议,它不关心数据传输的细节,HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,只有遵循统一的 HTTP 请求格式,服务器才能正确解析不同客户端发的请求,同样地,服务器遵循统一的响应格式,客户端才得以正确解析不同网站发过来的响应。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法,1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1,所有的WWW文件都必须遵守这个标准。
二、http协议的作用及特点
作用:规范了浏览器和服务器之间的数据交互
特点:
1.简单快速。客户端想服务器请求服务时,只需要传送请求方法和路径。
2.灵活。HTTP协议允许传送任意格式的数据。正在传输的类型由,content-type标明。
3.无连接。就是每个请求都建立一个连接,请求处理完毕并发送至客户端之后就断开连接。这样明显有其缺点,就是在需要在连续发送请求时,需要为每一个请求单独的再次建立连接,很浪费时间和资源。于是在HTTP协议1.1版本之后引入了可持续连接,也就是再每一个请求处理完毕后,它不会立刻就断开连接,而是再等待一段时间,如果在此期间又有新的请求过来,那么等待时间刷新,如果没有,则等待时间完毕后,连接关闭。
4.无状态。是指协议对事务处理没有记忆能力。也就是说,如果数据处理需要用到前面的信息,那么前面的信息还是需要重传。这样的话,如果一个请求需要用到前面的信息,就会导致要处理的数据量增大。但是如果请求不需要前面的信息,就可以实现快速应答。
三、HTTP的请求响应模型
HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:
这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。
四、工作原理
一次HTTP操作称为一个事务,其工作过程可分为四步:
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了
五、http协议的版本
HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开,其定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP/1.1,发送请求,创建一次连接,获得多个web资源,连接断开,在HTTP/1.0的基础上上新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
六、hhtp请求内容
HTTP 请求由请求行、请求头、空行、请求体组成
请求行:请求方式 + URL + 协议版本
- 常见的请求方法有 GET、POST、PUT、DELETE、HEAD、OPTIONS, TRACE、C ONNECT
- 客户端要获取的资源路径(所谓的URL)
- 客户端使用的 HTTP 协议版本号(目前使用的是http1.1)
请求头:客户端向服务器发送请求的补充说明
- host:请求地址
- User-Agent: 客户端使用的操作系统和浏览器的名称和版本.
- Content-Length:发送给HTTP服务器数据的长度。
- Content-Type:参数的数据类型
- Cookie:将cookie的值发送给HTTP 服务器
- Accept-Charset:自己接收的字符集
- Accept-Language:浏览器自己接收的语言
- Accept:浏览器接受的媒体类型
请求体:一般携带的请求参数
- application/json:{"name":"value","name1":"value2”}
- application/x-www-form-urlencoded: name1=value1&name2=value2
- multipart/from-data:表格形式
- text/xml
- content-type:octets/stream
七、http响应内容
HTTP 响应格式与请求的格式很相似,也是由响应行、响应头、空行、响应体组成。
状态行:HTTP 版本号 + 响应状态码 + 状态说明
响应状态码有 1XX、2XX、3XX、4XX、5XX、5XX。
- 1XX 提示信息 - 表示请求已被成功接收,继续处理
- 2XX 成功 - 表示请求已被成功接收
- 3XX 重定向 - 要完成请求必须进行更进一步的处理
- 4XX 客户端错误 - 请求有语法错误或请求无法实现
- 5XX 服务器端错误 - 服务器未能实现合法的请求响应头
- 响应头:响应头与请求头对应,是服务器对该响应的一些附加说明
- 响应体:它才是真正的响应数据,这些数据其实就是网页的 html 源代码
八.关于http报文
1.http报文
它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动,它由三个部分组成:对报文进行描述的 起始行(start line)、包含属性的 首部(header) 块,以及可选的包含数据的 主体(body) 部分。
HTTP-message = start-line
*( header-field CRLF )
CRLF
[ message-body ]
2.http报文分类与格式
HTTP报文都可以分为两类:请求报文(request message) 和 响应报文 (response message)。请求和响应报文的基本报文结构相同。
请求报文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
响应报文的格式(注意,只有起始行的语法有所不同):
<version> <status> <reason-phrase> <headers>
<entity-body>
以上是关于关于http协议的主要内容,如果未能解决你的问题,请参考以下文章