• web核心(3)响应头请求头状态码及dns解析过程


    1.http

    1.1 通用头

    1.1.1Cache-Control:请求和响应遵循的缓存机制,请求消息或响应消息中设置的Cache-Control并不会修改另一个请求消息或响应消息缓存处理过程

    参数:

    Public(仅为响应标头):响应可被任何缓存区缓存,,可以无条件的缓存该响应.

    Private(仅为响应标头): 对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。可以具体指定某个字段.如

    private –“username”,则响应头中,名为username的标头内容,不会被共享缓存.

    no-cache:请求或响应消息不能缓存,实际上Cache-Control: no-cache是会被缓存的,只不过每次在向客户端提供响应数据时,缓存都要向服务器评估缓存响应的有效性。

    no-store:请求消息中发送将使得请求和响应消息都不使用缓存,相对no-cache这个才是响应不被缓存

    max-age:设置缓存最大的保存时间,单位秒,从服务端返回的时间开始计算

    min-fresh(仅为请求标头) :当当前时刻加上一个指定时间超出过期时间,那么会得到一个新的数据

    max-stale 可以接收超出指定时间之内的过期缓存的响应消息。

    .only-if-cached:(仅为请求标头):希望从缓存中获取数据,不论是否过期。

    .must-revalidate(仅为响应标头) :如果缓存过期,那么必须重新验证,而不是试图返回一个不新鲜期的缓存,与no-cache的区别在于no-cache完全无视新鲜期的概念,总是强制重新验证,理论上must-

    revalidate更节省流量,但相比no-cache可能并不那么精准,因为即使缓存者认为是新鲜的也不能保证服务器端没有做过更新,如果缓存者是一个缓存代理服务器,如果其试图重新验证时,无法连接上原始

    服务器,则也不允许返回一个不新鲜的缓存中的副本,而是必须返回一个504 Gateway timeout。

    .proxy-revalidate(仅为响应标头) :与must-revalidate类似,区别在于受体的范围,proxy-revalidate是要排除掉用户代理的缓存,其规则并不应用于用户代理的本地缓存上。

    .s-maxage(仅为响应标头):与max-age的区别是s-maxage仅仅应用于共享缓存,而不引用于用户代理的本地缓存,s-maxage的优先级要高于max-age。

    .cache-extension:自顶以拓展相关指令

    1.1.2 Pragma//包含实现特定的指令

    参数

    no-cache:最常用,等同max-age效果。但是如果同时存在,则被Cache-Control的max-age覆盖。

    1.1.3 Date//表示时间,在新鲜的的时候会用到

    1.1.4 Connection

    Close:WEB服务器或者代理服务器在完成本次请求的响应后断开连接,不再等待后续请求

    Keepalive:WEB服务器或者代理服务器在完成本次请求的响应后保持连接,等待本次请求的后续请求

    Keep-Alive:在Keepalive的基础上添加了设定值,在设定值的期限类没有响应则断开连接

    1.1.5 Transfer-Encoding

    传输编码,它不但不会减少实体内容传输大小,甚至还会使传输变大,最新的 HTTP 规范里,只定义了一种传输编码:分块编码(chunked),分块编码在头部加入Transfer-Encoding: chunked,用

    于解决的问题,例如Content-Length 比实际长度短,会造成内容被截断;但是如果比实体内容长,会造成 pending,解决pending的方法是加入分块之后,每个分块包含十六进制的长度值和数据,长度值

    独占一行,长度不包括它结尾的 CRLF( ),也不包括分块数据结尾的 CRLF。最后一个分块长度值必须为 0,对应的分块数据没有内容,表示实体结束。

    1.1.6 Upgrade

    要求客户端升级到另一个高版本协议,例如Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

    1.2请求头

    1.2.1 Accept

    指定客户端能够接收的内容类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,例如:Accepttext/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8

    1.2.2 Accept-Charset

    用户指定客户端的字符集

    1.2.3 Accept-Encoding

    指定浏览器可以支持的web服务器返回内容压缩编码类型。例如:Accept-Encodinggzip, deflate, br

    1.2.4 Accept-Language

    浏览器可接受的语言, 例如Accept-Languagezh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

    1.2.5 Authorization

    HTTP授权的授权证书

    1.2.6 If-Match

    如果对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动作,Etag是属于HTTP 1.1属性,它是由服务器生成返回给前端,当你第一次发起HTTP请求时,服务器会返回一个Etag,并在第二次发起同一个请求时,客户端会同时发送一个If-None-Match,而它的值就是Etag的值,然后,服务器会比对这个客服端发送过来的Etag是否与服务器的相同,如果相同,就将If-None-Match的值设为false,返回状态为304,客户端继续使用本地缓存,不解析服务器返回的数据(这种场景服务器也不返回数据,因为服务器的数据没有变化),如果不相同,就将If-None-Match的值设为true,返回状态为200,客户端重新解析服务器返回的数据。Etag实体的唯一标识

    1.2.7 If-None-Match

    如果对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动作

    1.2.8 If-Modified-Since

    请求的对象在该头部指定的时间之后修改了才执行请求的动作(比如返回对象),否则返回代码304,告诉浏览器该对象没有修改。例如:If-Modified-Since:Thu, 10 Apr 2008 09:14:42 GMT

    1.2.9 If-Unmodified-Since

    如果请求的对象在该头部指定的时间之后没修改过,才执行请求的动作(比如返回对象)。

    1.2.10  If-Range

    如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体,参数也为Etag,总是跟 Range 头部一起使用。

    1.2.11 Range

    浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。例如:Range: bytes=1173546

    1.2.12 Proxy-Authenticate

    代理服务器响应浏览器,要求其提供代理身份验证信息。

    1.2.13 Proxy-Authorization

    浏览器响应代理服务器的身份验证请求,提供自己的身份信息。

    1.2.14 Host

    指定请求的服务器的域名和端口号,如Host:rss.sina.com.cn

    1.2.15 Referer

    浏览器向WEB 服务器表明自己是从哪个网页URL获得点击当前请求中的网址/URL,例如:Referer:http://www.ecdoer.com/,防盗链。

    1.2.16 User-Agent

    User-Agent的内容包含发出请求的用户信息,例如:User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0

    1.3响应头

    1.3.1 Access-Control-Allow-Origin

    指定哪些网站可以跨域源资源共享,例如:Access-Control-Allow-Origin: *

    1.3.2 Accept-Patch

    指定服务器所支持的文档补丁格式,例如:Accept-Patch: text/example;charset=utf-8

    1.3.3 Accept-Ranges

    服务器所支持的内容范围,Accept-Ranges: bytes

    1.3.4 Age

    响应对象在代理缓存中存在的时间,以秒为单位,例如 Age: 12

    1.3.5 Allow

    对于特定资源的有效动作,例如:Allow: GET, HEAD

    1.3.6 Content-Disposition

    对已知MIME类型资源的描述,浏览器可以根据这个响应头决定是对返回资源的动作,如:将其下载或是打开。例如:Content-Disposition: attachment; filename="fname.ext"

    1.3.7 Content-Encoding

    响应资源所使用的编码类型,例如:Content-Encoding: gzip

    1.3.8 Content-Language

    响应内容所使用的语言,例如:Content-Language: zh-cn

    1.3.9 Content-Length

    响应消息体的长度,用8进制字节表示,例如:Content-Length: 348

    1.3.10 Content-Location

    所返回的数据的一个候选位置,例如:Content-Location: /index.htm

    1.3.11 Content-Range

    如果是响应部分消息,表示属于完整消息的哪个部分,例如:Content-Range: bytes 100-200

    1.3.12 Content-Type

    当前内容的MIME类型,例如:Content-Type: text/html; charset=utf-8

    1.3.13 ETag

    对于某个资源的某个特定版本的一个标识符,通常是一个 消息散列

    1.3.14 Expires

    指定一个日期/时间,超过该时间则认为此回应已经过期,例如:Expires: Thu, 01 Dec 1994 16:00:00 GMT

    1.3.15 Last-Modified

    所请求的对象的最后修改日期(按照 RFC 7231 中定义的“超文本传输协议日期”格式来表示)

    1.3.16 Link

    用来表示与另一个资源之间的类型关系,此类型关系是在RFC 5988中定义,例如:Link: ; rel="alternate"

    1.3.17  Location 

    用于在进行重定向,或在创建了某个新资源时使用。 例如:Location: http://www.itbilu.com/nodejs

    1.3.18 P3P

    P3P策略相关设置

    1.3.19 Refresh

    用于重定向,或者当一个新的资源被创建时。默认会在5秒后刷新重定向,例如:Refresh: 5; url=http://itbilu.com

    1.3.20  Status

    通用网关接口的响应头字段,用来说明当前HTTP连接的响应状态,例如:Status: 200 OK

    1.3.21 Server

    服务器的名称,例如:Server: nginx/1.6.3

    1.3.22 Set-Cookie

    设置HTTP cookie,例如:Set-Cookie: UserID=itbilu; Max-Age=3600; Version=1

    1.3.23 Proxy-Authenticate

    要求在访问代理时提供身份认证信息。

    1.3.24 Public-Key-Pins

    用于防止中间攻击,声明网站认证中传输层安全协议的证书散列值

    2.状态码(常用)

    200 :客户端请求成功

    302 :临时跳转 ,通常的地址通过Location指定,重定向

    304:从缓存中读取数据,不从服务器重新获取数据。

    400:客户端请求有语法错误

    403:服务器收到请求,但是拒绝服务

    404:请求失败,请求所希望得到的资源未被在服务器上发现。

    405:请求行中指定的请求方法不能被用于请求相应的资源。

    500:内部错误

    完成请见:http://tools.jb51.net/table/http_status_code

    3.url(统一资源定位符)解析过程

    url—dns—ip

    4.dns域名解析过程

    首先查找的是浏览器缓存中是否有已经解析的域名地址,如果有,那么直接使用,这个域名解析过程结束,这个时间由ttl来设置,但是也受浏览器缓存大小的限制,缓存时间过长,ip地址变化找不到ip地址,导致域名不能正常解析,时间太短,那么导致每次访问网站都需要重新解析一次域名,如果在缓存中没有找到,那么会相应的在操作系统的缓存中选择是否有相应的解析ip地址解析结果,如果有那么久使用这个ip地址并返回,这里在以前的时候存在域名劫持,因为可以通过c:windowssystemsdriveretchosts 来指定一个解析的ip地址,win7后这个只能读而不能改,当然linux的配置文件/etc/name.conf中也可以修改达到同样的目的,当然也受到缓存时间的影响,假如前两个无法解决,那么会相应的发送到ldns(本地区的域名服务器,公司的服务器),这window下可以使用ipconfig查询,在linux下可以查相应的配置文件 /etc/resolv.conf  ,一般而言这个专门的域名解析性能都会比较好。一般会缓存域名解析的结果,也受缓存时间的控制,大约80%的域名解析都是在这里完成的,ldns主要承担了域名的解析工作,这里假如还是没有才会使用root server域名的解析工作,返回时一个逆过程,在dns解析的过程中主要在两个地方缓存结果,一个是ldns一个是本机,其中缓存控制是由缓存时间和缓存大小控制的,最大的缓存时间是ttl,ldns的缓存时间是我们很难由本地介入,本地的缓存可以使用 ipcongfig/flushdns,linux可以/etc/imit.d/nscd restart来清除缓存,当然在windows和linux下都可以使用nslookup来查看相应的解析结果

    5.Http请求的处理

    http发送一个请求,经过dns解析找到相应的ip,然后通过ajax等获取返回的信息,这些信息可能来自于数据库,分布式缓存(redis),或者是静态文件,当然假如需要提升加载图片等静态文件的时候,采用cdn(在用户和服务器之间架设缓存区,类似用户和数据库等之间架设的redis缓存),这里是在请求返回后发现没有某些数据然后再次发生http请求的方式获取cdn的数据

  • 相关阅读:
    css-box-shadowing
    css- :before :after
    css: line-height 与box-sizing
    金蝶数据库后台追踪
    钉钉审批开发,空白内容
    asp.net c#语言实现钉钉鉴权验证
    钉钉事件回调c#测试完成
    钉钉C#发起审批实例demo
    asp.net c#语言实现钉钉鉴权验证
    图片码
  • 原文地址:https://www.cnblogs.com/gg128/p/9786967.html
Copyright © 2020-2023  润新知