一、http介绍
http是一个基于请求/响应模式的、无状态的协议。即,浏览器与服务端连接之后,浏览器向服务器发送一个请求,服务器返回响应信息之后,双方的链接就被关闭。我们要知道,应用层的http要使用传输层的tcp协议来完成。而tcp协议是通过“3次握手”建立连接,是面向连接的协议。默认情况下,浏览器与web服务器上80端口监听的服务器程序建立tcp连接。
http1.0是典型的请求/响应模式。为了减少服务器的开销,http1.1默认有“持续连接”的机制。通过这种机制,客户端发送请求得到响应后,连接不会马上关闭,可以继续发送请求,还可以流水线发送多个请求、而不用等待每一个响应的到来。
二、uri和url
uri(统一资源标识符)纯粹是一种符号结构,用于指定构成web资源的字符串的各个不同部分。而url(统一资源定位符)是一种特殊的uri,包含了用于查找某个资源的足够信息。
uri是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而url则必须提供足够的信息来定位,所以,是绝对的,而通常说的relative url,则是针对另一个absolute url,本质上还是绝对的。
三、http请求
格式如图:(crlf表示回车符 换行符,不同颜色之间用空格隔开)
第一行叫做请求行。所以我们可以说http请求由请求行、消息报头、请求正文组成。
1、请求行
如上,请求行以一个方法符号开头,空格之后,一个请求uri,再空格,然后一个http版本,最后一个回车换行。
其中请求方法有如下几种:
我们在浏览器地址栏直接输入地址的时候,采用的就是get方法。
head方法一般用于测试超链接的有效性,因为它只是请求响应消息的报头。消息报头后面会讲。
(http协议中,请求方法必须全部大写)
2、请求正文
类似name=xxx&pwd=xxxx的内容
四、http响应
格式与http请求类似,如图:
第一行叫做状态行。所以我们可以说http响应由状态行、消息报头、响应正文组成。
1、状态行
如上,状态行由一个http版本,空格后,一个状态码,再空格,一个状态码的文本描述,最后一个回车换行构成。
状态代码有3位数字组成,状态描述给出了状态代码简短的描述。状态码第一个数字定义了响应的类别,有五种可能取值:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
全部取值如下:
100——客户必须继续发出请求
101——客户要求服务器根据请求转换http协议版本
200——交易成功
201——提示知道新文件的url
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的get请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他url或访问方式
304——客户端已经执行了get,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本http中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除
400——错误请求,如语法错误
401——请求授权失败
402——保留有效chargeto头响应
403——请求不允许
404——没有发现文件、查询或url
405——用户在request-line字段定义的方法不允许
406——根据用户发送的accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的content-length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源url长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含if-range请求头字段
417——服务器不满足请求expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的http版本
消息报头下面会讲。
2、响应正文
所谓响应正文,就是服务器返回的资源的内容。即整个html文件。
五、消息报头
http请求和http响应都有消息报头。而消息报头是由众多报头域组成。每一个报头域都由名字 “:” 空格组成,消息报头域的名字是大小写无关的。
http消息报头包括普通报头、请求报头、响应报头和实体报头。
1、普通报头:
在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。
普通报头包括:
常见的普通报头:
1)cache-control
cache-control用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),http1.0使用的类似的报头域为pragma。
请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;
响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.
2)date
date普通报头域表示消息产生的日期和时间
3)connection
connection普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接
2、请求报头
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
请求报头包括:
常见的请求报头:
1)accept
accept请求报头域用于指定客户端接受哪些类型的信息。
2)accept-charset
accept-charset请求报头域用于指定客户端接受的字符集。如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
3)accept-encoding
accept-encoding请求报头域类似于accept,但是它是用于指定可接受的内容编码。如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
4)accept-language
accept-language请求报头域类似于accept,但是它是用于指定一种自然语言如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。
5)authorization
authorizat
硅云服务器怎么设置缓存哪里的云的服务器实惠打开速度比较慢-云服务器问题云服务器一年的租赁费我电脑的网络是北京联通的云服务器选什么地方2019双十一云服务器满减如何建设一个网站才有理想的体验