最近要做一个http相关的东西,就学习了一下,自己做了总结和笔记,新手看一遍也能懂个大概
初期简单学习http协议需要知道的东西都列出,不足的地方留言补充
1.版本
HTTP 1.1 是今天普遍使用的一个版本
2.http是一个无状态协议
3.层次结构
_______________
|HTTP
|____|____TLS SSL_
|
|___TCP____
|
|___IP_____
|
|__链路层__
由结构可知:1).http是一个应用层协议
2).http有时也承载于TSL,SSL,这时候就是我们常說的https
3).http是基于TCP的连接
4.端口号
http的端口号为80,https的端口号为443
5.http永远都是客户端发起请求,服务端响应
6.工作流程
(1)客户机与服务器建立连接
(2)客户机发送请求给服务器
(3)服务器接到请求后,给予相应的响应信息
(4)客户机获得返回的数据通过浏览器显示,断开连接
7.URL
http://host[":"port][abs_path]
http标示通过http协议定位网络资源
host 指合法的主机名或者IP地址,域名
port 指定一个端口号,缺省为80
abs_path 求情资源的URI
8.持久连接和非持久连接
每个请求/响应都经过单独的TCP连接发送:非持久连接
对于相同的客户机和服务器在响应后保持该连接,后续的请求和响应通过该连接传送:持久连接
http默认使用持久连接
9.http报文格式
(1)请求报文
示例:
GET /somedir/page.html HTTP/1.1 /*请求行*/
Host: www.someschool.edu /*定义了目标所在主机*/
Connection: close /*浏览器告诉服务器不需要使用持久连接,请求结束后就关闭连接*/
User-agent: Mozilla/4.0 /*定义用户代理,及浏览器类型*/
Accept-langugae: fr /*请求对象的语言版本,服务器没有就使用默认版本*/
/*附加回车换行*/
说明:
报文是普通的ASCII文本书写的
每行用回车换行(\r\n)结束
最后一行附加有回车换行
该报文有5行,实际上可以有一行或者多行
第一行叫做请求行,结构为: 方法字段+URL字段+http协议版本
方法字段有:GET,POST,HEAD,PUT和DELETE,绝大部分报文是GET
URL字段填写对象地址
版本字段是自解释的
后续的行叫做首部行
最后一行Accept-language 这样的首部行是众多可选协商的首部行之一
http的请求通用报文格式:
请求行: |方法|sp| URL|sp| 版本|cr|lf|
首部行: |首部行字段名|sp|字段的值|cr|lf|
首部行: ... ...
附加空行:|cr|lf|
实体主体 (POST 方法时使用)
/*当使用扩展的GET方法时就可以不使用报单生成POST方法*/
其他方法
HEAD方法类似于GET方法,服务器收到HEAD方法时,会用一个http报文响应,不返回请求对象
PUT方法用于将对象上传到服务器指定路径
DELETE 方法可以删除服务器上指定对象
(2)HTTP响应报文
对应上面的报文:
HTTP/1.1 200 OK /*状态行*/
Connection: close /*告诉客户机报文发送后关闭TCP连接*/
Date: Thu, 03 Jul 2003 12:00:15 GMT /*服务器发送报文的时间*/
Server: Apache/1.3.0 (Unix) /*表明该报文是Apache Web服务器产生的*/
Last-Modified: Sun, 6 May 2007 09:23:25 GMT /*对象创建或者最后修改的时间*/
Content-Length: 6821 /*被发送数对象的字节*/
Content-Type: text/html /*指示实体中的对象是HTML文本*/
/*附加换行回车*/
(data...data...) /*实体主体*/
说明:
第一行初始状态行,然后是首部行,最后是实体主体
状态行有3个字段:协议版本+状态码+状态信息
http响应报文的通用格式
状态行: |版本|sp| 状态码|sp| 短语|cr|lf|
首部行: |首部行字段名|sp|字段的值|cr|lf|
首部行: ... ...
附加空行:|cr|lf|
实体主体
常见的状态码和状态信息
200 OK:请求成功,信息包含在返回的响应报文中
301 Moved Permanently:请求的对象被永久移除了,新的URL定义在响应报文的Location:首部行中指定
400 Bad Request:一个通用的差错代码,请求不能被服务器理解
404 Not Found:请求的文档不在服务器
505 HTTP Version Not Supported:服务器不支持的HTTP版本