中国风古典网站模板,合肥网站建设信息,宝塔面板,crm客户管理系统模板HTTP的请求报文结构和响应报文结构
HTTP请求报文主要由请求行、请求头、空行、请求正文#xff08;Get请求没有请求正文#xff09;4部分组成。
1、请求行
由三部分组成#xff0c;分别为#xff1a;请求方法、URL以及协议版本#xff0c;之间由空格分隔#xff1b;请…HTTP的请求报文结构和响应报文结构
HTTP请求报文主要由请求行、请求头、空行、请求正文Get请求没有请求正文4部分组成。
1、请求行
由三部分组成分别为请求方法、URL以及协议版本之间由空格分隔请求方法包括GET、HEAD、PUT、POET、TRACE、OPTIONS、DELETE以及扩展方法当然并不是所有的服务器都实现了所有的方法部分方法即便支持出于安全性的考虑也是不同的协议版本的格式为HTTP/主版本号.次版本号常用的有HTTP/1.0和HTTP/1.1
2、请求头
请求头部为请求报文添加了一些附加信息由“名/值”对组成每行一对名和值之间使用冒号分隔。
常见请求头如下 3、空行
请求头的最后会有一个空行表示请求头部结束接下来为请求正文这一行非常重要必不可少。
4、请求正文
可选部分比如GET请求就没有请求正文。
HTTP响应报文主要由状态行、响应头、空行、响应正文4部分组成。
1、状态行
由3部分组成分别为协议版本、状态码、状态码描述之间由空格分隔
2、响应头
与请求头类似为响应报文添加一些附加信息。
常见响应头如下 3、空行
4、响应正文
常见HTTP首部字段
A、通用首部字段请求报文与响应报文都会使用的首部字段
Date创建报文时间Connection连接的管理Cache-Control缓存的控制Transfer-Encoding报文主体的传输编码方式如Transfer-Encoding: chunked。
B、请求首部字段请求报文会使用的首部字段
Host请求资源所在服务器Accept可处理的媒体类型Accept-Charset可接收的字符集Accept-Encoding可接受的内容编码Accept-Language可接受的自然语言
C、响应首部字段响应报文会使用的首部字段
Accept-Ranges可接受的字节范围Location另客户端重新定向到的URIServerHTTP服务器的安装信息
D、实体首部字段请求报文与响应报文的实体部分使用的首部字段
Allow资源可支持的HTTP方法Content-Type实体主类的类型Content-Encoding实体主体适用的编码方式Content-Language实体主体的自然语言Content-Length实体主体的字节数Content-Range实体主体的位置范围
HTTP状态码含义 200 OK 服务器已成功处理了请求并提供了请求的网页。 202 Accepted 已经接受请求但处理尚未完成。 204 No Content 没有新文档浏览器应该继续显示原来的文档。 206 Partial Content 客户但进行了范围请求。响应报文中由Content-Range指定实体内容的范围。实现断点续传。 301 Moved Permanently 永久性重定向。请求的网页已永久移动到新位置。 302或307 Moved Temporatily 临时性重定向。请求的网页临时移动到新位置。 304 Not Modified 未修改。自从上次请求后请求的内容未修改过。 401 Unauthorized 客户试图未经授权访问受密码保护的页面 403 Forbidden 服务器拒绝请求。 404 Not Found 服务器上不存在客户机所请求的资源。 500 Internal Server Error 服务器遇到一个错误使其无法为请求提供服务。
HTTP中有关缓存的首部字段有哪些HTTP的浏览器缓存机制
Last-Modified和ETags如何帮助提高性能
聪明的开发者会把Last-Modified和ETags请求的HTTP报头一起使用这样可利用客户端的缓存。因为服务器首先产生Last-Modified/ETags标记服务器可在稍后使用它来判断页面是否已经被修改。本质上客户端通过将该记号传回服务器要求服务器验证其缓存。
扩展2既然有了Last-Modified为什么还要用ETags字段呢
某些文件修改非常频繁比如在秒以下的时间内进行修改If-Modified-Since能检查到的粒度是秒级的这种修改无法体现。一些文件也许会周期性的更改但是它的内容并不改变仅仅改变修改的时间这个时候我们并不希望客户端认为这个文件被修改了而重新GET某些服务器不能精确的得到文件的最后修改时间。因此HTTP/1.1利用Entity Tag 头提供了更加严密的验证。Last-Modified与ETag一起使用时服务器会优先验证ETag的值。
3、Expires/Cache-Control优先使用
用来控制缓存的失效日期控制浏览器是直接从浏览器缓存取数据还是重新发请求到服务器取数据。
当服务器发出响应的时候可以通过两种方式来告诉客户端缓存请求
第一种是Expires比如Expires: Sun, 16 Oct 2016 05:43:02 GMT
不过Expires有缺点比如说服务端和客户端的时间设置可能不同这就会使缓存的失效可能并不能精确地按服务器的预期进行。
第二种是Cache-Control比如Cache-Control: max-age315360000
这里声明的是一个相对的秒数表示从现在起315360000秒内缓存都是有效的这样就避免了服务端和客户端时间不一致的问题。
但是Cache-Control是HTTP1.1才有的不适用于HTTP1.0而Expires既适用于HTTP1.0也适用于HTTP1.1所以说在大多数情况下同时发送这两个头回是一个更好的选择当用户端两种头都能解析的时候会优先使用Cache-Control。
HTTP1.1和HTTP1.0的区别。HTTP1.1版本的4个特性
1、默认持久连接和流水线
HTTP/1.1默认使用持久连接只要客户端服务端任意一端没有明确提出断开TCP连接就一直保持连接在同一个TCP连接下可以发送多次HTTP请求。同时默认采用流水线的方式发送请求即客户端每遇到一个对象引用就立即发出一个请求而不必等到收到前一个响应之后才能发出下一个请求但服务器端必须按照接收到客户端请求的先后顺序依次回送相应结果以保证客户端能够区分出每次请求的相应内容这样也显著地减少了整个下载过程所需要的时间。
HTTP/1.0默认使用短连接要建立长连接可以在请求消息中包含Connection: Keep-Alive头域如果服务器愿意维持这条连接在响应消息中也会包含一个Connection: Keep-Alive的头域。Connection请求头的值为Keep-Alive时客户端通知服务器返回本次清秋节过后保持连接Connection请求头的值为close时客户端通知服务器返回本次请求结果后关闭连接。
2、分块传输数据
HTTP/1.0可用来指定实体长度的唯一机制是通过Content-Length字段。静态资源的长度可以很容易的确定但是对于动态生成的响应来说为获取它的真是长度只能等它完全生成之后才能正确地填写Content-Length的值这便要求缓存整个响应在服务器端占用大量的缓存从而延长了响应用户的时间。
3、状态码 100 Continue
HTTP/1.1加入了一个新的状态码 100 Continue用于客户端在发送POST数据给服务器前征询服务器的情况看服务器是否处理POST数据。
4、Host域
HTTP1.1在Request消息头里多了一个Host域HTTP1.0则没有这个域。在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址这个IP地址上只有一个主机。但随着虚拟主机技术的发展在一台物理服务器上可以存在多个虚拟主机并且它们共享一个IP地址。
常用的HTTP方法有哪些
注意只有POST和PUT方法才有请求内容。
GET用于请求访问已经被URI统一资源标识符识别的资源可以通过URL传参给服务器。POST用于传输信息给服务器主要功能与GET方法类似但一般推荐使用POST方式。PUT传输文件报文主体中包含文件内容保存到对应URI位置。HEAD获得报文首部与GET方法类似只是不返回报文主体。DELETE删除文件与PUT方法相反删除对应URI位置的文件。OPTIONS查询相应URL支持的HTTP方法。
注意并非所有的服务器都实现了这几个方法。有的服务器还实现了自己持有的HTTP方法称为扩展方法。
GET: GET可以说是最常见的了它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据返回给客户端。GET请求中永远不会包含呈现数据。
HEAD: HEAD和GET本质是一样的区别在于HEAD不含有呈现数据而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用其实不是这样的。想象一个业务情景欲判断某个资源是否存在我们通常用GET但这里用HEAD则意义更加明确。
PUT这个方法比较少见。本质上来讲PUT和POST极为相似都是向服务器发送数据但它们之间有一个重要区别PUT通常指定了资源的存放位置而POST没有POST的数据存放位置由服务器自己决定。
DELETE删除某一个资源。
POST向服务器提交数据。这个方法用途广泛几乎目前所有的提交操作都是靠这个完成。
OPTIONS这个方法很有趣但极少使用。它用于获取当前URL所支持的方法。
TRACE请求服务器回送收到的请求信息主要用于测试和判断所以是安全的。
HTTP的请求方式get和post的区别
GET一般用于获取或者查询资源信息这就意味着它是幂等的对于同一个URL的多个请求返回同样的结果和安全的没有修改资源的状态而POST一般用于更新资源信息POST既不是安全的也不是幂等的。
为什么HTTP是无状态的如何保持状态会话跟踪技术、状态管理
**HTTP无状态**无状态是指协议对于事务处理没有记忆能力不能保存每次客户端提交的信息即当服务器返回应答之后这次事务的所有信息就都丢掉了。如果用户发来一个新的请求服务器也无法知道它是否与上次的请求有联系。
**优点**服务器不用为每个客户端连接分配内存来记忆大量状态也不用在客户端失去连接时去清理内存节省服务器端资源以更高效地去处理业务。
**缺点**缺少状态意味着如果后续处理需要前面的信息则客户端必须重传这样可能导致每次连接每次连接传送的数据量增大。
针对这些缺点可以采用会话跟踪技术来解决这个问题。把状态保存在服务器中只发送回一个标识符浏览器在下次提交中把这个标识符发送过来这样就可以定位存储在服务器上的状态信息了。
有四种会话跟踪技术
COOKIE;Session;URL 重写;作为隐藏域嵌入HTML表单中隐藏表单域;
在浏览器和服务器之间来回传递一个标识符这就是所谓的会话session跟踪。来自浏览器的所有包含同一个标识符这里是SESSIONID的请求同属于一个会话。
HTTP断点续传的原理
要实现断点续传下载文件首先要了解断点续传的原理。**断点续传其实就是在上一次下载断开的位置开始继续下载。**HTTP协议中可以在请求报文头中加入Range段来表示客户机希望从何处继续下载。在以前版本中HTTP协议是不支持断点的HTTP/1.1开始就支持了一般断点下载时才用到Range和Content-Range实体头。