HTTP格式解析

一、HTTP请求格式      

       做过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干。HTTP协议传输的消息也是这样规定的,每一个HTTP包都分为HTTP头和HTTP体两部分,消息体是可选的,而消息头是必须的。每当我们打开一个网页,在上面点击右键,选择“查看源文件”,这时看到的HTML代码就是HTTP的消息体,那么消息头可以通过浏览器的开发工具或者插件可以看到,如果火狐的Firebug,IE的Httpwatch。

      客户端通过发送 HTTP 请求向服务器请求对资源的访问。 它向服务器传递了一个数据块,也就是请求信息,HTTP 请求由三部分组成:请求行、  请求头和请求正文。

  (1)、请求行:请求方法 URI 协议/版本

  (2)、请求头(Request Header)

 (3)、 请求正文

下面是一个HTTP请求的数据:

POST /index.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
 
username=aa&password=1234
 

1、请求行:请求方法URI协议/版本

 请求的第一行是“方法 URL  协议/版本”,并以 回车换行作为结尾。请求行以空格分隔。格式如下:
POST /index.php HTTP/1.1
以上代码中“POST”代表请求方法,“/index.php”表示URI,“HTTP/1.1代表协议和协议的版本。
        根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。
         URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。   

请求方法

在 HTTP 协议中,HTTP 请求可以使用多种请求方法,这些方法指明了要以何种方式来访问 Request-URI 所标识的资源。HTTP1.1 支持的请求方法如下表所示:

HTTP1.1 中的请求方式:
方法 作用
GET 请求获取由 Request-URI 所标识的资源
POST 请求服务器接收在请求中封装的实体,并将其作为由 Request-Line 中的 Request-URI 所标识的资源的一部分
HEAD 请求获取由 Request-URI 所标识的资源的响应消息报头
PUT

请求服务器存储一个资源,并用 Request-URI 作为其标识符

DELETE 请求服务器删除由 Request-URI 所标识的资源
TRACE 请求服务器回送到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
 

重点介绍 GET、POST 和 HEAD 三个方法:

(1)GET

        GET 方法用于获取由 Request-URI 所标识的资源的信息,常见的形式是:

        GET Request-URI HTTP/1.1
        GET方法是默认的HTTP请求方法,例如当我们通过在浏览器的地址栏中直接输入网址的方式去访问网页的时候,浏览器采用的就是 GET 方法向服务器获取资源。

        我们可以使用GET方法来提交表单数据,用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如:
         Http://localhost/login.php?username=aa&password=1234

        从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大。这是因为浏览器对url的长度有限制

       各种浏览器也会对url的长度有所限制,下面是几种常见浏览器的url长度限制:(单位:字符)

IE : 2803
Firefox:65536
Chrome:8182
Safari:80000
Opera:190000 

(2)POST

          POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。 在请求头信息结束之后的两个回车换行之后(实际是空一行),就是表单提交的数据。如上面提到的post表单数据:

        username=aa&password=1234

        POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。

  从编程的角度来讲,如果用户通过GET方法提交数据,则数据存放在QUERY_STRING环境变量中,而POST方法提交的数据则可以从标准输入流中获取。

 

 GET与POST方法有以下区别:

      1、  在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放在HTTP包的body中。

      2、 GET方式提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST则没有此限制。

      3、安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。

      4.、服务器取值方式不一样。GET方式取值,如php可以使用$_GET来取得变量的值,而POST方式通过$_POST来获取变量的值。

 

(3)HEAD

     HEAD 方法与 GET 方法几乎是相同的,它们的区别在于 HEAD 方法只是请求消息报头,而不是完整的内容。对于 HEAD 请求的回应部分来说,它的 HTTP 头部中包含的信息与通过 GET 请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到 Request-URI 所标识的资源的信息。这个方法通常被用于测试超链接的有效性,是否可以访问,以及最近是否更新。

    要注意的是,在 HTML 文档中,书写 get 和 post,大小写都可以,但在 HTTP 协议中的 GET 和 POST 只能是大写形式。

2. 请求头

每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

HTTP最常见的请求头如下:

Transport 头域

Connection:

作用:表示是否需要持久连接。

如果服务器看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,服务器需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小;

例如: Connection: keep-alive   当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的  网页,会继续使用这一条已经建立的连接

例如:  Connection: close  代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,  当客户端再次发送Request,需要重新建立TCP连接。

Host(发送请求时,该报头域是必需的)

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。

eg:http://;localhost/index.html
浏览器发送的请求消息中,就会包含Host请求报头域,如下:
Host:
localhost

此处使用缺省端口号80,若指定了端口号8080,则变成:Host:localhost:8080

Client 头域

Accept:

作用:浏览器可以接受的媒体类型(MIME类型),

例如:  Accept: text/html  代表浏览器可以接受服务器回发的类型为 text/html  也就是我们常说的html文档, 如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)。

