文档章节

HTTP协议的工作原理

ho俊
 ho俊
发布于 2016/04/18 17:44
字数 1724
阅读 42
收藏 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
浅谈PHP在中使用高级会话

  在探讨高级会话之前,我们先了解下HTTP,为什么要了解HTTP呢?因为Web服务基本上都是使用的HTTP协议。 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种...

编程那些事
2017/06/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ在CentOS环境安装

1.废话不多说准备一台虚拟机,系统为centos,我这里使用的系统版本如下图所示:

凌晨一点
50分钟前
0
0
线程池相关

在java.util.concurrent包下,提供了一系列与线程池相关的类。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度。当任务到达时,任务...

edwardGe
51分钟前
0
0
学习大数据这三个关键技术是一定要掌握!

大数据时代全面来临,大数据、人工智能等技术引领科技创新潮流,获得国家政策大力支持,前景广阔。学习大数据技术的人自然是络绎不绝, 学习大数据虽然是一个趋势,但也要注意大数据培训课程...

董黎明
今天
0
0
jetbrains 上传代码到github

设置中找github 获取token 验证是否成功 测试git 生成key,一路回车即可 ssh-keygen -t rsa -C “youremail@example.com” 打开pub复制key,需要再次输入一次密码 验证是否成功,输入yes即可...

阿豪boy
今天
0
0
分布式服务框架(拾遗)

前言 现在的大部分工程都已经是基于分布式架构来处理。所以这里对分布式框架做一个简单的总结 常用的RPC框架 RPC框架原理 RPC(Remote Procedure Call,远程过程调用)一般用来实现部署在不同...

kukudeku
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部