织梦做的网站怎样,怀柔网站建设,单页网站程序,做网站怎么选择上市公司HTTP是一个基于TCP/IP通信协议来传递数据的协议#xff0c;传输的数据类型为HTML文件、图片文件、查询结果等。HTTP协议一般用于B/S架构。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 URI、URL、URN
HTTP使用统一资源标识符(Uniform Resource ldentif…HTTP是一个基于TCP/IP通信协议来传递数据的协议传输的数据类型为HTML文件、图片文件、查询结果等。HTTP协议一般用于B/S架构。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 URI、URL、URN
HTTP使用统一资源标识符(Uniform Resource ldentifiers,URI)来传输数据和建立连接
URIUniform Resource ldentifier 统一资源标识符用来唯一的标识一个资源。
URLUniform Resource Location 统一资源定位符用来唯一的标识一个资源而且还指明了如何去locate这个资源。
URNUniform Resource Name统一资源命名是通过名字来标识资源。
URI统一资源标识符
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是由一个URI来定位的。
URI一般由三部组成:
访问资源的命名机制存放资源的主机名资源自身的名称由路径表示着重强调于资源
URI结构
HTTP使用统一资源标识符(URI)来传输据和建立连接。URL(统一资源定位符)是一种特殊种类的URI包含了用于查找的资源的足够的信息我们一般常用的就是URL。
一个完整的URL包含下面几部分:
协议部分域名部分端口部分虚拟目录部分文件名部分锚部分参数部分
URL统一资源定位符
URL是Internet上用来描述信息资源的字符串主要用在各种WWW客户程序和服务器程序上.采用URL可以用一种统一的格式来描述各种信息资源包括文件、服务器的地址和目录等。URL一般由三部分组成:
协议(或称为服务方式)
存有该资源的主机IP地址(有时也包括端口号)
主机资源的具体地址。如目录和文件名等
HTTP URL包含了用于查找某个资源的详细信息格式如 http://host[.port][abs path]
URN统一资源命名
URN: Uniform Resource Name统一资源命名通过名字来标识资源。比如mailto:testbaidu.com
URI是以一种抽象的高层次概念定义统一资源标识而URL和URN则是具体的资源标识的方式URL和URN都是一种URI。
笼统地说每个URL都是URI但不一定每个 URI都是 URL。这是因为 URI还包括一个子类即统一资源名称(URN)它命名资源但不指定如何定位资源。上面的 mailto、news和isbn URI都是URN的示例。
HTTP请求
根据HTTP标准HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET,POST和HEAD方法。
HTTP1.1新增了五种请求方法: OPTIONS,PUT,DELETE,TRACE和CONNECT方法。 HTTP请求方法
GET请求指定的页面信息并返回实体主体。POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和或已有资源的修改。HEAD类似于get请求只不过返回的响应中没有具体的内容用于获取报头。PUT从客户端向服务器传送的数据取代指定的文档的内容。DELETE请求服务器删除指定的页面。CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。OPTIONS允许客户端查看服务器的性能。TRACE回显服务器收到的请求主要用于测试或诊断。
HTTP请求方法GET
GET /books/?sexmannameProfessional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
状态行由请求方式路径、协议等构成各元素之间以空格分隔。对应到图中即为 GET./books/?sexmannameProfessional、 HTTP/1.1。请求头提供一些参数比如: Cookie用户代理信息主机名等等。请求正文就放一些发送的数据一般 GET 请求会将参数放在URL中也就是在请求头中而请求正文般为空而POST请求将参数放在请求正文中。请求正文可以传一些json 数据或者字符串等等。
HTTP请求方法GET适用场景
GET一般用于信息获取比如浏览某新闻首页使用的就是GET方法。它仅仅只是获取资源信息就像数据库查询一样不会修改、增加GET请求一般不会产生副作用数据不会影响资源的状态并且对同一个 URL的多次GET请求应该返回相同的结果。
HTTP请求方法POST
POST请求表示可能会修改服务器上的资源比如把账号密码放入body中
POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive
sexmannameProfessional
GET与POST请求方法区别
GET和POST请求参数位置不同从上面两个请求报文可以看出GET 请求对应的参数放在URL中而POST请求对应的参数放在HTTP 请求主体中。虽然HTTP协议的RFC规范并没有详细规定URL的最大字符长度限制但实际上在浏览器或者服务器中总会存在限制的这就导致了GET请求中参数数量是有限的而POST没有。处于安全考虑在一些涉及安全的请求比如: 登录请求需要用POST 提交表单而GET请求一般用来获取静态资源。GET 请求可以被缓存可以被收藏为书签但POST 可以被缓存但不能被收藏为书签。GET请求的参数在URL中因此绝不能用GET 请求传输敏感数据。POST请求数据则写在HTTP的请求头中安全性略高于GET请求。 特征 GET POST 目的 从服务器获取数据 向服务器传输数据 请求参数的位置 URL中 请求的数据体中 请求参数的形式 variablevalue使用“?”和“”连接 变量和值相对应在数据体中传输 传输数据量限制 受URL长度限制数据量小 无限制可以传输大量数据 表单数据集值的字符限制 必须是ASCII字符 支持整个ISO10646字符集 幂等性 幂等多次执行效果相同 非幂等每次执行可能会产生不同的效果 默认方法 是Form的默认方法 不是Form的默认方法 安全性 不安全数据在URL中明文传输可能被第三方看到或记录在日志中 对用户不可见但同样是明文传输可能被开发者工具或抓包工具看到 注意为了确保数据的安全性应该使用加密通信协议如HTTPS尽管POST比GET更安全但因为POST也是明文传输所以并不是完全安全的。
HTTP响应
HTTP响应是服务器在客户端发送HTTP 请求后经过一些处理而做出的响应HTTP 响应和HTTP 请求相似也是由三个部分构成。分别是:
状态行响应头: Response Header响应正文
HTTP响应码
HTTP 响应中包含一个状态码用来表示服务器对客户端响应的结果状态码一般由3位构成。 状态码 含义 1xx 表示请求已经接受了继续处理 2xx 表示请求已经处理掉了 3xx 重定向。 4xx 一般表示客户端有错误请求无法实现。 5xx 一般为服务器端的错误 HTTP常见响应码 常见状态码 含义 200 OK客户端请求成功。 301 Moved Permanently 请求永久重定向 302 Moved Temporarily 请求临时重定向。 304 Not Modified 文件未修改可以直接使用缓存的文件 400 Bad Request由于客户端请求有语法错误不能被服务器所理解 401 Unauthorized 请求未经授权无法访问 403 Forbidden 服务器收到请求但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因。 404 Not Found 请求的资源不存在比如输入了错误的URL 500 Internal Server Error 服务器发生不可预期的错误导致无法完成客户端的请求 503 Service Unavailable 服务器当前不能够处理客户端的请求在一段时间之后服务器可能会恢复正常. HTTP头信息
HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息开始行就是请求行对于响应消息开始行就是状态行)消息报头 (可选)空行(只有CRLF的行)消息正文(可选)组成。
HTTP消息报头包括通用头、请求头、响应头、实体头。
每一个报头域都是由名字“:“空格值组成消息报头域的名字是大小写无关的
HTTP消息包头注解 通用头部 是客户端和服务器都可以使用的头部可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能如Date头部。 请求头部 是请求报文特有的它们为服务器提供了一些额外信息比如客户端希望接收什么类型的数据如Accept头部。 响应头部 便于客户端提供信息比如客服端在与哪种类型的服务器进行交互如Server头部。 实体头部 指的是用于应对实体主体部分的头部比如可以用实体头部来说明实体主体部分的数据类型如Content-Type头部。 HTTP头信息通用头
通用头域包含请求和响应消息都支持的头域通用头域包含缓存头部Cache-Control、Pragma及信息性头部Connection、Date、 Transfer-Encoding、Update、Via。
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age.max-stale、min-fresh、only-if-cached响应消息中的指令包括public、private、 no-cache、nostore、no-transform、must-revalidate、 proxy-revalidate、max-age。
Pragma头域用来包含实现特定的指令最常用的是Pragma:no-cache。在HTTP/1.1协议中它的含义和Cache- Control;no-cache相同。Connection表示是否需要持久连接Date头域表示消息发送的时间服务器响应中要包含这个头部因为缓存在评估响应的新鲜度时要用到其时间的描述格式由RFC822定义。Transfer-Encodinq表示WEB服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码比如是否分块 (chunked)。Upgrade可以指定另一种可能完全不同的协议。Via列出从客户端到OCS 或者相反方向的响应经过了哪些代理服务器他们用什么协议(和版本)发送的请求。
HTTP头信息请求头
请求头用于说明是谁或什么在发送请求、请求源于何处或者客户端的喜好及能力。服务器可以根据请求头部给出的客户端信息试着为客户端提供更好的响应。
请求头域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language.Authorization、From、Host、lf-Modified-Since、 lf-Match、lf-None-Match、lf-Range、 lfRange、 lf-Unmodified-Since Max-Forwards、Proxy-Authorization、Range、 Referer、User.Agent。
对请求头域的扩展要求通讯双方都支持如果存在不支持的请求头域一般将会作为实体头域处理。
Accept: 告诉WEB服务器自己接受什么介质类型。Accept-Charset: 浏览器告诉服务器自己能接收的字符集。Accept-Encoding: 浏览器申明自己接收的编码方法通常指定压缩方法是否支持压缩支持什么压缩方法(gzipdeflate)。Accept-Language: 浏览器申明自己接收的语言。Authorization: 当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时用该头部来回应自己的身份验证信息给WEB服务器。Host:客户端指定自己想访问的WEB服务器的域名/P 地址和端口号。User-Agent:用户请求的代理软件包括用户的操作系统浏览器等相关属性。Referer:代表当前访问的URL的上一个URL也就是用户是从什么地方转到本页面的。Cookie: Cookie是个非常重要的请求头常用来表示请求者的身份。比如有些会话信息(Sesssionld)会存在Cookie中Range:请求实体内容的一部分多线程下载一定会用到该请求头Proxy-Authenticate:代理服务器响应浏览器要求其提供代理身份验证信息Proxy-Authorization: 浏览器响应代理服务器的身份验证请求提供自己的身份信息
HTTP头信息响应头
响应头向客户端提供一些额外信息比如谁在发送响应、响应者的功能甚至与响应相关的一些特殊指令。这些头部有助于客户端处理响应并在将来发起更好的请求。
响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary.Warning、WWW-Authenticate
对响应头域的扩展要求通讯双方都支持如果存在不支持的响应头域一般将会作为实体头域处理。
Age:当代理服务器用自己缓存的实体去响应请求时用该头部表明该实体从产生到现在经过多长时间。Server: 服务器所使用的Web服务器名称。攻击者可以通过查看该头信息来探测Web服务器名称。所以一般服务器端会对该头信息进行修改。Accept-Ranges:WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。bytes:表示接受none: 表示不接受。Vary: WEB服务器用该头部的内容告诉 Cache 服务器在什么条件下才能用本响应所返回的对象响应后续的请求。
HTTP头信息实体头
实体头部提供了有关实体及其内容的大量信息从有关对象类型的信息到能够对资源使用的各种有效的请求方法。总之实体头部可以告知接收者它在对什么进行处理。
请求消息和响应消息都可以包含实体信息实体信息一般由实体头域和实体组成。
实体头域包含关于实体的原信息实体头包括信息性头部Allow、Location内容头部Content-Base.Content-Encoding、Content-Language、 Content-Length、 Content-Location、 Content-MD5Content-Range、Content-Type缓存头部Etag、Expires、 Last-Modified、extension-header。
Allow:服务器支持哪些请求方法(如GET、POST等)。Location: 服务器通过该头信息告诉浏览器去访问那个页面浏览器接收到这样的响应信息后通常会立刻访问Location头所指向的页面。这个头通常配合302重定向状态码使用。Last-Modified: 服务器通过该头信息告诉浏览器资源最后的修改时间。从而让客户端及时地更新缓存内容。Expires:WEB服务器表明该实体将在什么时候过期对于过期了的对象只有在跟WEB服务器验证了其有效性后才能用来响应客户请求
HTTP工作原理
HTTP会话跟踪
会话:客户端向服务器端发起请求到服务端响应客户端请求的全过程。
会话跟踪:会话追踪指的是服务器对用户响应的监视。
URL重写:URL重写技术就是在URL 结尾添加一个附加数据以标识该会话把会话D 通过 URL的信息传递过去以便在服务器进行识别不同的用户隐藏表单域:将会话ID添加到HTML表单元素中提交到服务器此表单元素并不在客户端显示。Cookie: Cookie是We 服务器发送给客户端的一小段信息客户端请求时可以读取该信息发送给服务器端进而进行用户的识别对于客户端的每次请求服务器都会将 Cookie 发送到客户端客户端保存下来以便下次使用。Session: 在服务器端会创建一个 session 对象产生一个 sessionlD 来标识这个 session 对象然4后将这个 sessionID 放入到 Cookie 中发送到客户端下一次访问时sessionD 会发送到服务器在服务器端进行识别不同的用户。
HTTP持久连接
在实际的应用中客户端往往会发出一系列请求接着服务器端对每个请求进行响应。对于这些请求响应如果每次都经过一个单独的TCP连接发送称为非持久连接。反之如果每次都经过相同的TCP连接进行发送称为持久连接。
非持久连接给服务器带来了沉重的负担每台服务器可能同时面对数以百计甚至更多的请求。持久连接就是为了解决这些问题其特点是一直保持TCP连接状态直到遇到明确的中断要求之后再中断连接。持久连接减少了通信开销节省了通信量。
HTTP缓存机制
HTTP条件GET是HTTP 协议为了减少不必要的带宽浪费提出的一种方案
HTTP条件GET 使用时机:客户端之前已经访问过某网站并打算再次访问该站点。
HTTP 条件GET 使用的方法:客户端向服务器发送一个包询问是否在上一次访问网站的时间后是否更改了页面如果服务器没有更新显然不需要把整个网页传给客户端客户端只要使用本地缓存即可如果服务器对照客户端给出的时间已经更新了客户端请求的网页则发送这个更新了的网页给用户。
HTTP工作原理
HTTP协议采用请求/响应模式客户端向服务器发送一个请求报文然后服务器响应请求。一次HTTP请求的过程:
在浏览器中输入URL并按下回车键浏览器向DNS服务器请求解析该URL中的域名对应的IP地址(如果是IP请求则不需要该步骤)。解析出IP后根据IP和端口号和服务器建立TCP连接。浏览器向服务器发送请求该请求报文作为TCP三次握手的第三个报文发送给服务器。服务器做出响应把数据发送给浏览器。通信完成断开TCP连接。浏览器解析收到的数据并显示。