通配符 * 代表任意类型。例如  Accept: */*  代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)

Accept-Encoding:

作用: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);

例如: Accept-Encoding: gzip, deflate。Server能够向支持gzip/deflate的浏览器返回经gzip或者deflate编码的HTML页面。 许多情形下这可以减少5到10倍的下载时间,也节省带宽。

Accept-Language:

作用: 浏览器申明自己接收的语言。 

语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等;

例如: Accept-Language:zh-cn 。如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

User-Agent:

作用:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.

我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上, 服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)

Accept-Charset:

作用:浏览器申明自己接收的字符集,这就是本文前面介绍的各种字符集和字符编码,如gb2312,utf-8(通常我们说Charset包括了相应的字符编码方案);

例如:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。

Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中;

Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

Cookie/Login 头域

Cookie:

作用: 最重要的header, 将cookie的值发送给HTTP 服务器

Entity头域

Content-Length

作用:发送给HTTP服务器数据的长度。即请求消息正文的长度;

例如: Content-Length: 38

Content-Type:

作用:

例如:Content-Type: application/x-www-form-urlencoded

Miscellaneous 头域

Referer:

作用: 提供了Request的上下文信息的服务器,告诉服务器我是从哪个链接过来的,比如从我主页上链接到一个朋友那里, 他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问    他的网站。

例如: Referer:http://translate.google.cn/?hl=zh-cn&tab=wT

Cache 头域

If-Modified-Since:

作用: 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。

例如:If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT。

If-None-Match:

作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag.  使用这样的机制将提高网站的性能

例如: If-None-Match: "03f2b33c0bfcc1:0"

Pragma:

作用: 防止页面被缓存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一样

Pargma只有一个用法, 例如: Pragma: no-cache

注意: 在HTTP/1.0版本中,只实现了Pragema:no-cache, 没有实现Cache-Control

Cache-Control:

作用: 这个是非常重要的规则。 这个用来指定Response-Request遵循的缓存机制。各个指令含义如下

Cache-Control:Public   可以被任何缓存所缓存()

Cache-Control:Private     内容只缓存到私有缓存中

Cache-Control:no-cache  所有内容都不会被缓存

二、 HTTP响应格式      

      在接收和解释请求消息后,服务器会返回一个 HTTP 响应消息。与 HTTP 请求类似,HTTP 响应也是由三个部分组成,分别是:状态行、消息报头和响应正文。如:

HTTP/1.1 200 OK Date: Sun, 17 Mar 2013 08:12:54 GMT Server: Apache/2.2.8 (Win32) PHP/5.2.5 X-Powered-By: PHP/5.2.5 Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Length: 4393 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=utf-8

HTTP响应示例<title> </head> <body> Hello HTTP! </body> </html></p><p> </p></pre> <h3 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:1.7em;"> <span style="color:rgb(51,51,255);">1、状态行</span></h3> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <span></span>       状态行由协议版本、数字形式的状态代码,及相应的状态描述组成,各元素之间以空格分隔,结尾时回车换行符,格式如下:</p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <span></span>HTTP-Version Status-Code Reason-Phrase CRLF</p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <span></span>HTTP-Version 表示服务器 HTTP 协议的版本,Status-Code 表示服务器发回的响应代码,Reason-Phrase 表示状态代码的文本描述,CRLF 表示回车换行。例如:</p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <span></span>HTTP/1.1 200 OK (CRLF)</p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <span>      状态代码与状态描述</span></p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <span></span>      状态代码由 3 位数字组成, 表示请求是否被理解或被满足,状态描述给出了关于状态码的简短的文字描述。状态码的第一个数字定义了响应类别,后面两位数字没有具体分类。第一个数字有 5 种取值,如下所示。</p> <ul style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <li style="list-style:disc;">1xx:指示信息——表示请求已经接受,继续处理</li> <li style="list-style:disc;">2xx:成功——表示请求已经被成功接收、理解、接受。</li> <li style="list-style:disc;">3xx:重定向——要完成请求必须进行更进一步的操作</li> <li style="list-style:disc;">4xx:客户端错误——请求有语法错误或请求无法实现</li> <li style="list-style:disc;">5xx:服务器端错误——服务器未能实现合法的请求。</li> </ul> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> 常见状态代码、状态描述、说明:<br> 200 OK      //客户端请求成功<br> 400 Bad Request  //客户端请求有语法错误,不能被服务器所理解<br> 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 <br> 403 Forbidden  //服务器收到请求,但是拒绝提供服务<br> 404 Not Found  //请求资源不存在,eg:输入了错误的URL<br> 500 Internal Server Error //服务器发生不可预期的错误<br> 503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常</p> <h3 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:1.7em;"> <span style="color:rgb(51,51,255);">2、响应正文</span></h3> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> 响应正文就是服务器返回的资源的内容,响应头和正文之间也必须用空行分隔<span style="font-size:12pt;">。如:</span></p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <span style="font-size:12pt;"></span></p> <div class="dp-highlighter bg_html" style="overflow:auto;font-family:Consolas, 'Courier New', Courier, mono, serif;border:1px dashed rgb(153,153,153);color:rgb(51,51,51);line-height:26px;"> <div class="bar"> <div class="tools" style="font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:rgb(192,192,192);border-left:3px solid rgb(108,226,108);border-right:1px solid rgb(231,229,220);"> <span>[html]</span>  view plain <span class="tracking-ad"> copy</span> <div style="width:16px;z-index:99;"> </div> <div style="z-index:99;"></div> <span class="tracking-ad"> </span> </div> </div> <ol start="1" class="dp-xml" style="border:none;color:rgb(92,92,92);"> <li class="alt" style="list-style:outside;border:none;color:inherit;line-height:13.2px;"> <span style="border:none;color:rgb(0,0,0);"><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;"><</span><span class="tag-name" style="font-weight:bold;border:none;color:rgb(153,51,0);">html</span><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;">></span><span style="border:none;">  </span></span></li> <li style="list-style:outside;border:none;line-height:13.2px;"> <span style="border:none;color:rgb(0,0,0);"><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;"><</span><span class="tag-name" style="font-weight:bold;border:none;color:rgb(153,51,0);">head</span><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;">></span><span style="border:none;">  </span></span></li> <li class="alt" style="list-style:outside;border:none;color:inherit;line-height:13.2px;"> <span style="border:none;color:rgb(0,0,0);"><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;"><</span><span class="tag-name" style="font-weight:bold;border:none;color:rgb(153,51,0);">title</span><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;">></span><span style="border:none;">HTTP响应示例</span><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;"><</span><span class="tag-name" style="font-weight:bold;border:none;color:rgb(153,51,0);">title</span><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;">></span><span style="border:none;">  </span></span></li> <li style="list-style:outside;border:none;line-height:13.2px;"> <span style="border:none;color:rgb(0,0,0);"><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;"></</span><span class="tag-name" style="font-weight:bold;border:none;color:rgb(153,51,0);">head</span><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;">></span><span style="border:none;">  </span></span></li> <li class="alt" style="list-style:outside;border:none;color:inherit;line-height:13.2px;"> <span style="border:none;color:rgb(0,0,0);"><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;"><</span><span class="tag-name" style="font-weight:bold;border:none;color:rgb(153,51,0);">body</span><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;">></span><span style="border:none;">  </span></span></li> <li style="list-style:outside;border:none;line-height:13.2px;"> <span style="border:none;color:rgb(0,0,0);">Hello HTTP!  </span></li> <li class="alt" style="list-style:outside;border:none;color:inherit;line-height:13.2px;"> <span style="border:none;color:rgb(0,0,0);"><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;"></</span><span class="tag-name" style="font-weight:bold;border:none;color:rgb(153,51,0);">body</span><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;">></span><span style="border:none;">  </span></span></li> <li style="list-style:outside;border:none;line-height:13.2px;"> <span style="border:none;color:rgb(0,0,0);"><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;"></</span><span class="tag-name" style="font-weight:bold;border:none;color:rgb(153,51,0);">html</span><span class="tag" style="font-weight:bold;color:rgb(153,51,0);border:none;">></span><span style="border:none;">  </span></span></li> </ol> </div> <h3 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:1.7em;"> <span style="color:rgb(51,51,255);">3 、响应头信息</span></h3> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <span style="font-size:16px;"><span style="font-size:12px;">HTTP最常见的响应头如下所示:</span></span></p> <h4 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:14px;"> Cache头域</h4> <blockquote style="border-left:5px solid rgb(238,238,238);color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <p style="font-size:17.5px;line-height:1.25;"> <span>Date:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用:生成消息的具体时间和日期,即当前的GMT时间。</p> <p style="font-size:17.5px;line-height:1.25;"> 例如: Date: Sun, 17 Mar 2013 08:12:54 GMT</p> <p style="font-size:17.5px;line-height:1.25;"> <span>Expires:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用: 浏览器会在指定过期时间内使用本地缓存,指明应该在什么时候认为文档已经过期,从而不再缓存它。</p> <p style="font-size:17.5px;line-height:1.25;"> 例如: Expires: Thu, 19 Nov 1981 08:52:00 GMT  </p> <p style="font-size:17.5px;line-height:1.25;"> <span>Vary</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用:</p> <p style="font-size:17.5px;line-height:1.25;"> 例如: Vary: Accept-Encoding</p> </blockquote> <h4 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:14px;"> Cookie/Login 头域</h4> <blockquote style="border-left:5px solid rgb(238,238,238);color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <p style="font-size:17.5px;line-height:1.25;"> <span>P3P</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用: 用于跨域设置Cookie, 这样可以解决iframe跨域访问cookie的问题</p> <p style="font-size:17.5px;line-height:1.25;"> 例如: P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR</p> <p style="font-size:17.5px;line-height:1.25;"> <span>Set-Cookie</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用: 非常重要的header, 用于把cookie 发送到客户端浏览器, 每一个写入cookie都会生成一个Set-Cookie.</p> <p style="font-size:17.5px;line-height:1.25;"> 例如: Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/</p> </blockquote> <h4 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:14px;"> Entity实体头域:</h4> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <span>            实体内容的属性,包括实体信息类型,长度,压缩方法,最后一次修改时间,数据有效性等。</span></p> <blockquote style="border-left:5px solid rgb(238,238,238);color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <p style="font-size:17.5px;line-height:1.25;"> <span>ETag:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用:  和If-None-Match 配合使用。 (实例请看上节中If-None-Match的实例)</p> <p style="font-size:17.5px;line-height:1.25;"> 例如: ETag: "03f2b33c0bfcc1:0"</p> <p style="font-size:17.5px;line-height:1.25;"> <span>Last-Modified:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用: 用于指示资源的最后修改日期和时间。(实例请看上节的If-Modified-Since的实例)</p> <p style="font-size:17.5px;line-height:1.25;"> 例如: Last-Modified: Wed, 21 Dec 2011 09:09:10 GMT</p> <p style="font-size:17.5px;line-height:1.25;"> <span>Content-Type:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用:WEB服务器告诉浏览器自己响应的对象的类型和字符集,</p> <p style="font-size:17.5px;line-height:1.25;"> 例如:</p> <p style="font-size:17.5px;line-height:1.25;">         Content-Type: text/html; charset=utf-8</p> <p style="font-size:17.5px;line-height:1.25;">   Content-Type:text/html;charset=GB2312</p> <p style="font-size:17.5px;line-height:1.25;">   Content-Type: image/jpeg</p> <p style="font-size:17.5px;line-height:1.25;"> <span>Content-Length:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 指明实体正文的长度,以字节方式存储的十进制数字来表示。在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一股脑儿地发给客户端。</p> <p style="font-size:17.5px;line-height:1.25;">   例如: Content-Length: 19847</p> <p style="font-size:17.5px;line-height:1.25;"> <span>Content-Encoding:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用:文档的编码(Encode)方法。一般是压缩方式。</p> <p style="font-size:17.5px;line-height:1.25;"> WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。利用gzip压缩文档能够显著地减少HTML文档的下载时间。</p> <p style="font-size:17.5px;line-height:1.25;"> 例如:Content-Encoding:gzip</p> <p style="font-size:17.5px;line-height:1.25;"> <span>Content-Language:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用: WEB服务器告诉浏览器自己响应的对象的语言者</p> <p style="font-size:17.5px;line-height:1.25;"> 例如: Content-Language:da</p> </blockquote> <h4 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:14px;"> Miscellaneous 头域</h4> <blockquote style="border-left:5px solid rgb(238,238,238);color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <p style="font-size:17.5px;line-height:1.25;"> <span>Server:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用:指明HTTP服务器的软件信息</p> <p style="font-size:17.5px;line-height:1.25;"> 例如:Apache/2.2.8 (Win32) PHP/5.2.5</p> <p style="font-size:17.5px;line-height:1.25;"> <span>X-Powered-By:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用:表示网站是用什么技术开发的</p> <p style="font-size:17.5px;line-height:1.25;"> 例如: X-Powered-By: PHP/5.2.5</p> </blockquote> <h4 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:14px;"> Transport头域</h4> <blockquote style="border-left:5px solid rgb(238,238,238);color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <p style="font-size:17.5px;line-height:1.25;"> <span>Connection:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 例如: Connection: keep-alive   当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接</p> <p style="font-size:17.5px;line-height:1.25;"> 例如:  Connection: close  代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。</p> </blockquote> <h4 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:14px;"> Location头域</h4> <blockquote style="border-left:5px solid rgb(238,238,238);color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <p style="font-size:17.5px;line-height:1.25;"> <span>Location:</span></p> <p style="font-size:17.5px;line-height:1.25;"> 作用: 用于重定向一个新的位置, 包含新的URL地址</p> <p style="font-size:17.5px;line-height:1.25;"> 实例请看304状态实例</p> </blockquote> <span style="color:rgb(51,51,255);font-size:22px;line-height:36px;font-family:Arial;">三、 补充</span> <span style="color:rgb(69,69,69);font-family:'PingFang SC', 'Microsoft YaHei', SimHei, Arial, SimSun;font-size:16px;"></span> <blockquote style="border-left:5px solid rgb(238,238,238);color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;"> <p style="font-size:17.5px;line-height:1.25;"> </p> </blockquote> <h3 style="font-family:Arial;font-weight:100;line-height:26px;color:rgb(51,51,51);font-size:1.7em;"> <span>HTTP协议是无状态的和Connection: keep-alive的区别</span></h3> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;">   无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。</p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;">   HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。</p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;">   从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。</p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;">   Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。</p> <p style="color:rgb(69,69,69);font-family:Arial;font-size:14px;line-height:26px;"> <span style="color:rgb(75,75,75);font-family:Helvetica, Tahoma, Arial, sans-serif;line-height:21px;">  由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的</span><span style="font-family:Helvetica, Tahoma, Arial, sans-serif;line-height:21px;"><span style="color:rgb(255,0,0);">在线状态</span></span><span style="color:rgb(75,75,75);font-family:Helvetica, Tahoma, Arial, sans-serif;line-height:21px;">,需要不断地向服务器发起连接请求。通常 的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道 客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开</span><br></p> <p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;">  </p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1288454449496399872"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(linux,c/c++,http)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950233451282100224.htm" title="python 读excel每行替换_Python脚本操作Excel实现批量替换功能" target="_blank">python 读excel每行替换_Python脚本操作Excel实现批量替换功能</a> <span class="text-muted">weixin_39646695</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%AF%BBexcel%E6%AF%8F%E8%A1%8C%E6%9B%BF%E6%8D%A2/1.htm">读excel每行替换</a> <div>Python脚本操作Excel实现批量替换功能大家好,给大家分享下如何使用Python脚本操作Excel实现批量替换。使用的工具Openpyxl,一个处理excel的python库,处理excel,其实针对的就是WorkBook,Sheet,Cell这三个最根本的元素~明确需求原始excel如下我们的目标是把下面excel工作表的sheet1表页A列的内容“替换我吧”批量替换为B列的“我用来替换的</div> </li> <li><a href="/article/1950233072825856000.htm" title="三菱PLC全套学习资料及应用手册" target="_blank">三菱PLC全套学习资料及应用手册</a> <span class="text-muted">good2know</span> <div>本文还有配套的精品资源,点击获取简介:三菱PLC作为工业自动化领域的核心设备,其系列产品的学习和应用需要全面深入的知识。本次资料包为学习者提供从基础到进阶的全方位学习资源,包括各种型号PLC的操作手册、编程指南、软件操作教程以及实际案例分析,旨在帮助用户系统掌握PLC的编程语言、指令系统及在各类工业应用中的实施。1.三菱PLC基础知识入门1.1PLC的基本概念可编程逻辑控制器(PLC)是工业自动化</div> </li> <li><a href="/article/1950232820773351424.htm" title="移动端城市区县二级联动选择功能实现包" target="_blank">移动端城市区县二级联动选择功能实现包</a> <span class="text-muted">good2know</span> <div>本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery</div> </li> <li><a href="/article/1950232316974526464.htm" title="(二)SAP Group Reporting (GR) 核心子模块功能及数据流向架构解析" target="_blank">(二)SAP Group Reporting (GR) 核心子模块功能及数据流向架构解析</a> <span class="text-muted"></span> <div>数据如何从子公司流转到合并报表的全过程,即数据采集→合并引擎→报表输出,特别是HANA内存计算如何优化传统ETL瓶颈。SAPGroupReporting(GR)核心模块功能及数据流向的架构解析,涵盖核心组件、数据处理流程和关键集成点,适用于S/4HANA1809+版本:一、核心功能模块概览模块功能关键事务码/FioriApp数据采集(DataCollection)整合子公司财务数据(SAP/非SA</div> </li> <li><a href="/article/1950231513744338944.htm" title="IK分词" target="_blank">IK分词</a> <span class="text-muted">初心myp</span> <div>实现简单的分词功能,智能化分词添加依赖配置:4.10.4org.apache.lucenelucene-core${lucene.version}org.apache.lucenelucene-analyzers-common${lucene.version}org.apache.lucenelucene-queryparser${lucene.version}org.apache.lucenel</div> </li> <li><a href="/article/1950230804957294592.htm" title="SpringMVC执行流程(原理),通俗易懂" target="_blank">SpringMVC执行流程(原理),通俗易懂</a> <span class="text-muted">国服冰</span> <a class="tag" taget="_blank" href="/search/SpringMVC/1.htm">SpringMVC</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a> <div>SpringMVC执行流程(原理),通俗易懂一、图解SpringMVC流程二、进一步理解Springmvc的执行流程1、导入依赖2、建立展示的视图3、web.xml4、spring配置文件springmvc-servlet5、Controller6、tomcat配置7、访问的url8、视图页面一、图解SpringMVC流程图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提</div> </li> <li><a href="/article/1950230678201233408.htm" title="centos7出现 bash: ip: command not found" target="_blank">centos7出现 bash: ip: command not found</a> <span class="text-muted">微信圈</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a> <div>centos7出现bash:ip:commandnotfoundyum-yinstallinitscripts</div> </li> <li><a href="/article/1950230678696161280.htm" title="C++ 计数排序、归并排序、快速排序" target="_blank">C++ 计数排序、归并排序、快速排序</a> <span class="text-muted">每天搬一点点砖</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>计数排序:是一种基于哈希的排序算法。他的基本思想是通过统计每个元素的出现次数,然后根据统计结果将元素依次放入排序后的序列中。这种排序算法适用于范围较小的情况,例如整数范围在0到k之间计数排序步骤:1初始化一个长度为最大元素值加1的计数数组,所有元素初始化为02遍历原始数组,将每个元素值作为索引,在计数数组中对应位置加13将数组清空4遍历计数器数组,按照数组中的元素个数放回到元数组中计数排序的优点和</div> </li> <li><a href="/article/1950229040682037248.htm" title="48. 旋转图像 - 力扣(LeetCode)" target="_blank">48. 旋转图像 - 力扣(LeetCode)</a> <span class="text-muted">Fiee-77</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a> <div>题目:给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例2:输入:matrix=[[5,1,9,11],[2,4,8,10],[13,3,6,</div> </li> <li><a href="/article/1950228158863175680.htm" title="英伟达靠什么支撑起了4万亿?AI泡沫还能撑多久?" target="_blank">英伟达靠什么支撑起了4万亿?AI泡沫还能撑多久?</a> <span class="text-muted"></span> <div>英伟达市值突破4万亿美元,既是AI算力需求爆发的直接体现,也暗含市场对未来的狂热预期。其支撑逻辑与潜在风险并存,而AI泡沫的可持续性则取决于技术、商业与地缘政治的复杂博弈。⚙️一、英伟达4万亿市值的核心支撑因素技术垄断与生态壁垒硬件优势:英伟达GPU在AI训练市场占有率超87%,H100芯片的FP16算力达1979TFLOPS,领先竞品3-5倍。CUDA生态:400万开发者构建的软件护城河,成为A</div> </li> <li><a href="/article/1950228031117258752.htm" title="深入解析JVM工作原理:从字节码到机器指令的全过程" target="_blank">深入解析JVM工作原理:从字节码到机器指令的全过程</a> <span class="text-muted"></span> <div>一、JVM概述Java虚拟机(JVM)是Java平台的核心组件,它实现了Java"一次编写,到处运行"的理念。JVM是一个抽象的计算机器,它有自己的指令集和运行时内存管理机制。JVM的主要职责:加载:读取.class文件并验证其正确性存储:管理内存分配和垃圾回收执行:解释或编译字节码为机器指令安全:提供沙箱环境限制恶意代码二、JVM架构详解JVM由三个主要子系统组成:1.类加载子系统类加载过程分为</div> </li> <li><a href="/article/1950228031524106240.htm" title="Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程" target="_blank">Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程</a> <span class="text-muted">倾听铃的声</span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet处理请求的过程的源码解析。本文是第二篇:DispatcherServlet处理请求的过程的源码解析。@pdaiSpring进阶-SpringMVC实现原理之DispatcherServlet处理请求的</div> </li> <li><a href="/article/1950227023859347456.htm" title="Linux系统配置(应用程序)" target="_blank">Linux系统配置(应用程序)</a> <span class="text-muted">1风天云月</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F/1.htm">应用程序</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85/1.htm">编译安装</a><a class="tag" taget="_blank" href="/search/rpm/1.htm">rpm</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a> <div>目录前言一、应用程序概述1、命令与程序的关系2、程序的组成3、软件包封装类型二、RPM1、RPM概述2、RPM用法三、编译安装1、解包2、配置3、编译4、安装5、启用httpd服务结语前言在Linux中的应用程序被视为将软件包安装到系统中后产生的各种文档,其中包括可执行文件、配置文件、用户手册等内容,这些文档被组织为一个有机的整体,为用户提供特定的功能,因此对于“安装软件包”与“安装应用程序”这两</div> </li> <li><a href="/article/1950227023192453120.htm" title="MotionLCM 部署优化 踩坑解决bug" target="_blank">MotionLCM 部署优化 踩坑解决bug</a> <span class="text-muted">AI算法网奇</span> <a class="tag" taget="_blank" href="/search/aigc%E4%B8%8E%E6%95%B0%E5%AD%97%E4%BA%BA/1.htm">aigc与数字人</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%AE%9D%E5%85%B8/1.htm">深度学习宝典</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E7%94%9Fmotion/1.htm">文生motion</a> <div>目录依赖项windowstorchok:渲染黑白图问题解决:humanml3d:sentence-t5-large下载数据:报错:Nomodulenamed'sentence_transformers'继续报错:fromtransformers.integrationsimportCodeCarbonCallback解决方法:推理相关转mesh:module‘matplotlib.cm‘hasno</div> </li> <li><a href="/article/1950226770049429504.htm" title="【C++算法】76.优先级队列_前 K 个高频单词" target="_blank">【C++算法】76.优先级队列_前 K 个高频单词</a> <span class="text-muted">流星白龙</span> <a class="tag" taget="_blank" href="/search/%E4%BC%98%E9%80%89%E7%AE%97%E6%B3%95C%2B%2B/1.htm">优选算法C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>文章目录题目链接:题目描述:解法C++算法代码:题目链接:692.前K个高频单词题目描述:解法利用堆来解决TopK问题预处理一下原始的字符串数组,用一个哈希表统计一下每一个单词出现的频次。创建一个大小为k的堆频次:小根堆字典序(频次相同的时候):大根堆循环让元素依次进堆判断提取结果C++算法代码:classSolution{//定义类型别名,PSI表示对typedefpairPSI;//自定义比较</div> </li> <li><a href="/article/1950226643771518976.htm" title="关于流媒体播放器EasyPlayer和EasyPlayerPro的介绍以及其区别" target="_blank">关于流媒体播放器EasyPlayer和EasyPlayerPro的介绍以及其区别</a> <span class="text-muted">EasyDarwin</span> <a class="tag" taget="_blank" href="/search/EasyDarwin/1.htm">EasyDarwin</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/ar/1.htm">ar</a> <div>EasyPlayer是一款流媒体播放器系列项目,它支持多种流媒体协议的播放,包括但不限于RTSP、RTMP、HTTP、HLS、UDP、RTP、File等。除此之外,EasyPlayer还支持本地文件播放和多种功能特性,包括本地抓拍、本地录像、播放旋转、多屏播放、倍数播放等。EasyPlayer核心基于ffmpeg,稳定、高效、可靠、可控。随着多年的不断发展和迭代,EasyPlayer基于成功的实践</div> </li> <li><a href="/article/1950226517397139456.htm" title="JVM 内存模型深度解析:原子性、可见性与有序性的实现" target="_blank">JVM 内存模型深度解析:原子性、可见性与有序性的实现</a> <span class="text-muted">练习时长两年半的程序员小胡</span> <a class="tag" taget="_blank" href="/search/JVM/1.htm">JVM</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%89%96%E6%9E%90%EF%BC%9A%E4%BB%8E%E9%9D%A2%E8%AF%95%E8%80%83%E7%82%B9%E5%88%B0%E7%94%9F%E4%BA%A7%E5%AE%9E%E8%B7%B5/1.htm">深度剖析:从面试考点到生产实践</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/1.htm">内存模型</a> <div>在了解了JVM的基础架构和类加载机制后,我们需要进一步探索Java程序在多线程环境下的内存交互规则。JVM内存模型(JavaMemoryModel,JMM)定义了线程和主内存之间的抽象关系,它通过规范共享变量的访问方式,解决了多线程并发时的数据一致性问题。本文将从内存模型的核心目标出发,详解原子性、可见性、有序性的实现机制,以及volatile、synchronized等关键字在其中的作用。一、J</div> </li> <li><a href="/article/1950226137909096448.htm" title="互信息:理论框架、跨学科应用与前沿进展" target="_blank">互信息:理论框架、跨学科应用与前沿进展</a> <span class="text-muted">大千AI助手</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/OTHER/1.htm">OTHER</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%92%E4%BF%A1%E6%81%AF/1.htm">互信息</a><a class="tag" taget="_blank" href="/search/%E9%A6%99%E5%86%9C/1.htm">香农</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E4%BF%A1/1.htm">通信</a><a class="tag" taget="_blank" href="/search/%E9%9A%8F%E6%9C%BA%E5%8F%98%E9%87%8F/1.htm">随机变量</a> <div>1.起源与核心定义互信息(MutualInformation,MI)由克劳德·香农(ClaudeShannon)在1948年开创性论文《AMathematicalTheoryofCommunication》中首次提出,该论文奠定了现代信息论的基础。互信息用于量化两个随机变量之间的统计依赖关系,定义为:若已知一个随机变量的取值,能为另一个随机变量提供的信息量。数学上,对于离散随机变量XXX和YYY,</div> </li> <li><a href="/article/1950225381961297920.htm" title="SpringMVC的执行流程" target="_blank">SpringMVC的执行流程</a> <span class="text-muted"></span> <div>1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,</div> </li> <li><a href="/article/1950225255079407616.htm" title="企业级区块链平台Hyperchain核心原理剖析" target="_blank">企业级区块链平台Hyperchain核心原理剖析</a> <span class="text-muted">boyedu</span> <a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%8C%BA%E5%9D%97%E9%93%BE%E5%B9%B3%E5%8F%B0/1.htm">企业级区块链平台</a><a class="tag" taget="_blank" href="/search/Hyperchain/1.htm">Hyperchain</a> <div>Hyperchain作为国产自主可控的企业级联盟区块链平台,其核心原理围绕高性能共识、隐私保护、智能合约引擎及可扩展架构展开,通过多模块协同实现企业级区块链网络的高效部署与安全运行。以下从核心架构、关键技术、性能优化、安全机制、应用场景五个维度展开剖析:一、核心架构:分层解耦与模块化设计Hyperchain采用分层架构,将区块链功能解耦为独立模块,支持灵活组合与扩展:P2P网络层由验证节点(VP)</div> </li> <li><a href="/article/1950224877067759616.htm" title="车载刷写架构 --- 整车刷写中为何增加了ECU 队列刷写策略?" target="_blank">车载刷写架构 --- 整车刷写中为何增加了ECU 队列刷写策略?</a> <span class="text-muted">汽车电子实验室</span> <a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E7%94%B5%E5%99%A8%E6%9E%B6%E6%9E%84%E2%80%94%E2%80%94%E5%88%B7%E5%86%99%E6%96%B9%E6%A1%88/1.htm">电子电器架构——刷写方案</a><a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%BD%BD%E7%94%B5%E5%AD%90%E7%94%B5%E6%B0%94%E6%9E%B6%E6%9E%84/1.htm">车载电子电气架构</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%BD%BD%E8%AF%8A%E6%96%AD%E8%BF%9B%E9%98%B6%E7%AF%87/1.htm">车载诊断进阶篇</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6%E4%B8%AD%E5%A4%AE%E6%8E%A7%E5%88%B6%E5%8D%95%E5%85%83HPC%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84/1.htm">汽车中央控制单元HPC软件架构</a><a class="tag" taget="_blank" href="/search/%E5%85%B3%E4%BA%8E%E7%BD%91%E5%85%B3%E8%BD%AC%E5%8F%91%E6%80%A7%E8%83%BD%E5%BC%95%E8%B5%B7%E7%9A%84%E6%80%9D%E8%80%83/1.htm">关于网关转发性能引起的思考</a> <div>我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧!旧人不知我近况,新人不知我过往,近况不该旧人知,过往不与新人讲。纵你阅人何其多,再无一人恰似我。时间不知不觉中,来到新的一年。2025开始新的忙碌。成年人的我也不知道去哪里渡</div> </li> <li><a href="/article/1950224872688906240.htm" title="车载诊断架构 ---面向售后的DTC应该怎么样填写?" target="_blank">车载诊断架构 ---面向售后的DTC应该怎么样填写?</a> <span class="text-muted">汽车电子实验室</span> <a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%BD%BD%E7%94%B5%E5%AD%90%E7%94%B5%E6%B0%94%E6%9E%B6%E6%9E%84/1.htm">车载电子电气架构</a><a class="tag" taget="_blank" href="/search/%E6%BC%AB%E8%B0%88UDS%E8%AF%8A%E6%96%AD%E5%8D%8F%E8%AE%AE%E7%B3%BB%E5%88%97/1.htm">漫谈UDS诊断协议系列</a><a class="tag" taget="_blank" href="/search/EV%EF%BC%88%E7%94%B5%E5%8A%A8%E6%B1%BD%E8%BD%A6%EF%BC%89%E5%B8%B8%E8%A7%84%E7%9F%A5%E8%AF%86%E5%BF%85%E5%A4%87/1.htm">EV(电动汽车)常规知识必备</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E5%90%91%E5%94%AE%E5%90%8E%E7%9A%84DTC/1.htm">面向售后的DTC</a><a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%BD%BD%E8%AF%8A%E6%96%AD%E6%9E%B6%E6%9E%84/1.htm">车载诊断架构</a><a class="tag" taget="_blank" href="/search/OEM%E6%80%8E%E4%B9%88%E6%8E%8C%E6%8F%A1%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E8%83%BD%E5%8A%9B/1.htm">OEM怎么掌握软件开发能力</a><a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%BD%BD%E9%80%9A%E4%BF%A1%E7%BD%91%E7%BB%9C%E6%A7%AA%E8%BF%B0/1.htm">车载通信网络槪述</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/ZEVonUDS-J1979/1.htm">ZEVonUDS-J1979</a> <div>我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身边有这样灵性的人,一定要好好珍惜他们眼中有神有光,干净,给人感觉很舒服,有超强的感知能力有形的无形的感知力很强,能感知人的内心变化喜欢独处,好静,</div> </li> <li><a href="/article/1950224639502381056.htm" title="2018-09-27 aop相关" target="_blank">2018-09-27 aop相关</a> <span class="text-muted">蒋超_58dc</span> <div>1.静态织入,需要使用aspectj专用的compilermaven工程可以采用:https://www.mojohaus.org/aspectj-maven-plugin/2.动态织入,配合spring,创建代理来执行3.</div> </li> <li><a href="/article/1950224490331959296.htm" title="通义万相2.2:开启高清视频生成新纪元" target="_blank">通义万相2.2:开启高清视频生成新纪元</a> <span class="text-muted">Liudef06小白</span> <a class="tag" taget="_blank" href="/search/%E7%89%B9%E6%AE%8A%E4%B8%93%E6%A0%8F/1.htm">特殊专栏</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E4%B9%89%E4%B8%87%E7%9B%B82.2/1.htm">通义万相2.2</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E7%94%9F%E8%A7%86%E9%A2%91/1.htm">图生视频</a> <div>通义万相2.2:开启高清视频生成新纪元2025年7月28日,中国AI领域迎来里程碑时刻——通义万相团队正式开源其革命性视频生成模型Wan2.2的核心权重,这标志着开源社区首次获得支持720P高清视频生成的先进模型架构。一、架构革新:混合专家系统1.1MoE视频扩散架构通义万相2.2首次将混合专家(MoE)架构引入视频扩散模型,通过双专家系统实现计算效率与模型容量的平衡:classMoEVideoD</div> </li> <li><a href="/article/1950223497875746816.htm" title="最新阿里四面面试真题46道:面试技巧+核心问题+面试心得" target="_blank">最新阿里四面面试真题46道:面试技巧+核心问题+面试心得</a> <span class="text-muted">风平浪静如码</span> <div>前言做技术的有一种资历,叫做通过了阿里的面试。这些阿里Java相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐。希望对大家帮助,祝面试成功,有个更好的职业规划。一,阿里常见技术面1、微信红包怎么实现。2、海量数据分析。3、测试职位问的线程安全和非线程安全。4、HTTP2.0、thrift。5、面试电话沟通可能先让自我介绍。6、分布式事务一致性。7、ni</div> </li> <li><a href="/article/1950223356833886208.htm" title="CentOS容器没有ip addr命令" target="_blank">CentOS容器没有ip addr命令</a> <span class="text-muted">BLZxiaopang</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a> <div>centos容器没有ip命令[root@Centos/]#ipadd-bash:ip:commandnotfound[root@Centos/]#yum-yinstallinitscripts</div> </li> <li><a href="/article/1950222852074565632.htm" title="2025年SDK游戏盾终极解析:重新定义手游安全的“隐形护甲”" target="_blank">2025年SDK游戏盾终极解析:重新定义手游安全的“隐形护甲”</a> <span class="text-muted">上海云盾商务经理杨杨</span> <a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a> <div>副标题:从客户端加密到AI反外挂,拆解全链路防护如何重塑游戏攻防天平引言:当传统高防在手游战场“失效”2025年全球手游市场规模突破$2000亿,黑客单次攻击成本却降至$30——某SLG游戏因协议层CC攻击单日流失37%玩家,某开放世界游戏遭低频DDoS瘫痪6小时损失千万。传统高防IP的致命短板暴露无遗:无法识别伪造客户端流量、难防协议篡改、误杀率超15%。而集成于游戏终端的SDK游戏盾,正以“源</div> </li> <li><a href="/article/1950222723200380928.htm" title="LVS+Keepalived实现高可用和负载均衡" target="_blank">LVS+Keepalived实现高可用和负载均衡</a> <span class="text-muted">2401_84412895</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/lvs/1.htm">lvs</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>2、开启网卡子接口配置VIP[root@a~]#cd/etc/sysconfig/network-scripts/[root@anetwork-scripts]#cp-aifcfg-ens32ifcfg-ens32:0[root@anetwork-scripts]#catifcfg-ens32:0BOOTPROTO=staticDEVICE=ens32:0ONBOOT=yesIPADDR=10.1</div> </li> <li><a href="/article/1950222345163567104.htm" title="深入理解汇编语言子程序设计与系统调用" target="_blank">深入理解汇编语言子程序设计与系统调用</a> <span class="text-muted">网安spinage</span> <a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80/1.htm">汇编语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96/1.htm">汇编</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>本文将全面解析汇编语言中子程序设计的核心技术以及系统调用的实现方法,涵盖参数传递的多种方式、堆栈管理、API调用等关键知识点,并提供实际案例演示。一、子程序设计:参数传递的艺术1.寄存器传参:高效简洁.386.modelflat,stdcalloptioncasemap:none.dataxdd5;定义变量ydd6sumdd?.code;函数定义:addxy1addxy1procpushebpmo</div> </li> <li><a href="/article/1950220571119775744.htm" title="md5加密" target="_blank">md5加密</a> <span class="text-muted">落地成佛</span> <div>using(MD5md5=MD5.Create()){byte[]byteHash=md5.ComputeHash(System.Text.Encoding.Default.GetBytes(s));stringstrRes=BitConverter.ToString(byteHash).Replace("-","");returnstrRes.ToUpper();}</div> </li> <li><a href="/article/64.htm" title="关于旗正规则引擎中的MD5加密问题" target="_blank">关于旗正规则引擎中的MD5加密问题</a> <span class="text-muted">何必如此</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/MD5/1.htm">MD5</a><a class="tag" taget="_blank" href="/search/%E8%A7%84%E5%88%99/1.htm">规则</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%AF%86/1.htm">加密</a> <div>一般情况下,为了防止个人隐私的泄露,我们都会对用户登录密码进行加密,使数据库相应字段保存的是加密后的字符串,而非原始密码。 在旗正规则引擎中,通过外部调用,可以实现MD5的加密,具体步骤如下: 1.在对象库中选择外部调用,选择“com.flagleader.util.MD5”,在子选项中选择“com.flagleader.util.MD5.getMD5ofStr({arg1})”; 2.在规</div> </li> <li><a href="/article/191.htm" title="【Spark101】Scala Promise/Future在Spark中的应用" target="_blank">【Spark101】Scala Promise/Future在Spark中的应用</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Promise/1.htm">Promise</a> <div>Promise和Future是Scala用于异步调用并实现结果汇集的并发原语,Scala的Future同JUC里面的Future接口含义相同,Promise理解起来就有些绕。等有时间了再仔细的研究下Promise和Future的语义以及应用场景,具体参见Scala在线文档:http://docs.scala-lang.org/sips/completed/futures-promises.html</div> </li> <li><a href="/article/318.htm" title="spark sql 访问hive数据的配置详解" target="_blank">spark sql 访问hive数据的配置详解</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/spark+sql/1.htm">spark sql</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/thriftserver/1.htm">thriftserver</a> <div>spark sql 能够通过thriftserver 访问hive数据,默认spark编译的版本是不支持访问hive,因为hive依赖比较多,因此打的包中不包含hive和thriftserver,因此需要自己下载源码进行编译,将hive,thriftserver打包进去才能够访问,详细配置步骤如下:   1、下载源码   2、下载Maven,并配置 此配置简单,就略过</div> </li> <li><a href="/article/445.htm" title="HTTP 协议通信" target="_blank">HTTP 协议通信</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E4%BF%A1/1.htm">通信</a> <div>                        一:简介  HTTPCLIENT,通过JAVA基于HTTP协议进行点与点间的通信!     二: 代码举例      测试类: import java</div> </li> <li><a href="/article/572.htm" title="java unix时间戳转换" target="_blank">java unix时间戳转换</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>把java时间戳转换成unix时间戳: Timestamp appointTime=Timestamp.valueOf(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())) SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:m</div> </li> <li><a href="/article/699.htm" title="web报表工具FineReport常用函数的用法总结(报表函数)" target="_blank">web报表工具FineReport常用函数的用法总结(报表函数)</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/web%E6%8A%A5%E8%A1%A8/1.htm">web报表</a><a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a> <div>说明:本次总结中,凡是以tableName或viewName作为参数因子的。函数在调用的时候均按照先从私有数据源中查找,然后再从公有数据源中查找的顺序。   CLASS CLASS(object):返回object对象的所属的类。   CNMONEY CNMONEY(number,unit)返回人民币大写。 number:需要转换的数值型的数。 unit:单位,</div> </li> <li><a href="/article/826.htm" title="java jni调用c++ 代码 报错" target="_blank">java jni调用c++ 代码 报错</a> <span class="text-muted">墙头上一根草</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/jni/1.htm">jni</a> <div># # A fatal error has been detected by the Java Runtime Environment: # #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000777c3290, pid=5632, tid=6656 # # JRE version: Java(TM) SE Ru</div> </li> <li><a href="/article/953.htm" title="Spring中事件处理de小技巧" target="_blank">Spring中事件处理de小技巧</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Spring+%E6%95%99%E7%A8%8B/1.htm">Spring 教程</a><a class="tag" taget="_blank" href="/search/Spring+%E5%AE%9E%E4%BE%8B/1.htm">Spring 实例</a><a class="tag" taget="_blank" href="/search/Spring+%E5%85%A5%E9%97%A8/1.htm">Spring 入门</a><a class="tag" taget="_blank" href="/search/Spring3/1.htm">Spring3</a> <div>Spring 中提供一些Aware相关de接口,BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,其中最常用到de匙ApplicationContextAware.实现ApplicationContextAwaredeBean,在Bean被初始后,将会被注入 Applicati</div> </li> <li><a href="/article/1080.htm" title="linux shell ls脚本样例" target="_blank">linux shell ls脚本样例</a> <span class="text-muted">annan211</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux+ls%E6%BA%90%E7%A0%81/1.htm">linux ls源码</a><a class="tag" taget="_blank" href="/search/linux+%E6%BA%90%E7%A0%81/1.htm">linux 源码</a> <div> #! /bin/sh - #查找输入文件的路径 #在查找路径下寻找一个或多个原始文件或文件模式 # 查找路径由特定的环境变量所定义 #标准输出所产生的结果 通常是查找路径下找到的每个文件的第一个实体的完整路径 # 或是filename :not found 的标准错误输出。 #如果文件没有找到 则退出码为0 #否则 即为找不到的文件个数 #语法 pathfind [--</div> </li> <li><a href="/article/1207.htm" title="List,Set,Map遍历方式 (收集的资源,值得看一下)" target="_blank">List,Set,Map遍历方式 (收集的资源,值得看一下)</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/set/1.htm">set</a><a class="tag" taget="_blank" href="/search/Map%E9%81%8D%E5%8E%86%E6%96%B9%E5%BC%8F/1.htm">Map遍历方式</a> <div>List特点:元素有放入顺序,元素可重复 Map特点:元素按键值对存储,无放入顺序 Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) List接口有三个实现类:LinkedList,ArrayList,Vector LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身</div> </li> <li><a href="/article/1334.htm" title="解决SimpleDateFormat的线程不安全问题的方法" target="_blank">解决SimpleDateFormat的线程不安全问题的方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8/1.htm">线程安全</a> <div>在Java项目中,我们通常会自己写一个DateUtil类,处理日期和字符串的转换,如下所示: public class DateUtil01 { private SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public void format(Date d</div> </li> <li><a href="/article/1461.htm" title="http请求测试实例(采用fastjson解析)" target="_blank">http请求测试实例(采用fastjson解析)</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95/1.htm">测试</a> <div>        在实际开发中,我们经常会去做http请求的开发,下面则是如何请求的单元测试小实例,仅供参考。 import java.util.HashMap; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import </div> </li> <li><a href="/article/1588.htm" title="【RPC框架Hessian三】Hessian 异常处理" target="_blank">【RPC框架Hessian三】Hessian 异常处理</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hessian/1.htm">hessian</a> <div>RPC异常处理概述   RPC异常处理指是,当客户端调用远端的服务,如果服务执行过程中发生异常,这个异常能否序列到客户端?   如果服务在执行过程中可能发生异常,那么在服务接口的声明中,就该声明该接口可能抛出的异常。   在Hessian中,服务器端发生异常,可以将异常信息从服务器端序列化到客户端,因为Exception本身是实现了Serializable的</div> </li> <li><a href="/article/1715.htm" title="【日志分析】日志分析工具" target="_blank">【日志分析】日志分析工具</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90/1.htm">日志分析</a> <div>1. 网站日志实时分析工具 GoAccess http://www.vpsee.com/2014/02/a-real-time-web-log-analyzer-goaccess/ 2. 通过日志监控并收集 Java 应用程序性能数据(Perf4J) http://www.ibm.com/developerworks/cn/java/j-lo-logforperf/ 3.log.io 和</div> </li> <li><a href="/article/1842.htm" title="nginx优化加强战斗力及遇到的坑解决" target="_blank">nginx优化加强战斗力及遇到的坑解决</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+%E4%BC%98%E5%8C%96/1.htm">nginx 优化</a> <div>   先说遇到个坑,第一个是负载问题,这个问题与架构有关,由于我设计架构多了两层,结果导致会话负载只转向一个。解决这样的问题思路有两个:一是改变负载策略,二是更改架构设计。    由于采用动静分离部署,而nginx又设计了静态,结果客户端去读nginx静态,访问量上来,页面加载很慢。解决:二者留其一。最好是保留apache服务器。      来以下优化:       </div> </li> <li><a href="/article/1969.htm" title="java-50-输入两棵二叉树A和B,判断树B是不是A的子结构" target="_blank">java-50-输入两棵二叉树A和B,判断树B是不是A的子结构</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>思路来自: http://zhedahht.blog.163.com/blog/static/25411174201011445550396/ import ljn.help.*; public class HasSubtree { /**Q50. * 输入两棵二叉树A和B,判断树B是不是A的子结构。 例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一</div> </li> <li><a href="/article/2096.htm" title="mongoDB 备份与恢复" target="_blank">mongoDB 备份与恢复</a> <span class="text-muted">开窍的石头</span> <a class="tag" taget="_blank" href="/search/mongDB%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D/1.htm">mongDB备份与恢复</a> <div>Mongodb导出与导入 1: 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的. 所以,都有如下通用选项: -h host   主机 --port port    端口 -u username 用户名 -p passwd   密码 2: mongoexport 导出json格式的文件 </div> </li> <li><a href="/article/2223.htm" title="[网络与通讯]椭圆轨道计算的一些问题" target="_blank">[网络与通讯]椭圆轨道计算的一些问题</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>      如果按照中国古代农历的历法,现在应该是某个季节的开始,但是由于农历历法是3000年前的天文观测数据,如果按照现在的天文学记录来进行修正的话,这个季节已经过去一段时间了。。。。。       也就是说,还要再等3000年。才有机会了,太阳系的行星的椭圆轨道受到外来天体的干扰,轨道次序发生了变</div> </li> <li><a href="/article/2350.htm" title="软件专利如何申请" target="_blank">软件专利如何申请</a> <span class="text-muted">cuiyadll</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E4%B8%93%E5%88%A9/1.htm">软件专利</a><a class="tag" taget="_blank" href="/search/%E7%94%B3%E8%AF%B7/1.htm">申请</a> <div>软件技术可以申请软件著作权以保护软件源代码,也可以申请发明专利以保护软件流程中的步骤执行方式。专利保护的是软件解决问题的思想,而软件著作权保护的是软件代码(即软件思想的表达形式)。例如,离线传送文件,那发明专利保护是如何实现离线传送文件。基于相同的软件思想,但实现离线传送的程序代码有千千万万种,每种代码都可以享有各自的软件著作权。申请一个软件发明专利的代理费大概需要5000-8000申请发明专利可</div> </li> <li><a href="/article/2477.htm" title="Android学习笔记" target="_blank">Android学习笔记</a> <span class="text-muted">darrenzhu</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>1.启动一个AVD 2.命令行运行adb shell可连接到AVD,这也就是命令行客户端 3.如何启动一个程序   am start -n package name/.activityName   am start -n com.example.helloworld/.MainActivity 启动Android设置工具的命令如下所示: # am start -</div> </li> <li><a href="/article/2604.htm" title="apache虚拟机配置,本地多域名访问本地网站" target="_blank">apache虚拟机配置,本地多域名访问本地网站</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a> <div>现在假定你有两个目录,一个存在于 /htdocs/a,另一个存在于 /htdocs/b 。 现在你想要在本地测试的时候访问 www.freeman.com 对应的目录是 /xampp/htdocs/freeman ,访问 www.duchengjiu.com 对应的目录是 /htdocs/duchengjiu。 1、首先修改C盘WINDOWS\system32\drivers\etc目录下的 </div> </li> <li><a href="/article/2731.htm" title="yii2 restful web服务[速率限制]" target="_blank">yii2 restful web服务[速率限制]</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a> <div>速率限制 为防止滥用,你应该考虑增加速率限制到您的API。 例如,您可以限制每个用户的API的使用是在10分钟内最多100次的API调用。 如果一个用户同一个时间段内太多的请求被接收, 将返回响应状态代码 429 (这意味着过多的请求)。 要启用速率限制, [[yii\web\User::identityClass|user identity class]] 应该实现 [[yii\filter</div> </li> <li><a href="/article/2858.htm" title="Hadoop2.5.2安装——单机模式" target="_blank">Hadoop2.5.2安装——单机模式</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hadoop%E5%8D%95%E6%9C%BA%E9%83%A8%E7%BD%B2/1.htm">hadoop单机部署</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2185414 一、概述        Hadoop有三种模式 单机模式、伪分布模式和完全分布模式,这里先简单介绍单机模式 ,默认情况下,Hadoop被配置成一个非分布式模式,独立运行JAVA进程,适合开始做调试工作。   二、下载地址 Hadoop 网址http:</div> </li> <li><a href="/article/2985.htm" title="LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构" target="_blank">LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构</a> <span class="text-muted">gundumw100</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>一切为了快速迭代 import java.util.ArrayList; import org.json.JSONObject; import android.animation.ObjectAnimator; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayo</div> </li> <li><a href="/article/3112.htm" title="三道简单的前端HTML/CSS题目" target="_blank">三道简单的前端HTML/CSS题目</a> <span class="text-muted">ini</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E9%A2%98%E7%9B%AE/1.htm">题目</a> <div>使用CSS为多个网页进行相同风格的布局和外观设置时,为了方便对这些网页进行修改,最好使用( )。http://hovertree.com/shortanswer/bjae/7bd72acca3206862.htm   在HTML中加入<table style=”color:red; font-size:10pt”>,此为( )。http://hovertree.com/s</div> </li> <li><a href="/article/3239.htm" title="overrided方法编译错误" target="_blank">overrided方法编译错误</a> <span class="text-muted">kane_xie</span> <a class="tag" taget="_blank" href="/search/override/1.htm">override</a> <div> 问题描述: 在实现类中的某一或某几个Override方法发生编译错误如下: Name clash: The method put(String) of type XXXServiceImpl has the same erasure as put(String) of type XXXService but does not override it   当去掉@Over</div> </li> <li><a href="/article/3366.htm" title="Java中使用代理IP获取网址内容(防IP被封,做数据爬虫)" target="_blank">Java中使用代理IP获取网址内容(防IP被封,做数据爬虫)</a> <span class="text-muted">mcj8089</span> <a class="tag" taget="_blank" href="/search/%E5%85%8D%E8%B4%B9%E4%BB%A3%E7%90%86IP/1.htm">免费代理IP</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%90%86IP/1.htm">代理IP</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%88%AC%E8%99%AB/1.htm">数据爬虫</a><a class="tag" taget="_blank" href="/search/JAVA%E8%AE%BE%E7%BD%AE%E4%BB%A3%E7%90%86IP/1.htm">JAVA设置代理IP</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E5%B0%81IP/1.htm">爬虫封IP</a> <div>推荐两个代理IP网站:   1. 全网代理IP:http://proxy.goubanjia.com/   2. 敲代码免费IP:http://ip.qiaodm.com/   Java语言有两种方式使用代理IP访问网址并获取内容,   方式一,设置System系统属性   // 设置代理IP System.getProper</div> </li> <li><a href="/article/3493.htm" title="Nodejs Express 报错之 listen EADDRINUSE" target="_blank">Nodejs Express 报错之 listen EADDRINUSE</a> <span class="text-muted">qiaolevip</span> <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a><a class="tag" taget="_blank" href="/search/%E7%BA%B5%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">纵观千象</a> <div>当你启动 nodejs服务报错: >node app Express server listening on port 80 events.js:85 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at exports._errnoException (</div> </li> <li><a href="/article/3620.htm" title="C++中三种new的用法" target="_blank">C++中三种new的用法</a> <span class="text-muted">_荆棘鸟_</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/new/1.htm">new</a> <div>转载自:http://news.ccidnet.com/art/32855/20100713/2114025_1.html 作者: mt 其一是new operator,也叫new表达式;其二是operator new,也叫new操作符。这两个英文名称起的也太绝了,很容易搞混,那就记中文名称吧。new表达式比较常见,也最常用,例如: string* ps = new string("</div> </li> <li><a href="/article/3747.htm" title="Ruby深入研究笔记1" target="_blank">Ruby深入研究笔记1</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/Ruby/1.htm">Ruby</a> <div>module是可以定义private方法的 module MTest def aaa puts "aaa" private_method end private def private_method puts "this is private_method" end end </div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>