文档章节

HTTP协议的工作原理

ho俊
 ho俊
发布于 2016/04/18 17:44
字数 1724
阅读 44
收藏 0

浏览网页是HTTP协议的主要应用,比如腾讯QQ、迅雷等软件都是用HTTP协议的。

那么HTTP协议是如何工作的呢?

首先,客户端发送一个请求(request)给服务器,服务器在接收到这个请求后将生成一个响应(response)返回给客户端。一次HTTP操作称为一个事务,其工作过程可分为四步:


1)、客户机与服务器需要建立连接。单击某个超链接,HTTP协议工作开始。


2)、建立连接后,客户机发送一个请求给服务器。格式为:前边是统一资源标识符(URL)、中间是协议版本号,后边是MIME信息(包括请求修饰符、客户机信息和可能的内容)。

请求

在发起请求前,需要先建立连接。

在HTTP1.1协议中,request和response头中都有可能出现一个connection的头,其决定当client和server通信时对于长链接如何处理。

HTTP1.1协议中,client和server默认对方支持长链接,如果client使用HTTP1.1协议,但不希望使用长链接,需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中需要明确connection的值为close。

不论request还是 response 的 header 中包含了值为 close 的 connection,都表明当前正在使用的 TCP 连接在请求处理完毕后会被断掉,以后client再进行新的请求时必须创建新的TCP连接。


HTTP请求由三个部分组成:请求行、消息报头、请求正文

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本

格式如下:

Method Request-URI HTTP-Version CRLF

请求方法  一个统一资源标识符  请求的HTTP协议版本 回车和换行


请求方法有很多种,各个方法的解释如下:

    ·GET:请求获取Request-URI所标识的资源。

    ·POST:在Request-URI所标识的资源后附加新的数据。

    ·HEAD:请求获取由Request-URI所标识的资源的响应消息报头。

    ·PUT:请求服务器存储一个资源,并用Request-URI作为其标识。

    ·DELETE:请求服务器删除Request-URI所标识的资源。

    ·TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。

    ·CONNECT:保留以备将来使用。

    ·OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求


URI(uniform resourse identifier)

URI是一个用于标识某一互联网资源名称的字符串。该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。

web上可用的每种资源HTML文档、图像、视频片段、程序等——由一个通用资源标识符进行定位。


3)、服务器接到请求后,给予相应的响应信息。格式为:首先是一个状态行(包括信息的协议版本号、一个成功或者错误的代码),然后是MIME信息(包括服务器信息、实体信息和可能的内容)

响应

在接受和解释请求消息后,服务器返回一个HTTP响应消息。

HTTP响应也有三个部分组成:状态行、消息报头、响应正文。

状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

服务器HTTP协议的版本 发回的响应状态代码 状态代码的文本代码  回车和换行


状态代码由三位数字组成,第一个数字定义了响应的类别,有五种可能取值:

1XX:提示信息

2XX:成功

3XX:重定向——要完成请求必须进行更进一步的操作

4XX:客户端错误——请求有语法错误或请求无法实现

5XX:服务器端错误——服务器未能实现合法的请求


200,OK:客户端请求成功

400 Bad Rquest:客户端请求有语法错误

401 Unauthorize:请求未经授权

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

404 Not Found:请求资源不存在,例如输入了错误的URL

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

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


4)、客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户机与服务器断开

如果以上过程中的某一步出现错误,产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP协议自己完成的,用户只要用鼠标单击,等待信息显示就可以了。



报头

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每个报头域组成形式如下:

        名字+:+空格+值


普通报头中有少数报头域用于素有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息(如缓存控制、连接控制等)。

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息(如UA头、Accept等)。

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行写一部访问的信息(如Location)。

实体报头定义了关于实体正文和请求所标识的资源的元信息,例如有无实体正文。

Host:头域指定请求资源的Internet主机和端口号,必须表示请求URL的原始服务器或网关的位置。

User-Agent:UA,内容包含发出请求的用户信息。通常包含浏览者的信息,主要是浏览器的名称版本和所用的操作系统。

Accept:告诉服务器可以接受的文件格式。WAP浏览器所能接受的格式要少一些

Cookie:分两种,一种是客户端向服务器端发送的,使用Cookie报头,用来标记一些信息;另一种是服务器发送给浏览器,报头为set-cookie,一条记录只能有一个cookie的value。

Cache-Control:指定请求和响应遵循的缓存机制。请求时

     缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached

     响应指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。

Referer:头域允许客户端指定请求URI的源资源地址

Content-Length:内容长度

Content-Range:响应资源的范围

Accept-Encoding:指定所能接受的编码方式

自定义报头:




© 著作权归作者所有

共有 人打赏支持
ho俊
粉丝 0
博文 43
码字总数 42490
作品 0
广州
程序员
私信 提问
Linux运维基础原理汇总

01. 前言介绍 初始运维的小伙伴,有些技术概念原理还是需要掌握的。有些原理概念一旦理解透彻,首先, 对运维技术工作大有帮助;其次,在遇到一些技术交流会上,也可以装一装,不会显得没话说...

aiweiwei24
2017/07/04
0
0
Webservice

最近系统集成经常调用webservice,都是用一些框架直接生成本地客户端代码,然后调用本地客户端方法,对webservice的的原理和基本实现并不清楚,前几天c#调用java端的webservice,因为涉及到h...

宿命panthers
2016/08/11
316
1
Http与RPC通信协议的比较

OSI网络结构的七层模型 各层的具体描述如下: 第七层:应用层 定义了用于在网络中进行通信和数据传输的接口 - 用户程式;提供标准服务,比如虚拟终端、文件以及任务的传输 和处理; 第六层:...

晨曦之光
2012/03/09
1K
0
LVS原理详解及部署之一:ARP原理准备

-------------------LVS专题------------------------ LVS原理详解及部署之一:ARP原理准备 LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) LVS原理详解及部署之三:手动部署...

Si2
2016/01/03
181
0
Linux运维网络知识-汇总

系统 网络 开发 三大方向 OSI七层网络模型 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 tcp/ip协议的三次握手和四次断开过程http://video.tudou.com/v/XMTc5MDExMzM0MA==....

北漂的SA
01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 时间格式化

DATE_FORMAT

1713716445
7分钟前
0
0
聊聊flink的PartitionableListState

序 本文主要研究一下flink的PartitionableListState PartitionableListState flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/DefaultOperatorStateBackend.java /*......

go4it
12分钟前
0
0
Micropython教程之TPYBoard开发板制作电子时钟(萝卜学科编程教育)

1.实验目的 1. 学习在PC机系统中扩展简单I/O?接口的方法。 2. 什么是SPI接口。 3. 学习TPYBoard I2C接口的用法。 4. 学习LCD5110接线方法。 5. 设定时钟并将当前时间显示在LCD5110上。 2.所需...

bodasisiter
12分钟前
0
0
js 闭包

闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是 ECMAScript 规范给的定义,如果没有实战经验,很难从定义去理解它。因此,本文不会对闭包的概念...

MrBoyce
17分钟前
0
0
Java B2B2C o2o多用户商城 springcloud架-企业云架构common-service代码结构分析

当前的分布式微服务云架构平台使用Maven构建,所以common-service的通用服务按照maven构建独立的系统服务,结构如下: particle-commonservice: spring cloud 系统服务根项目,所有服务项目...

itcloud
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部