HTTP协议中有两种报文:请求报文和响应报文
一、请求报文
下面是一个比较典型的请求报文:
每一行由一个回车和换行符结束,最后一行额外再加一个回车换行符。
HTTP请求报文的第一行叫做请求行,后面部叫首部行。
1、请求行:
请求行的三个字段:方法字段、URL字段、HTTP版本字段。
方法字段可取值:GET、POST、HEAD、PUT和DELETE。
绝大部分HTTP请求报文都是GET方法。当浏览器请求一个对象时,使用GET方法,在URL字段带有请求对象标识。
2、首部行
Host:127.0.0.1:指明了对象所在主机,虽然主机中已经有一条TCP连接存在,但该行提供的信息是Web代理高速缓存所要求的。
User-Agent:指明代理,就是浏览器的类型。这服务器可以有效地为不同类型的用户代理实际发送相同对象的不同版本。
Accept-Language:zh-CN:表示语法版本。如果服务器中没有这样的对象的,就会发送其默认的版本。
Connection:close :要求服务器在发送完被请求的对象后就关闭这条连接。
HTTP请求通用请求格式(下面讨论实体体)
实体体(entity body):
使用GET方法时实体体会为空,使用POST方法时才会使用该实体体。提交表单时,会使用到POST方法(例如在搜索引擎中输入搜索关键字),实体体中包含的就是用户在表单字段中输入的值。
虽然POST方法才能用到实体体,但是”用表单生成的请求报文不是必须使用POST方法“:
HTML表单经常使用GET方法,在表单字段中所请求的URL中包括输入的数据,例如一个使用GET方法的表单有两个字段aaa和bbb,那么其URL的的结构是这样的:www.xxx.com/admin? aaa&bbb (非常常见,浏览网页的时候可以注意一下)
下面介绍另外一些方法:
HEAD方法,与GET类似,服务器收到HEAD请求时,会用一个HTTP报文响应,但是不会反回请求对象,常用于调试跟踪。
PUT方法:常与Web发行工具联合使用,他允许用户上传对象到指定的Web服务器上指定的路径(目录),同样它也被Web服务器上传对象的应用程序所使用,
DELETE方法:允许用户或者应用程序删除Web服务器上的对象。
二、响应报文
首先附上典型的响应报文图:
结构分为三部分:状态行、首部行、和实体体
首先关于实体体可以有些小伙伴不理解,实际上他就是请求对象本身(也就是网页)。
然后来看看与请求报文的请求头相对应位置的 状态行结构:版本+状态码+短语(也就是与状态码响应的状态信息)
首部行:
Date:发送响应该报文的日期信息。就是它从服务器的文件系统检索到该对象,插入到响应报文,并发送该响应报文的时间。
Server:类似于请求报文中的User-Agent,显示服务及服务器。
Last-Modified:对象创建或者最后修改的日期和时间。它对于存在于本地或者代理服务器上的对象缓存非常重要。
Content-Length:发送对象的字节数。
Content Type:实体体中的对象类型。值得一说的是实体体中的内容格式应由Content Type指定,而不是扩展名。
响应报文结构图;
常见的几个状态码及其相关的短语:
200 OK:请求成功,信息在返回的报文中。
301 Moved Permanently:请求的对象已经被永久转移,新的URL定义在响应报文的Location:首部行中。客户软件自动获取新的URL。
400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解。
404 Not Found:被请求的文档不在服务器上。
505 HTTP Version Not Support:服务器不支持请求报文使用的HTTP协议版本。