Http协议学习小结

本文是对这几天学习Http协议的基础知识的小结。内容包括了Http协议的原理,Http请求信息和Http响应信息以及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

3XX:301  302  303  304  307

4XX:400  401  403  404

5XX:500  503

→响应头信息

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

若创建该响应的服务器是缓存服务器,Age值是指缓存后的响应再次发起认证到认证完成的时间值。代理创建响应时必须加上首部字段Age。

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

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

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

Server:告知客户端当前服务器上安装的HTTP服务器应用程序的信息。不单单会标出服务器上的软件应用名称,还有可能包括版本号和安装时启用的可选项。



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

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

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

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

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

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

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

附:以上内容参考自《图解HTTP》一书。 

时间: 2024-12-18 10:13:57

Http协议学习小结的相关文章

TCP 协议学习小结

TCP 传输控制协议(Transmission Control Protocal): (1)TCP协议概括介绍: TCP协议是传输层的通信协议,有同学或许不理解了,IP是网络层的传输协议,这个传输层和网络层有什么区别呢?依我之见,网络层是用来寻找网络中的主机的,通过IP地址是可以锁定唯一主机的.我们通常的通信,是一个进程和另一个进程之间的通信,而进程是依附于主机的.故在一个进程到另一个进程的通信流程可简化为:进程A——主机A——主机B——进程B.而传输层协议就是实现主机A——主机B之间的通信的.

网络编程学习小结

几种网络编程方式: ISAPI.CGI.WinInet.Winsock 它们之间的差别: 1)  ISAPI主要是开发基于浏览器client与server端程序.效率比CGI方式高,并且也扩展了CGI没有的一些功能.(基于TCP/IP模型中的应用层) 2)  CGI主要是开发基于浏览器client与server端程序.(基于TCP/IP模型中的应用层) 3)  WinInet主要是开发client程序.(基于TCP/IP模型中的应用层) 4)  Winsock主要是基于socket来开发clie

MogileFS学习小结

大纲: 一.关于MogileFS 二.常见分布式文件系统 三.MogileFS基本原理 四.MogileFS的实现 一.关于MogileFS 当下我们处在一个互联网飞速发展的信息社会,在海量并发连接的驱动下每天所产生的数据量必然以几何方式增长,随着信息连接方式日益多样化,数据存储的结构也随着发生了变化.在这样的压力下使得人们不得不重新审视大量数据的存储所带来的挑战,例如:数据采集.数据存储.数据搜索.数据共享.数据传输.数据分析.数据可视化等一系列问题. 传统存储在面对海量数据存储表现出的力不从

varnish学习小结

大纲 一.Varnish 简介 二.Varnish 特点 三.Varnish 与 Squid 对比 四.Varnish 设计结构 五.Varnish 工作流程 六.Varnish 状态引擎(state engine) 七.安装与配置 Varnish 一.Varnish 简介 Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好. Varnish 的作者Poul-Henning Kamp是F

苹果ANCS协议学习【转】

苹果ANCS协议学习 转自:http://www.cnblogs.com/alexcai/p/4321514.html 综述 苹果通知中心(Apple Notification Center Service, ANCS)的目的是提供给蓝牙外设一种简单.方便的获取ios设备通知信息的方式. 依赖 ANCS的使用没有依赖,它是GATT的一个子集,任何一个实现了GATT client的设备可以方便的从ios设备获取通知信息. 传输注意事项 如果没有特殊说明,通过ANCS传输的数值均使用小端模式. 如果

git学习小结

背景:最近因为工作原因,需要将以前的代码库由bitbucket重新布置在一台服务器上,所以就学习了下git,特此记录下 在167这台机器上搭建apache,用做git server,由于以前apache都已经搭好了,所以这里只配置git server 就可以了,此处贴出配置: 服务器搭好了,来到配置中的root目录,git clone https://[email protected]/XXXX 此时,库和服务器都搭好了,用于新库测试的机器也可以从git server上克隆库了,来,我们来试试从

201671010130 2016-2017-2 《Java程序设计》第四周学习小结

第四周学习小结 本次实验巩固了上次实验分隔数并求和的题,目前这个题有两种做法,一种是不断对数10求余,余数保存在sum中,然后左移一位,直到余数为零.另一种就是将数字强制转换成一个字符串数组String s=String.valueOf(num),根据方法s.toCharArray()将字符分离出来,据"x"-"0"=x,unicode码值相减即可得x的值. 父类和子类能够看两个交集,super关键字是否能够看做一个子类和超类的接口呢? 在子类中可以增加域.增加方法

初识ASP.NET---点滴的积累---ASP.NET学习小结

差不多十多天前学习完了北大青鸟的学习视频,没想到没几天的时间就看完了XML视频和牛腩的Javascript视频.学习完了也该总结总结,理理自己的思路,消化一下自己学习到的东西. 视频中的理论知识并不是很多,以例子驱动学起来也不会他过于乏味.全部的学习内容大概的可以用下图表示. 个人感觉这套视频的体系感不是很强,每一集之间老师的串联并不是做得很好,向我等没有教材的有些小的知识无从知晓.但是不能不说这套视频确很适合初学者学习,老师讲解的也不错,从此我也算是入门. 当然要想进一步的了解ASP.NET并

#HTTP协议学习# (十二)理解转发与重定向

本文转自:http://blog.csdn.net/meiyalei/article/details/2129120  生动清晰 解释一 转发是服务器行为,重定向是客户端行为.为什么这样说呢,这就要看两个动作的工作流程: 转发过程:客户浏览器发送http请求---->web服务器接受此请求-->调用内部的一个方法在容器内部完成请求处理和转发动作---->将目标资源发送给客户:在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的r