Http协议的基本原理(转载)

1、Http协议的基本原理:有客户端向服务器发送请求,服务端对请求处理,对客户端进行相应。如下图所示。

图1 Http协议原理图

下面给出一个简单的请求和响应的示例代码:

客户端请求:

GET / HTTP/1.1
Host: localhost
Accept: text/html
Accept-Language: en-us
Accept-Encoding: gzip,deflate
Connection: keep-alive
空行(CR+LF) 

服务端响应:

HTTP/1.1 200  OK
Date: Fri, 13 Jul 2012 02:45:30 GMT
Server: Apache
Last-Modified: Fri ,31 Agu 2007 02:02:20 GMT
ETag: "45bae1-16a-46d776ac"
Connection: close
Content-Type: text/html
Content-Length:362
空行(CR+LF)
<html>
<head>
</head>
<body>
....                   --Content  362Bytes
....
</body>
</html>



2、Http请求

a.请求报文格式:

----------------------------------------------------------

请求行             ↔           GET / HTTP/1.1

请求头信息       ↔    Host: localhost

...

...

...

空行(CR+LF)

[请求主体信息](可以没有)

-----------------------------------------------------------

b.说明:

→请求行:请求方法+请求路径+Http协议版本

请求方法:GET,POST,HEAD,OPTION,DELETE,PUT等

请求路径:   /

Http协议版本:HTTP/0.9     HTTP/1.0     HTTP/1.1

→请求头信息

Host:              请求的主机名称   (localhost)

              注意:Host字段信息必须被包含在请求头信息中,因为同一个IP地址下可能会有多个虚拟主机,

                  需要Host来指定请求的是该IP下的哪一个主机。

Accept:       客户端可以处理的文件类型。           (text/html,text/plain,image/jpeg)

Accept-Encoding:  用户代理支持的内容编码及优先级顺序   (gzip,deflate,compress)

Accept-Charset:    用户代理支持的字符集及优先级顺序       (iso-8859-5)

Referer:            告知服务器请求的原始资源的URI  (用此字段可以进行反防盗链)

            例如:Referer:http://www.baidu.com

User-Agent:      传达创建请求的浏览器和用户代理名称等信息



3、Http响应

a.响应报文格式

-------------------------------------------------

响应行          ↔    HTTP/1.1 200 OK

响应头信息    ↔    Server:Apache

...

...

...

空行(CR+LF)

[响应主体信息](可以没有)

--------------------------------------------------

b.说明:

→响应行:Http协议版本+状态码+状态字

Http协议:HTTP/0.9,HTTP/1.0,HTTP/1.1

状态码:

状态码                说明

1XX                  信息性状态码。接收的请求正在处理

2XX       成功状态码。请求正常处理完毕

3XX       重定向状态码。需要进行附加操作以完成请求

4XX       客户端错误状态码。服务器无法处理请求

5XX       服务器错误状态码。服务器处理请求出错

一些重要的状态码:

2XX:200  204  206

200(OK)                  → 客户端的请求在服务端被正常处理

204(No Content)      → 服务器接收请求成功处理,但在返回响应报文中不含实体的主体部分

206(Partial Content) → 客户端执行了范围请求,而服务器成功执行了这部分的GET请求

3XX:301  302  303  304  307

301(Moved Permanently) → 永久重定向。表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI

302( Found)            → 临时重定向。表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的 URI访问

303(See Other)               → 表示由于请求对应的资源存在着另一个URI,应使用 GET方法定向获取请求的资源

304(Not Modified)           → 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。

                   304状态码返回时,不包含任何响应的主体部分

307(Temporary Redirect) → 临时重定向。与302有着相同的含义,但是302会将POST变换成GET,而307不会将POST变换成GET

4XX:400  401  403  404

400(Bad Request)   → 表示请求的报文中存在语法错误

401(Unauthorized)  → 表示发送的请求需要通HTTP认证的认证信息,若之前已经进行过一次请求,这表示用户认证失败

403(Forbidden)       → 表明对请求资源的访问被服务器拒绝

404(Not Found)       → 表名在服务器上无法找到请求的资源

5XX:500  503

500(Internal Server Error)  → 表明服务器端执行请求时发生了错误。也有可能是Web应用存在bug或某些临时的故障

503(Service Unavailable)    → 表明服务器暂时处于超负载或正在进行停机维护,现在无法执行请求

→响应头信息

Age:      告知客户端源服务端在多久前创建了响应(字段单位为:秒)

若创建该响应的服务器是缓存服务器,Age值是指缓存后的响应再次发起认证到认证完成的时间值。

代理创建响应时必须加上首部字段Age

