HTTP 请求报文格式:
HTTP 请求报文主要由请求行,请求头部,请求正文3部分组成
1 ,请求行
由3部分组成,分别为:请求方法,URL(见备注1 )以及协议版本,之间由空格分隔
请求方法包括GET,HEAD,PUT,POST,TRACE,OPTIONS,DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的(见备注) 2 )
在互联网应用中,最常用的方法的英文GET
状语从句:POST
:
得到
GET 方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向网站服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。
例如是:http://127.0.0.1/login.jsp名称=张氏与年龄= 30&提交=%CC%E +%BD%BB
从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容),另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大。
Post POST 方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据.POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送网络服务器,这就克服了GET方法中的信息无法保密和数据。因此,出于安全的考虑以及对用户隐私,通常表单提交时采用POST方法。 从编程的角度来讲,如果用户通过GET方法提交数据,则数据存放在QUERY_STRING环境变量中,而POST方法提交的数据则可以从标准。
协议版本的格式为:HTTP /。主版本号次版本号,常用的有HTTP / 1.0和HTTP / 1.1
HTTP1.0 和HTTP1.1的区别:
1)在HTTP1.0协议中,客户端与网络服务器建立连接后,只能获得一个网络资源。
2)HTTP1.1 协议,允许客户端与网络服务器建立连接后,在一个连接上获取多个网络资源。(常用)
面试中常会问道获取与发布请求的区别:
类别 | GET | POST |
点击刷新或返回按钮 | 没有影响 | 重新发送数据 |
添加书签 | 可以 | 不可以 |
缓存 | 可以 | 不可以 |
编码类型 | 应用程序/ x-WWW窗体-urlencoded | application / x-www-form-urlencoded或multipart / form-data。请为二进制数据使用多编码 |
历史记录 | 有 | 没有 |
长度限制 | 有(1024K) | 没有 |
数据类型限制 | 只允许ASCII字符类型 | 没有限制,可以是二进制数据 |
安全性
| 查询字符串会显示在地址栏的网址中,不安全,请不要使用GET请求提交敏感数据
| 因为数据不会显示在地址栏中,也不会缓存下来或保存在浏览记录中,所以看POST 求情比GET 请求安全,但也不是最安全的方式。如需要传送敏感数据,请使用加密方式传输 |
可见性 | 查询字符串在URL中可见 | 查询字符串不会显示在地址栏中,不可见 |
2 ,请求头部
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔
常见请求头如下:
请求头 | 说明 |
主办 | 接受请求的服务器地址,可以是IP:端口号,也可以是域名 |
用户代理 | 发送请求的应用程序名称 |
连接 | 指定与连接相关的属性,如连接:保持活动 |
接收字符 | 通知服务端可以发送的编码格式 |
接受编码 | 通知服务端可以发送的数据压缩格式 |
接受语言 | 通知服务端可以发送的语言 |
头部请求的求最后会有一个空行,表示请求头部结束,接下来为请求正文,行这一非常重要,必不可少
3 ,请求正文
可选部分,比如GET请求就没有请求正文
GET 请求示例:
POST 请求示例:
HTTP 响应报文格式:
HTTP 响应报文主要由状态行,响应头部,响应正文3部分组成
1 ,状态行
由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔
状态代码为3位数字,200〜299的状态码表示成功,300〜399的状态码指资源重定向,400〜499的状态码指客户端请求出错,500〜599的状态码指服务端出错( HTTP / 1.1向协议中引入了信息性状态码,范围为100〜199)
这里列举几个常见的:
状态码 | 说明 |
200 | 响应成功 |
302 | 跳转,跳转地址通过响应头中的位置属性指定(JSP中Forward和Redirect之间的区别) |
400 | 客户端请求有语法错误,不能被服务器识别 |
403 | 服务器接收到请求,但是拒绝提供服务(认证失败) |
404 | 请求资源不存在 |
500 | 服务器内部错误 |
2 ,响应头部
与请求头部类似,为响应报文添加了一些附加信息
常见响应头部如下:
响应头 | 说明 |
服务器 | 服务器应用程序软件的名称和版本 |
内容类型 | 响应正文的类型(是图片还是二进制字符串) |
内容长度 | 响应正文长度 |
内容字符集 | 响应正文使用的编码 |
内容编码 | 响应正文使用的数据压缩格式 |
内容语言 | 响应正文使用的语言 |
位置 | 用于重定向接受者到一个新的位置 |
响应示例:
备注1-PS:
URI ,URL和URN之间的区别
URI 全名为UniformResource Indentifier(统一资源标识),用来唯一的标识一个资源,是一个通用的概念,URI由两个主要的子集URL和URN组成
URL 全名为UniformResource Locator(统一资源定位),通过描述资源的位置来标识资源
URN 全名为UniformResource Name(统一资源命名),通过资源的名字来标识资源,与其所处的位置无关,这样即使资源的位置发生变动,其URN也不会变化
HTTP 规范将更通用的概念URI作为其资源标识符,但是实际上,HTTP应用程序处理的只是URI的URL子集
备注2- 请求方法
方法 | 描述 |
得到 | 对服务器资源的简单请求 |
头 | 类似于获取请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 用于发送包含用户提交数据的请求 |
放 | 传说当前请求文档的一个版本 |
删除 | 发送一个用来删除指定文档的请求 |
跟踪 | 发送请求的一个副本,以跟踪其处理进程 |
OPTIONS | 返回所有可用的方法;可检查服务器支持哪些方法 |
CONNECT | 用于SSL隧道的基于代理的请求 |