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/1902640886592892928.htm" title="变频器干扰诊断三步法:排查、定位、抑制详解" target="_blank">变频器干扰诊断三步法:排查、定位、抑制详解</a> <span class="text-muted">集思广益的灰太狼</span> <a class="tag" taget="_blank" href="/search/%E5%8F%98%E9%A2%91%E5%99%A8%E5%B9%B2%E6%89%B0%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/1.htm">变频器干扰解决方案</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a> <div>前言众所周知变频器(VFD-VariableFrequencyDrive)在工业控制领域应用非常的广泛,它通过调节电机的频率和电压来精确控制电机的转速和扭矩,来实现节能和精准控制。然而,变频器在工作过程中会产生各种电磁干扰(EMI-ElectromagneticInterference),这些干扰可能导致控制系统误动作、通信中断、测量仪表失准等一系列问题。今天我们将系统性地介绍变频器干扰的"三步诊</div> </li> <li><a href="/article/1902639752935436288.htm" title="【SoC基础】单片机之寄存器解析" target="_blank">【SoC基础】单片机之寄存器解析</a> <span class="text-muted">望闻问嵌</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/SoC/1.htm">SoC</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a> <div>:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】:文章若有幸对你有帮助,可点赞收藏⭐不迷路:内容若有错误,敬请留言指正!原创文,转载注明出处文章目录1、寄存器位置2、寄存器种类2.1通用用途寄存器2.2CPU执行相关寄存器2.3外设控制寄存器3.寄存器在CPU访问外设过程中起到的作用1、寄</div> </li> <li><a href="/article/1902639626712051712.htm" title="Day6:python面向对象编程——构建可扩展的订单管理系统" target="_blank">Day6:python面向对象编程——构建可扩展的订单管理系统</a> <span class="text-muted">weixin_44650422</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目标:掌握类与对象的核心概念,实现模块化的订单业务逻辑一、类与对象:订单管理系统核心1.基础订单类classOrder:"""订单基类"""def__init__(self,order_id,customer):self.order_id=order_id#订单号self.customer=customer#客户名self.items=[]#商品列表self.total=0.0#总金额defadd</div> </li> <li><a href="/article/1902638871112380416.htm" title="MySQL- 索引下推" target="_blank">MySQL- 索引下推</a> <span class="text-muted">青衫客36</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>索引下推(IndexConditionPushdown,简称ICP)是MySQL5.6引入的一项优化技术,它通过将部分查询条件“下推”到索引扫描阶段,从而减少不必要的行访问和回表操作,提高查询性能。1.索引下推的概念在传统的索引扫描过程中,MySQL会首先通过索引找到符合索引条件的记录,然后回表(即访问实际的表数据行)读取所需的列,最后再应用其他过滤条件(非索引条件)来判断这条记录是否符合查询要求</div> </li> <li><a href="/article/1902636857032765440.htm" title="什么时候用到jupyter notebook的NBConvert" target="_blank">什么时候用到jupyter notebook的NBConvert</a> <span class="text-muted">老光私享</span> <a class="tag" taget="_blank" href="/search/jupyter/1.htm">jupyter</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>JupyterNotebook的NBConvert功能是用来将JupyterNotebook文件转换为其他格式的工具。通常情况下,我们会用到NBConvert功能来将JupyterNotebook文件转换为HTML、LaTeX、PDF或其他文本格式。这样可以方便地将JupyterNotebook分享给他人,或者将其用于报告、文章、文档或其他写作目的。要使用NBConvert功能,需要在命令行中运行</div> </li> <li><a href="/article/1902636730704523264.htm" title="华为新系统鸿蒙手机8月发布,华为将发布鸿蒙手机操作新系统" target="_blank">华为新系统鸿蒙手机8月发布,华为将发布鸿蒙手机操作新系统</a> <span class="text-muted">许逸YIXU</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E6%96%B0%E7%B3%BB%E7%BB%9F%E9%B8%BF%E8%92%99%E6%89%8B%E6%9C%BA8%E6%9C%88%E5%8F%91%E5%B8%83/1.htm">华为新系统鸿蒙手机8月发布</a> <div>华为将发布鸿蒙手机操作新系统华为正式发布鸿蒙手机操作系统,6月2日晚,华为正式发布了HarmonyOS2.0,以及一系列搭载鸿蒙OS2操作系统的智能手机、智能手表和平板电脑。“万物互联时代,没有人会是一座孤岛。”华为将发布鸿蒙手机操作新系统1“万物互联时代,没有人会是一座孤岛。”6月2日的HarmonyOS2及华为全场景新品发布会上,华为常务董事、消费者业务CEO余承东如是说。HarmonyOS是</div> </li> <li><a href="/article/1902636729777582080.htm" title="【css酷炫效果】纯CSS实现球形阴影效果" target="_blank">【css酷炫效果】纯CSS实现球形阴影效果</a> <span class="text-muted">冰夏之夜影</span> <a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>【css酷炫效果】纯CSS实现球形阴影效果缘创作背景html结构css样式完整代码基础版进阶版(动态版)效果图想直接拿走的老板,链接放在这里:上传后更新缘创作随缘,不定时更新。创作背景刚看到csdn出活动了,赶时间,直接上代码,令人丧气的是:活动的领域有要求,不是发够就行,瞬间意志消沉。html结构css样式.button{background-image:url('a.gif');border-</div> </li> <li><a href="/article/1902636730276704256.htm" title="ASSERT函数" target="_blank">ASSERT函数</a> <span class="text-muted">weixin_34194359</span> <a class="tag" taget="_blank" href="/search/php/1.htm">php</a> <div>assert宏的原型定义在中,其作用是假设它的条件返回错误,则终止程序运行,原型定义:#includevoidassert(intexpression);assert的作用是现计算表达式expression,假设其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用abort来终止程序执行。http://www.chongtang.me/index.php/1419提高程序健壮性</div> </li> <li><a href="/article/1902636351883374592.htm" title="UNI-APP+VUE3+VITE+VSCode开发经验及填坑记录(持续更新ING)" target="_blank">UNI-APP+VUE3+VITE+VSCode开发经验及填坑记录(持续更新ING)</a> <span class="text-muted">集成显卡</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E8%B7%B5/1.htm">项目实践</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a> <div>uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。快速开发模板unibest:最好的uniapp开发框架,由uniapp+Vue3+Ts+Vite5+UnoCss+VSCode(可选webstorm)+uni插件+wot-ui(</div> </li> <li><a href="/article/1902636099755372544.htm" title="QT引用资源qrc" target="_blank">QT引用资源qrc</a> <span class="text-muted">我该叫什么名字好呢?</span> <a class="tag" taget="_blank" href="/search/QT%E5%BC%80%E5%8F%91/1.htm">QT开发</a><a class="tag" taget="_blank" href="/search/QT/1.htm">QT</a><a class="tag" taget="_blank" href="/search/qtcreator/1.htm">qtcreator</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91/1.htm">文本编辑</a><a class="tag" taget="_blank" href="/search/%E6%8E%A7%E4%BB%B6/1.htm">控件</a> <div>1.在工程文件夹下面添加一个文件夹,如images,保存图标文件.2.在工程那里新建一个qrc文件,右键选择文本编辑器打开添加如下语句:images/file_128.icoimages/open_128.icoimages/save_128.ico这样工程就能读取到这些资源,在要设置图标的控件的icon选项,选择资源文件,就可以使用图标了。3.假如是利用QTcreator编写的,那就比较简单,直</div> </li> <li><a href="/article/1902635596015267840.htm" title="sql与html" target="_blank">sql与html</a> <span class="text-muted">就很对</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a> <div>sql与htmlsqlite3sqlsql_callbacksql_dicthtmlhtml01ser02sersql_workhtml_ser03.htmlwebser06ser012.html011.html013.html015.html03.html04.html05.html06.htmlsqlite3sql//sqlite3_open//sqlite3_exec//sqlite3_cl</div> </li> <li><a href="/article/1902635469523447808.htm" title="MyBatis-Plus核心功能与实战案例" target="_blank">MyBatis-Plus核心功能与实战案例</a> <span class="text-muted">千层冷面</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>MyBatis-Plus核心功能与实战案例,代码示例基于SpringBoot3.x+MyBatis-Plus3.5.3:一、MyBatis-Plus基础篇1.简介与核心优势MyBatis-Plus(MP)是MyBatis的增强工具,在保留MyBatis原生功能的基础上,通过内置通用Mapper、Service、条件构造器等,大幅简化开发。核心优势:无侵入:只做增强不做改变,可与MyBatis原生功</div> </li> <li><a href="/article/1902635217303171072.htm" title="一文搞懂Nginx: 域名配置、SSL、HTTP转HTTPS" target="_blank">一文搞懂Nginx: 域名配置、SSL、HTTP转HTTPS</a> <span class="text-muted">千层冷面</span> <a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E7%B1%BB/1.htm">知识类</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/ssl/1.htm">ssl</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>本文将在Centos系统下详解Nginx服务器,从概念、下载、安装、编译、配置(含域名和证书)到启动。本文先讲Nginx如何使用,然后再谈概念。一、实践1.下载下载通常有2种方式:Centos自带的包管理工具、源码编译安装(推荐,拓展性强),本文使用源码编译安装的形式下载从Nginx官网(nginx.org)下载Nginx的源代码。亦可以使用wget命令或者浏览器下载后通过FTP等方式传输到服务器</div> </li> <li><a href="/article/1902634839295717376.htm" title="指令系统和计算机体系结构——一文解析冯·诺依曼架构" target="_blank">指令系统和计算机体系结构——一文解析冯·诺依曼架构</a> <span class="text-muted">点滴汇聚江河</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E8%80%83-%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E5%B8%88/1.htm">软考-软件设计师</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>文章目录一、核心思想二、核心组成部分1.中央处理器(CPU)2.内存(Memory)3.输入/输出(I/O)设备4.总线(Bus)三、工作流程四、冯·诺依曼架构的局限性五、现代计算机的改进1.流水线技术(Pipeline)关键机制2.高速缓存(Cache)关键机制3.多核CPU(Multi-Core)关键挑战与解决方案4.乱序执行(Out-of-OrderExecution)关键技术5.其他关键改</div> </li> <li><a href="/article/1902634710253760512.htm" title="Qt爬坑笔记" target="_blank">Qt爬坑笔记</a> <span class="text-muted">klzed_</span> <a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a> <div>1.自定义一个QWidget的派生类,将其作为子部件并设置样式表时,需要重写paintEvent事件,否则样式表可能无效,如下所示:voidCustomWidget::paintEvent(QPaintEvent*){QStyleOptionopt;opt.init(this);QPainterp(this);</div> </li> <li><a href="/article/1902634458041872384.htm" title="Jupyter文件转换-nbconvert命令行工具简介" target="_blank">Jupyter文件转换-nbconvert命令行工具简介</a> <span class="text-muted">madao10086+</span> <a class="tag" taget="_blank" href="/search/%E5%A5%87%E6%8A%80%E6%B7%AB%E5%B7%A7/1.htm">奇技淫巧</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>Jupyternbconvert简介前言安装使用查考前言jupyter这个格式使用起来确实很方便,但是有的时候需要将jupyter转换为其他的格式,用的比较方便的方式就是nbconvert这个工具,这里参考的是官网的教程,做一个记录,防止自己每次要转换文件的时候都忘记这个命令行。安装安装nbconvert很简单,直接一条命令行就可以了:#pippipinstallnbconvert#condaco</div> </li> <li><a href="/article/1902633702127628288.htm" title="【LeetCode 热题100】 23. 合并 K 个升序链表的算法思路及python代码" target="_blank">【LeetCode 热题100】 23. 合并 K 个升序链表的算法思路及python代码</a> <span class="text-muted">pljnb</span> <a class="tag" taget="_blank" href="/search/LeetCode%E7%83%AD%E9%A2%98100/1.htm">LeetCode热题100</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a> <div>23.合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例2:输入:lists=[</div> </li> <li><a href="/article/1902632439918948352.htm" title="【Leetcode刷题随笔】59 螺旋矩阵" target="_blank">【Leetcode刷题随笔】59 螺旋矩阵</a> <span class="text-muted">Poor_DayDreamer</span> <a class="tag" taget="_blank" href="/search/leetcode%E6%95%B0%E7%BB%84%E7%AF%87/1.htm">leetcode数组篇</a><a class="tag" taget="_blank" href="/search/Medium/1.htm">Medium</a><a class="tag" taget="_blank" href="/search/Tag/1.htm">Tag</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%9F%A9%E9%98%B5/1.htm">矩阵</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>1.题目描述给定一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的nxn正方形矩阵matrix。可结合以下原题链接阅读。原题链接:59螺旋矩阵2.解题思路本题为模拟矩阵填充过程,不需要设计算法,只要完成正确的填充过程即可。首先初始化一个nxn的二维矩阵(涉及到动态内存分配),从矩阵左上角开始往顺时针填充,关键在于填充的转角处不要重复填充,所以对于每条边都要遵循严格的统一规则,</div> </li> <li><a href="/article/1902632442167095296.htm" title="【Leetcode刷题随笔】203移除链表元素" target="_blank">【Leetcode刷题随笔】203移除链表元素</a> <span class="text-muted">Poor_DayDreamer</span> <a class="tag" taget="_blank" href="/search/leetcode%E9%93%BE%E8%A1%A8%E7%AF%87/1.htm">leetcode链表篇</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>1.题目描述题意:删除链表中等于给定值val的所有节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head=[7,7,7,7],val=7输出:[]原题链接:203移除链表元素2.解题思路由于链表本身的性质,移除链表的某个节点a,只需要将前一个节点的next指针指向a的下一个节点即可</div> </li> <li><a href="/article/1902632443123396608.htm" title="【知识图谱】开发经验记录:CORS(跨域资源共享)问题" target="_blank">【知识图谱】开发经验记录:CORS(跨域资源共享)问题</a> <span class="text-muted">niuuuu16</span> <a class="tag" taget="_blank" href="/search/%E5%9F%BA%E4%BA%8E%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1%E7%9A%84%E6%99%BA%E8%83%BD%E5%8A%A9%E6%95%99%E7%B3%BB%E7%BB%9F/1.htm">基于知识图谱的智能助教系统</a><a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1/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/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a> <div>尝试前后端交互时出现了这样的报错:AccesstoXMLHttpRequestat'http://localhost:8080/api/courses'fromorigin'http://localhost:8081'hasbeenblockedbyCORSpolicy:No'Access-Control-Allow-Origin'headerispresentontherequestedreso</div> </li> <li><a href="/article/1902632313313882112.htm" title="【Leetcode刷题随笔】844 比较含退格的字符串" target="_blank">【Leetcode刷题随笔】844 比较含退格的字符串</a> <span class="text-muted">Poor_DayDreamer</span> <a class="tag" taget="_blank" href="/search/%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0%E7%AF%87/1.htm">移除元素篇</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%AF%87/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/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>1.题目描述给定s和t两个字符串,比较s和t是否在删除所有由#字符表示的退格操作后相等。退格操作会删除其前面(不包括#本身)的一个字符,如果前面没有字符则忽略该#。如果字符串的末尾有多个退格符,它们会相互抵消,直到没有退格符剩余或者所有字符都被删除。示例1:输入:s=“ab#c”,t=“ad#c”输出:true解释:s和t都会变成“ac”,因为#前面的b和d都被删除。示例2:输入:s=“ab##”</div> </li> <li><a href="/article/1902632186947891200.htm" title="【Leetcode刷题随笔】2765最长交替子数组" target="_blank">【Leetcode刷题随笔】2765最长交替子数组</a> <span class="text-muted">Poor_DayDreamer</span> <a class="tag" taget="_blank" href="/search/leetcode%E6%95%B0%E7%BB%84%E7%AF%87/1.htm">leetcode数组篇</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/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>1.题目描述:该题目标是在一个整数数组nums中寻找最长的“交替子数组”。这种交替子数组的特点是:其元素按照“递增1,递减1,递增1…”的模式循环排列,且子数组的长度必须大于1,例如数组nums=[2,3,4,3,4],交替子数组有[2,3],[3,4],[3,4,3]和[3,4,3,4]。最长的子数组为[3,4,3,4],长度为4。详细题目描述见原题:原题。2.1解题思路一(双层循环):这道题有</div> </li> <li><a href="/article/1902632060707729408.htm" title="含光热电站、有机有机朗肯循环、P2G的综合能源优化调度(Matlab代码实现)" target="_blank">含光热电站、有机有机朗肯循环、P2G的综合能源优化调度(Matlab代码实现)</a> <span class="text-muted">创新优化代码学习</span> <a class="tag" taget="_blank" href="/search/%E8%83%BD%E6%BA%90/1.htm">能源</a><a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>‍个人主页欢迎来到本博客❤️❤️博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。本文目录如下:目录1概述含光热电站、有机朗肯循环与P2G的综合能源优化调度研究一、技术基础与系统作用二、多技术协同机制三、优化调度模型构建四、典型案例与仿真分析五、未来研究方向结论2运行结果3参考文献4Matlab代码实现1概述光热发电(concentratingsolarp</div> </li> <li><a href="/article/1902631807359184896.htm" title="LeetCode刷题笔记" target="_blank">LeetCode刷题笔记</a> <span class="text-muted">小李李李李腊八</span> <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/java/1.htm">java</a> <div>leetcode_01两数之和斐波那契数列三个数最大乘积反转链表x的平方根环形列表LeetCode随笔两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。暴力法记录下数组第一个数值,对数组进行循环,将之后的值</div> </li> <li><a href="/article/1902631551993180160.htm" title="PyCharm的终端(terminal)中进入指定conda虚拟环境" target="_blank">PyCharm的终端(terminal)中进入指定conda虚拟环境</a> <span class="text-muted">我不是程序员‍</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/1.htm">软件开发工作基础知识</a><a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a><a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>参考这篇博文:PyCharm的终端(terminal)中进入指定conda虚拟环境_pycharm配置conda终端-CSDN博客</div> </li> <li><a href="/article/1902630921958387712.htm" title="MySQL请求处理全流程深度解析:从SQL语句到数据返回" target="_blank">MySQL请求处理全流程深度解析:从SQL语句到数据返回</a> <span class="text-muted">longdong7889</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a> <div>MySQL请求处理全流程深度解析:从SQL语句到数据返回一、MySQL架构全景图MySQL采用经典的C/S架构和分层设计,其核心模块协同工作流程如下:客户端连接管理器查询解析器查询优化器执行引擎存储引擎磁盘存储各层核心职责:连接层:管理客户端连接、权限验证服务层:SQL解析、优化、内置函数实现存储引擎层:数据存储与索引管理(如InnoDB)文件系统层:日志文件、数据文件存储二、请求处理七步详解步骤</div> </li> <li><a href="/article/1902630039657181184.htm" title="本地源代码运行bun install时报错" target="_blank">本地源代码运行bun install时报错</a> <span class="text-muted">星火燎猿</span> <a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/%E7%96%91%E9%9A%BE%E6%9D%82%E7%97%87%E5%A4%84%E7%90%86%E6%96%B9%E6%A1%88/1.htm">疑难杂症处理方案</a><a class="tag" taget="_blank" href="/search/Bun/1.htm">Bun</a><a class="tag" taget="_blank" href="/search/Bun.js/1.htm">Bun.js</a> <div>最近使用Ubuntu系统运行Bun的时候报,Failedtospawnscriptinstallduetoerroros.linux.errno.generic.E.PERMPERM的错误,查看官方文档也没有这个错误描述,最终找到解决方案进行分享。报错问题如下:errorloadingcurrentdirectoryInstalling[2637/2230]error:failedtospawnl</div> </li> <li><a href="/article/1902629032411852800.htm" title="关于HAL库STM32中断接收丢失第一个字节的问题" target="_blank">关于HAL库STM32中断接收丢失第一个字节的问题</a> <span class="text-muted">隔夜秀才</span> <a class="tag" taget="_blank" href="/search/STM32/1.htm">STM32</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a> <div>被HAL库中断接收丢失首字节的这个问题折磨了四天了,今天终于解决了,觉得有必要记录一下。问题是这样的:刚开始上电后,用串口助手给串口1发送一帧数据(有帧头帧尾的),正常接收,继续发送,也正常接收,之后当串口4中断接收数据完成后,再用串口助手给串口1发送一帧数据的时候,发现首字节会丢失无法接收到,如果不让串口4进中断接收,就不会这样。网上搜罗查阅了很多资料,什么RXNE、ORE、TC问题都试过了,一</div> </li> <li><a href="/article/1902627267939463168.htm" title="table点击行事件,且点击行高亮" target="_blank">table点击行事件,且点击行高亮</a> <span class="text-muted">爱吃玉米的兔子</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/elementui/1.htm">elementui</a> <div>consttableData=[{id:1,date:"2025-03-20",name:"Tom",},{id:2,date:"2025-03-21",name:"Hom",},{id:3,date:"2025-03-22",name:"Rem",},];constselectedRow=ref(null);//储存选中的行//点击行操作事件constrowChange=(row)=>{sele</div> </li> <li><a href="/article/1902626385713754112.htm" title="大数据最新大数据StarRocks(七):数据表创建(2)" target="_blank">大数据最新大数据StarRocks(七):数据表创建(2)</a> <span class="text-muted">2401_84182271</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/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>2.1表分为内部表和外部表默认未内部表,3.0版本开始集成外部数据建议使用catalog,外部表的建表方式将被弃用2.2列定义语法:col_namecol_type[agg_type][NULL|NOTNULL][DEFAULT"default\_value"][AUTO_INCREMENT][ASgeneration_expr]col_name:列名称注意,在一般情况下,不能直接创建以以__op</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>