ETag:      告知客户端响应实体信息的标记,将资源唯一标识,

ETag由服务器分配,没有统一的算法规则

Location:将接收方引导至另一个资源所在处

Server:   告知客户端当前服务器上安装的HTTP服务器应用程序的信息。不单单会标出服务器上的软件应用名称,

还有可能包括版本号和安装时启用的可选项



4、实体首部字段(请求头信息或者响应头信息的字段)

Content-Encoding:   对实体的主体部分选用的内容编码方式

Content-Language:告知客户端主体信息使用的语言

Content-Length:    说明主体信息的大小(字节)

Content-Type:        说明主体信息的文件(媒体)类型

Set-Cookie:            服务端向客户端写Cookie内容信息

Cookie:                  客户端向服务器发送Cookie内容信息

时间: 2024-10-14 02:14:38

Http协议的基本原理(转载)的相关文章

TCP/IP的排头兵――地址解析协议(ARP) (转载)

转自:http://blog.csdn.net/wangxg_7520/article/details/2488442 一.引言 古人行军打仗,都要有一个可以引领队伍前进方向的排头兵,在TCP/IP网络大军中,也存在这种排头兵,为TCP/IP传输指明方向,它就是地址解析协议――ARP. 二.ARP协议及应用 地址解析协议(ARP),是TCP/IP协议簇中较底层的一个,它是TCP/IP应用的基础,但又不完全隶属于TCP/IP,所以在名著<TCP/IP详解>中,它被单独的划分出来,与IP一起并列于

RTP与RTCP协议介绍(转载)

RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成.RTSP可以对流媒体提供诸如播放.暂停.快进等操作,它负责定义具体的控制消息.操作方法.状态码等.以下为转载: 本文主要介绍RTP与RTCP协议. author: ZJ   06-11-17 Blog: [url]http://zhangjunhd.blog.51cto.com/[/url] 1

各种软件开发协议(收集转载)

什么是BSD协议? BSD开源协议是一个给于使用者很大自由的协议.可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布.当你发布使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件: 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广. BSD代码鼓励代码

Objective-C Runtime 运行时之五:协议与分类(转载)

Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到. Objective-C中的协议是普遍存在的接口定义方式,即在一个类中通过@protocol定义接口,在另外类中实现接口,这种接口定义方式也 成为“delegation”模式,@protocol声明了可以呗其他任何方法类实现的方法,协议仅仅是定义一个接口,而由其他的类去负责实现. 在本章中,我们来看看runtime对分类与协议的支持. 基础数

HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447

引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出.HTTP协议的主要特点可概括如下:1.支持客户/服务器模式.2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POS

Java中UDP协议的基本原理和简单用法

UDP协议是非面向连接的,相对于TCP协议效率较高,但是不安全.UDP协议类似发信息的过程,不管接收方是在线还是关机状态,都会把信息发送出去.但是如果接收方不处于接收信息的状态,发送出去的数据包就会丢失. convert()方法是用来转换字节数组和基本类型. /** * 创建基于udp协议的服务接受端 * @author wxisme * */ public class MyServer { public static void main(String[] args) throws IOExce

c# MODBUS协议 上位机 (转载)

C#写了一款上位机监控软件,基于MODBUS_RTU协议. 软件的基本结构: 1.采用定时器(Timer控件)为时间片. 2.串口采用serialPort1_DataReceived中断接收,并进行MODBUS格式判断. 3.把正确接收的数据取出,转换为有特定的结构体中. 4.数据通过时间片实时刷新. 5.MODBUS协议(这里不介绍了,网上有很多的权威资料). 串口接收问题 这里采用的是MODBUS_RTU协议,是没有回车等明显的结束符的哈.所以在C#也不可以用serialPort1.Read

HTTP协议的基本原理

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息,通常情况下会配合数字证书实现. TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用非对称加密,对称加密,数字证书以及HASH算法四种技术. 原文地址:https://www.cnblogs.com/1234ply/p/10519511.html

EIGRP协议的配置

实验 3  EIGRP.BGP 的配置 EIGRP 实验学时:2学时 一.实验目的 掌握 EIGRP 协议的基本原理: 掌握 EIGRP 协议的配置方法: 掌握 EIGRP 协议路由汇总和负载均衡的配置方法: 二.实验环境(软件.硬件及条件) 2Windows 主机+3 台路由器 或者 1 台 Windows 主机+packet tracer 5.0 以上模拟器 三.实验内容 理解 EIGRP 协议的工作原理,掌握 EIGRP 协议的基本配置方法. 四.实验拓扑 各接口 IP 地址分配如图所示.