文档章节

HTTP协议的工作原理

ho俊
 ho俊
发布于 2016/04/18 17:44
字数 1724
阅读 41
收藏 0
点赞 1
评论 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
博文 42
码字总数 42490
作品 0
广州
程序员
Linux运维基础原理汇总

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

aiweiwei24 ⋅ 2017/07/04 ⋅ 0

某宝某团队的题目

hashmap为什么线程不安全, java.concurrent包的常用使用 spring如何进行bean的管理 tomcat常用的gc算法,如何配置 jvm内存模型 http请求的完整流程 从dns到三次握手到最后到action,以及htt...

明舞 ⋅ 2015/08/31 ⋅ 3

Webservice

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

宿命panthers ⋅ 2016/08/11 ⋅ 1

[转]知名互联网公司系统工程师面试题

这些问题,对于一名系统工程师或一名运维工程师来说,都是挺好的题目,有兴趣,大家可以试着回答回答。 总共17个题目. GPLV2协议的主要内涵是什么? UNIX,Linux,BSD,Solaris,System V之间的关...

Yisen ⋅ 2011/06/07 ⋅ 0

Http与RPC通信协议的比较

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

晨曦之光 ⋅ 2012/03/09 ⋅ 0

聊聊WEB系列_Index

WEB基础 Cookie介绍与操作 理解Cookie和Session机制 理解Session实现原理及安全运用 GET和POST区别详解 J2EE框架Jar包说明 CDN原理 Servlet工作原理解析 Servlet生命周期与工作原理 浅谈Lis...

陶邦仁 ⋅ 2014/03/23 ⋅ 0

浅谈PHP在中使用高级会话

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

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

LVS原理详解及部署之一:ARP原理准备

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

Si2 ⋅ 2016/01/03 ⋅ 0

Linux运维网络知识-汇总

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

北漂的SA ⋅ 01/05 ⋅ 0

HTTP详解-工作原理

HTTP简介 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快...

Surjur ⋅ 2015/06/11 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Linux kernel脉络和主干总结

写在前面 前人常说,对Linux操作系统/内核的理解,是计算机行业从业者的内功,决定了你在技术领域想走多远。但内核的庞大以及学习曲线之陡峭,总让我在学习途中觉得犹如“管中窥豹”。 随着工...

Markz0928 ⋅ 29分钟前 ⋅ 0

在gcc中使用intel风格的内联汇编

很简单,内联汇编使用asm(“.intel_syntax noprefix/n”)声明一下,以后的内联汇编就可以用intel风格了,构建可执行文件时给gcc加上-masm=intel参数。 先写一个小程序测试一下: [cpp] view...

simpower ⋅ 39分钟前 ⋅ 0

NIO 之 ByteBuffer实现原理

相关文章 BIO、NIO、AIO 内部原理分析 NIO 之 Selector实现原理 NIO 之 Channel实现原理 前言 Java NIO 主要由下面3部分组成: Buffer Channel Selector 在传统IO中,流是基于字节的方式进行...

轨迹_ ⋅ 49分钟前 ⋅ 0

Jenkins docker权限问题

环境Ubuntu Server 工具 jenkins-war:2.89.2 报错信息 Cannot connect to the Docker daemon. Is the docker daemon running on this host?Build step 'Execute shell' marked build as fai......

Pulsar-V ⋅ 49分钟前 ⋅ 0

180621-一个简单的时间窗口设计与实现

如何设计一个计数的时间窗口 时间窗口,通常对于一些实时信息展示中用得比较多,比如维持一个五分钟的交易明细时间窗口,就需要记录当前时间,到五分钟之前的所有交易明细,而五分钟之前的数...

小灰灰Blog ⋅ 今天 ⋅ 0

Android之Dalvik、ART、JIT、AOT

Android之Dalvik、ART、JIT、AOT 本文内容:Dalvik、ART、JIT、AOT之间关系 本文定位:知识记录 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习的同学一些灵感 本文整理于[...

lichuangnk ⋅ 今天 ⋅ 0

Thrift RPC实战(五) thrift连接池

Thrift本身没有提供连接池,我们可以用Apache Commons Pool2来实现一个 一、定义对象工厂 BasePooledObjectFactory<T> extends BaseObject implements PooledObjectFactory<T> public class......

lemonLove ⋅ 今天 ⋅ 0

git 命令简写

简写 命令 g git gst git status gd git diff gdc git diff --cached gdv git diff -w "$@" | view - gl git pull gup git pull --rebase gp git push gc git commit -v gc! git commit -v ......

charley158 ⋅ 今天 ⋅ 0

Java中的锁使用与实现

1.Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 在Lock出现之前,java程序是靠synchronized关键字实现锁功能的,而Java SE5之后,...

ZH-JSON ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧四-类和方法注释模板设置

IDEA自带的注释模板不是太好用,我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家,我不是专业玩博客的,写这篇文章只是为了让大家省事。 这里设置的注释模...

Mkeeper ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部