首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

HTTP请求头详解

  • 23-09-22 20:03
  • 3423
  • 10373
blog.csdn.net

HTTP由两部分组成:请求和响应。当你在Web浏览器中输入一个URL时,浏览器将根据你的要求创建并发送请求,该请求包含所输入的URL以及一些与浏览器本身相关的信息。当服务器收到这个请求时将返回一个响应,该响应包括与该请求相关的信息以及位于指定URL(如果有的话)的数据。直到浏览器解析该响应并显示出网页(或其他资源)为止。

HTTP请求

HTTP请求的格式如下所示:




[]

在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。

在HTTP中,定义了多种请求类型,通常我们关心的只有GET请求和POST请求。只要在Web浏览器上输入一个URL,浏览器就将基于该URL向服务器发送一个GET请求,以告诉服务器获取并返回什么资源。对于www.baidu.com的GET请求如下所示:

GET / HTTP/1.1
Host: 
www.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive

请求行的第一部分说明了该请求是GET请求。该行的第二部分是一个斜杠(/),用来说明请求的是该域名的根目录。该行的最后一部分说明使用的是HTTP 1.1版本(另一个可选项是1.0)。那么请求发到哪里去呢?这就是第二行的内容。

第2行是请求的第一个首部,HOST。首部HOST将指出请求的目的地。结合HOST和上一行中的斜杠(/),可以通知服务器请求的是www.baidu.com/(HTTP 1.1才需要使用首部HOST,而原来的1.0版本则不需要使用)。第三行中包含的是首部User-Agent,服务器端和客户端脚本都能够访问它,它是浏览器类型检测逻辑的重要基础。该信息由你使用的浏览器来定义(在本例中是Firefox 1.0.1),并且在每个请求中将自动发送。最后一行是首部Connection,通常将浏览器操作设置为Keep-Alive(当然也可以设置为其他值)。注意,在最后一个首部之后有一个空行。即使不存在请求主体,这个空行也是必需的。

要发送GET请求的参数,则必须将这些额外的信息附在URL本身的后面。其格式类似于:

URL ? name1=value1&name2=value2&..&nameN=valueN

该信息称之为查询字符串(query string),它将会复制在HTTP请求的请求行中,如下所示:

GET /books/?name=Professional%20Ajax HTTP/1.1
Host: 
www.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive

注意,为了将文本“Professional Ajax”作为URL的参数,需要编码处理其内容,将空格替换成%20,这称为URL编码(URL encoding),常用于HTTP的许多地方(JavaScript提供了内建的函数来处理URL编码和解码)。“名称—值”(name—value)对用 & 隔开。绝大部分的服务器端技术能够自动对请求主体进行解码,并为这些值的访问提供一些逻辑方式。当然,如何使用这些数据还是由服务器决定的。

另一方面,POST请求在请求主体中为服务器提供了一些附加的信息。通常,当填写一个在线表单并提交它时,这些填入的数据将以POST请求的方式发送给服务器。

以下就是一个典型的POST请求:

POST / HTTP/1.1
Host: 
www.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

从上面可以发现, POST请求和GET请求之间有一些区别。首先,请求行开始处的GET改为了POST,以表示不同的请求类型。你会发现首部Host和User-Agent仍然存在,在后面有两个新行。其中首部Content-Type说明了请求主体的内容是如何编码的。浏览器始终以application/ x-www-form- urlencoded的格式编码来传送数据,这是针对简单URL编码的MIME类型。首部Content-Length说明了请求主体的字节数。在首部Connection后是一个空行,再后面就是请求主体。与大多数浏览器的POST请求一样,这是以简单的“名称—值”对的形式给出的,其中name是Professional Ajax,publisher是Wiley。你可以以同样的格式来组织URL的查询字符串参数。

下面是一些最常见的请求头:

    Accept:浏览器可接受的MIME类型。
    Accept - Charset:浏览器可接受的字符集。
    Accept - Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
    Accept - Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
    Authorization:授权信息,通常出现在对服务器发送的WWW - Authenticate头的应答中。
    Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep - Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content - Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
    Content - Length:表示请求消息正文的长度。
    Cookie:这是最重要的请求头信息之一,参见后面《Cookie处理》一章中的讨论。
    From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
    Host:初始URL中的主机和端口。
    If - Modified - Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
    Pragma:指定“no - cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
    Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
    User - Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
    UA - Pixels,UA - Color,UA - OS,UA - CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。


HTTP响应

如下所示,HTTP响应的格式与请求的格式十分类似:



[]

正如你所见,在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。以下就是一个HTTP响应的例子:

HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122



Wrox Homepage




在本例中,状态行给出的HTTP状态代码是200,以及消息OK。状态行始终包含的是状态码和相应的简短消息,以避免混乱。最常用的状态码有:
◆200 (OK): 找到了该资源,并且一切正常。
◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。

在状态行之后是一些首部。通常,服务器会返回一个名为Data的首部,用来说明响应生成的日期和时间(服务器通常还会返回一些关于其自身的信息,尽管并非是必需的)。接下来的两个首部大家应该熟悉,就是与POST请求中一样的Content-Type和Content-Length。在本例中,首部Content-Type指定了MIME类型HTML(text/html),其编码类型是ISO-8859-1(这是针对美国英语资源的编码标准)。响应主体所包含的就是所请求资源的HTML源文件(尽管还可能包含纯文本或其他资源类型的二进制数据)。浏览器将把这些数据显示给用户。

注意,这里并没有指明针对该响应的请求类型,不过这对于服务器并不重要。客户端知道每种类型的请求将返回什么类型的数据,并决定如何使用这些数据。


附录:使用Java套接字实现一个可以处理get和post请求的小HTTP服务器程序
/**
* SimpleHttpServer.java
*/

import java.io.*;
import java.net.*;
import java.util.StringTokenizer;

/**
* 一个简单的用 Java Socket 编写的 HTTP 服务器应用, 演示了请求和应答的协议通信内容以及
* 给客户端返回 HTML 文本和二进制数据文件(一个图片), 同时展示了 404, 200 等状态码.
* 首先运行这个程序,然后打开Web浏览器,键入
http://localhost,则这个程序能够显示出浏览器发送了那些信息
* 并且向浏览器返回一个网页和一副图片, 并测试同浏览器对话.
* 当浏览器看到 HTML 中带有图片地址时, 则会发出第二次连接来请求图片等资源.
* 这个例子可以帮您理解 Java 的 HTTP 服务器软件是基于 J2SE 的 Socket 等软件编写的概念, 并熟悉
* HTTP 协议.
* 相反的用 Telnet 连接到已有的服务器则可以帮忙理解浏览器的运行过程和服务器端的返回内容.
*
*


*       当用户在Web浏览器地址栏中输入一个带有http://前缀的URL并按下Enter后,或者在Web页面中某个以http://开头的超链接上单击鼠标,HTTP事务处理的第一个阶段--建立连接阶段就开始了.HTTP的默认端口是80.
*    随着连接的建立,HTTP就进入了客户向服务器发送请求的阶段.客户向服务器发送的请求是一个有特定格式的ASCII消息,其语法规则为:
* < Method > < URL > < HTTP Version > < >
* {
: < >}*
* < >
* { Entity Body }
*    请求消息的顶端是请求行,用于指定方法,URL和HTTP协议的版本,请求行的最后是回车换行.方法有GET,POST,HEAD,PUT,DELETE等.
* 在请求行之后是若干个报头(Header)行.每个报头行都是由一个报头和一个取值构成的二元对,报头和取值之间以":"分隔;报头行的最后是回车换行.常见的报头有Accept(指定MIME媒体类型),Accept_Charset(响应消息的编码方式),Accept_Encoding(响应消息的字符集),User_Agent(用户的浏览器信息)等.
*    在请求消息的报头行之后是一个回车换行,表明请求消息的报头部分结束.在这个之后是请求消息的消息实体(Entity Body).具体的例子参看httpRequest.txt.
*     Web服务器在收到客户请求并作出处理之后,要向客户发送应答消息.与请求消息一样,应答消息的语法规则为:
* < HTTP Version> []< >
* {
: < > } *
* < >
* { Entity Body }
*    应答消息的第一行为状态行,其中包括了HTTP版本号,状态码和对状态码进行简短解释的消息;状态行的最后是回车换行.状态码由3位数字组成,有5类: 
* 参看:HTTP应答码及其意义 
* 
* 1XX 保留 
* 2XX 表示成功 
* 3XX 表示URL已经被移走 
* 4XX 表示客户错误 
* 5XX 表示服务器错误 
* 例如:415,表示不支持改媒体类型;503,表示服务器不能访问.最常见的是200,表示成功.常见的报头有:Last_Modified(最后修改时间),Content_Type(消息内容的MIME类型),Content_Length(内容长度)等.
*    在报头行之后也是一个回车换行,用以表示应答消息的报头部分的结束,以及应答消息实体的开始.
*    下面是一个应答消息的例子:
* HTTP/1.0 200 OK
* Date: Moday,07-Apr-97 21:13:02 GMT
* Server:NCSA/1.1
* MIME_Version:1.0
* Content_Type:text/html
* Last_Modified:Thu Dec 5 09:28:01 1996
* Coentent_Length:3107
* 
* </HTML><br>* <br>* 在用Java语言实现HTTP服务器时,首先启动一个java.net.ServerSocket在提供服务的端口上监听连接.向客户返回文本时,可以用PrintWriter,但是如果返回二进制数据,则必须使用OutputStream.write(byte[])方法,返回的应答消息字符串可以使用String.getBytes()方法转换为字节数组返回,或者使用PrintStream的print()方法写入文本,用write(byte[])方法写入二进制数据.<br>* <br>* </pre><br>* @author 刘长炯<br>* @version 1.0 2007-07-24 Sunday<br>*/<br>public class SimpleHttpServer implements Runnable {<!-- --><br>    /**<br>     * <br>     */<br>    ServerSocket serverSocket;//服务器Socket<br>    <br>    /**<br>     * 服务器监听端口, 默认为 80.<br>     */<br>    public static int PORT=80;//标准HTTP端口<br>    <br>    /**<br>     * 开始服务器 Socket 线程.<br>     */<br>    public SimpleHttpServer() {<!-- --><br>        try {<!-- --><br>            serverSocket=new ServerSocket(PORT);<br>        } catch(Exception e) {<!-- --><br>            System.out.println("无法启动HTTP服务器:"+e.getLocalizedMessage());<br>        }<br>        if(serverSocket==null) System.exit(1);//无法开始服务器<br>        new Thread(this).start();<br>        System.out.println("HTTP服务器正在运行,端口:"+PORT);<br>    }<br>    <br>    /**<br>     * 运行服务器主线程, 监听客户端请求并返回响应.<br>     */<br>    public void run() {<!-- --><br>        while(true) {<!-- --><br>            try {<!-- --><br>                Socket client=null;//客户Socket<br>                client=serverSocket.accept();//客户机(这里是 IE 等浏览器)已经连接到当前服务器<br>                if(client!=null) {<!-- --><br>                    System.out.println("连接到服务器的用户:"+client);<br>                    try {<!-- --><br>                        // 第一阶段: 打开输入流<br>                        BufferedReader in=new BufferedReader(new InputStreamReader(<br>                                client.getInputStream()));<br>                        <br>                        System.out.println("客户端发送的请求信息: ***************");<br>                        // 读取第一行, 请求地址<br>                        String line=in.readLine();<br>                        System.out.println(line);<br>                        String resource=line.substring(line.indexOf('/'),line.lastIndexOf('/')-5);<br>                        //获得请求的资源的地址<br>                        resource=URLDecoder.decode(resource, "UTF-8");//反编码 URL 地址<br>                        String method = new StringTokenizer(line).nextElement().toString();// 获取请求方法, GET 或者 POST</span></p> <p><span style="font-family: 宋体;">                        // 读取所有浏览器发送过来的请求参数头部信息<br>                        while( (line = in.readLine()) != null) {<!-- --><br>                            System.out.println(line);<br>                            <br>                            if(line.equals("")) break;<br>                        }<br>                        <br>                        // 显示 POST 表单提交的内容, 这个内容位于请求的主体部分<br>                        if("POST".equalsIgnoreCase(method)) {<!-- --><br>                            System.out.println(in.readLine());<br>                        }<br>                        <br>                        System.out.println("请求信息结束 ***************");<br>                        System.out.println("用户请求的资源是:"+resource);<br>                        System.out.println("请求的类型是: " + method);</span></p> <p><span style="font-family: 宋体;">                        // GIF 图片就读取一个真实的图片数据并返回给客户端<br>                        if(resource.endsWith(".gif")) {<!-- --><br>                            fileService("images/test.gif", client);<br>                            closeSocket(client);<br>                            continue;<br>                        }<br>                        <br>                        // 请求 JPG 格式就报错 404<br>                        if(resource.endsWith(".jpg")) {<!-- --><br>                                                    PrintWriter out=new PrintWriter(client.getOutputStream(),true);<br>                        out.println("HTTP/1.0 404 Not found");//返回应答消息,并结束应答<br>                        out.println();// 根据 HTTP 协议, 空行将结束头信息<br>                        out.close();<br>                        closeSocket(client);<br>                        continue;<br>                        } else {<!-- --><br>                            // 用 writer 对客户端 socket 输出一段 HTML 代码<br>                            PrintWriter out=new PrintWriter(client.getOutputStream(),true);<br>                            out.println("HTTP/1.0 200 OK");//返回应答消息,并结束应答<br>                            out.println("Content-Type:text/html;charset=GBK");<br>                            out.println();// 根据 HTTP 协议, 空行将结束头信息</span></p> <p><span style="font-family: 宋体;">                            out.println("<h1> Hello Http Server</h1>");<br>                            out.println("你好, 这是一个 Java HTTP 服务器 demo 应用.<br>");<br>                            out.println("您请求的路径是: " + resource + "<br>");<br>                            out.println("这是一个支持虚拟路径的图片:<img src='http://iyenn.com/index/link?url=abc.gif'><br>" +<br>                                    "<a href='http://iyenn.com/index/link?url=abc.gif'>点击打开http://iyenn.com/index/link?url=abc.gif, 是个服务器虚拟路径的图片文件.</a>");<br>                            out.println("<br>这是个会反馈 404 错误的的图片:<img src='http://iyenn.com/index/link?url=test.jpg'><br><a href='http://iyenn.com/index/link?url=test.jpg'>点击打开http://iyenn.com/index/link?url=test.jpg</a><br>");<br>                            out.println("<form method=post action='/'>POST 表单 <input name=username value='用户'> <input name=submit type=submit value=submit></form>");<br>                            out.close();</span></p> <p><span style="font-family: 宋体;">                            closeSocket(client);<br>                        }<br>                    } catch(Exception e) {<!-- --><br>                        System.out.println("HTTP服务器错误:"+e.getLocalizedMessage());<br>                    }<br>                }<br>                //System.out.println(client+"连接到HTTP服务器");//如果加入这一句,服务器响应速度会很慢<br>            } catch(Exception e) {<!-- --><br>                System.out.println("HTTP服务器错误:"+e.getLocalizedMessage());<br>            }<br>        }<br>    }<br>    <br>    /**<br>     * 关闭客户端 socket 并打印一条调试信息.<br>     * @param socket 客户端 socket.<br>     */<br>    void closeSocket(Socket socket) {<!-- --><br>        try {<!-- --><br>            socket.close();<br>        } catch (IOException ex) {<!-- --><br>            ex.printStackTrace();<br>        }<br>                            System.out.println(socket + "离开了HTTP服务器");        <br>    }<br>    <br>    /**<br>     * 读取一个文件的内容并返回给浏览器端.<br>     * @param fileName 文件名<br>     * @param socket 客户端 socket.<br>     */<br>        void fileService(String fileName, Socket socket)<br>    {<!-- --><br>            <br>        try<br>        {<!-- --><br>            PrintStream out = new PrintStream(socket.getOutputStream(), true);<br>            File fileToSend = new File(fileName);<br>            if(fileToSend.exists() && !fileToSend.isDirectory())<br>            {<!-- --><br>                out.println("HTTP/1.0 200 OK");//返回应答消息,并结束应答<br>                out.println("Content-Type:application/binary");<br>                out.println("Content-Length:" + fileToSend.length());// 返回内容字节数<br>                out.println();// 根据 HTTP 协议, 空行将结束头信息<br>                <br>                FileInputStream fis = new FileInputStream(fileToSend);<br>                byte data[] = new byte[fis.available()];<br>                fis.read(data);<br>                out.write(data);<br>                out.close();<br>                fis.close();<br>            }<br>        }<br>        catch(Exception e)<br>        {<!-- --><br>            System.out.println("传送文件时出错:" + e.getLocalizedMessage());<br>        }<br>    }<br>    <br>    /**<br>     * 打印用途说明.<br>     */<br>    private static void usage() {<!-- --><br>        System.out.println("Usage: java HTTPServer <port> Default port is 80.");<br>    }<br>    <br>    <br>    /**<br>     * 启动简易 HTTP 服务器<br>     * @param args <br>     */<br>    public static void main(String[] args) {<!-- --><br>        try {<!-- --><br>            if(args.length != 1) {<!-- --><br>                usage();<br>            } else if(args.length == 1) {<!-- --><br>                PORT = Integer.parseInt(args[0]);<br>            }<br>        } catch (Exception ex) {<!-- --><br>            System.err.println("Invalid port arguments. It must be a integer that greater than 0");<br>        }<br>        <br>        new SimpleHttpServer();<br>    }<br>    <br>}</span></p> <p></p> <pre data-index="0" class="set-code-hide" name="code"></HTML> * * 在用Java语言实现HTTP服务器时,首先启动一个java.net.ServerSocket在提供服务的端口上监听连接.向客户返回文本时,可以用PrintWriter,但是如果返回二进制数据,则必须使用OutputStream.write(byte[])方法,返回的应答消息字符串可以使用String.getBytes()方法转换为字节数组返回,或者使用PrintStream的print()方法写入文本,用write(byte[])方法写入二进制数据. * * </pre> * @author 刘长炯 * @version 1.0 2007-07-24 Sunday */ public class SimpleHttpServer implements Runnable { /** * */ ServerSocket serverSocket;//服务器Socket /** * 服务器监听端口, 默认为 80. */ public static int PORT=80;//标准HTTP端口 /** * 开始服务器 Socket 线程. */ public SimpleHttpServer() { try { serverSocket=new ServerSocket(PORT); } catch(Exception e) { System.out.println("无法启动HTTP服务器:"+e.getLocalizedMessage()); } if(serverSocket==null) System.exit(1);//无法开始服务器 new Thread(this).start(); System.out.println("HTTP服务器正在运行,端口:"+PORT); } /** * 运行服务器主线程, 监听客户端请求并返回响应. */ public void run() { while(true) { try { Socket client=null;//客户Socket client=serverSocket.accept();//客户机(这里是 IE 等浏览器)已经连接到当前服务器 if(client!=null) { System.out.println("连接到服务器的用户:"+client); try { // 第一阶段: 打开输入流 BufferedReader in=new BufferedReader(new InputStreamReader( client.getInputStream())); System.out.println("客户端发送的请求信息: ***************"); // 读取第一行, 请求地址 String line=in.readLine(); System.out.println(line); String resource=line.substring(line.indexOf('/'),line.lastIndexOf('/')-5); //获得请求的资源的地址 resource=URLDecoder.decode(resource, "UTF-8");//反编码 URL 地址 String method = new StringTokenizer(line).nextElement().toString();// 获取请求方法, GET 或者 POST // 读取所有浏览器发送过来的请求参数头部信息 while( (line = in.readLine()) != null) { System.out.println(line); if(line.equals("")) break; } // 显示 POST 表单提交的内容, 这个内容位于请求的主体部分 if("POST".equalsIgnoreCase(method)) { System.out.println(in.readLine()); } System.out.println("请求信息结束 ***************"); System.out.println("用户请求的资源是:"+resource); System.out.println("请求的类型是: " + method); // GIF 图片就读取一个真实的图片数据并返回给客户端 if(resource.endsWith(".gif")) { fileService("images/test.gif", client); closeSocket(client); continue; } // 请求 JPG 格式就报错 404 if(resource.endsWith(".jpg")) { PrintWriter out=new PrintWriter(client.getOutputStream(),true); out.println("HTTP/1.0 404 Not found");//返回应答消息,并结束应答 out.println();// 根据 HTTP 协议, 空行将结束头信息 out.close(); closeSocket(client); continue; } else { // 用 writer 对客户端 socket 输出一段 HTML 代码 PrintWriter out=new PrintWriter(client.getOutputStream(),true); out.println("HTTP/1.0 200 OK");//返回应答消息,并结束应答 out.println("Content-Type:text/html;charset=GBK"); out.println();// 根据 HTTP 协议, 空行将结束头信息 out.println("<h1> Hello Http Server</h1>"); out.println("你好, 这是一个 Java HTTP 服务器 demo 应用.<br>"); out.println("您请求的路径是: " + resource + "<br>"); out.println("这是一个支持虚拟路径的图片:<img src="http://iyenn.com/index/link?url=abc.gif" mce_src="http://iyenn.com/index/link?url=abc.gif"><br>" + "<a href="http://iyenn.com/index/link?url=abc.gif" mce_href="http://iyenn.com/index/link?url=abc.gif">点击打开http://iyenn.com/index/link?url=abc.gif, 是个服务器虚拟路径的图片文件.</a>"); out.println("<br>这是个会反馈 404 错误的的图片:<img src="http://iyenn.com/index/link?url=test.jpg" mce_src="http://iyenn.com/index/link?url=test.jpg"><br><a href="http://iyenn.com/index/link?url=test.jpg" mce_href="http://iyenn.com/index/link?url=test.jpg">点击打开http://iyenn.com/index/link?url=test.jpg</a><br>"); out.println("<form method=post action='/'>POST 表单 <input name=username value='用户'> <input name=submit type=submit value=submit></form>"); out.close(); closeSocket(client); } } catch(Exception e) { System.out.println("HTTP服务器错误:"+e.getLocalizedMessage()); } } //System.out.println(client+"连接到HTTP服务器");//如果加入这一句,服务器响应速度会很慢 } catch(Exception e) { System.out.println("HTTP服务器错误:"+e.getLocalizedMessage()); } } } /** * 关闭客户端 socket 并打印一条调试信息. * @param socket 客户端 socket. */ void closeSocket(Socket socket) { try { socket.close(); } catch (IOException ex) { ex.printStackTrace(); } System.out.println(socket + "离开了HTTP服务器"); } /** * 读取一个文件的内容并返回给浏览器端. * @param fileName 文件名 * @param socket 客户端 socket. */ void fileService(String fileName, Socket socket) { try { PrintStream out = new PrintStream(socket.getOutputStream(), true); File fileToSend = new File(fileName); if(fileToSend.exists() && !fileToSend.isDirectory()) { out.println("HTTP/1.0 200 OK");//返回应答消息,并结束应答 out.println("Content-Type:application/binary"); out.println("Content-Length:" + fileToSend.length());// 返回内容字节数 out.println();// 根据 HTTP 协议, 空行将结束头信息 FileInputStream fis = new FileInputStream(fileToSend); byte data[] = new byte[fis.available()]; fis.read(data); out.write(data); out.close(); fis.close(); } } catch(Exception e) { System.out.println("传送文件时出错:" + e.getLocalizedMessage()); } } /** * 打印用途说明. */ private static void usage() { System.out.println("Usage: java HTTPServer <port> Default port is 80."); } /** * 启动简易 HTTP 服务器 * @param args */ public static void main(String[] args) { try { if(args.length != 1) { usage(); } else if(args.length == 1) { PORT = Integer.parseInt(args[0]); } } catch (Exception ex) { System.err.println("Invalid port arguments. It must be a integer that greater than 0"); } new SimpleHttpServer(); } }<div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://img1.iyenn.com/img10/c4a7c45da7i3a7f8/65811691243225911151.jpeg" alt="" title=""></span></div></pre> <p> </p> </div><div data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/kfanning/article/details/6062118","extend1":"pc","ab":"new"}"><div></div></div> </div> <div id="treeSkill" data-report-view="{"spm":"1001.2101.3001.6866"}" style="display: block;"><div class="skill-tree-box"><div class="skill-tree-head">文章知识点与官方知识档案匹配,可进一步学习相关知识</div><div class="skill-tree-body"><div class="skill-tree-item"><span class="skill-tree-href"><a data-report-click="{"spm":"1001.2101.3001.6866","dest":"http://iyenn.com/index/link?url=https://edu.csdn.net/skill/network/?utm_source=csdn_ai_skill_tree_blog"}" href="http://iyenn.com/index/link?url=https://edu.csdn.net/skill/network/?utm_source=csdn_ai_skill_tree_blog" target="_blank">网络技能树</a><i></i><a data-report-click="{"spm":"1001.2101.3001.6866","dest":"http://iyenn.com/index/link?url=https://edu.csdn.net/skill/network/?utm_source=csdn_ai_skill_tree_blog"}" href="http://iyenn.com/index/link?url=https://edu.csdn.net/skill/network/?utm_source=csdn_ai_skill_tree_blog" target="_blank">首页</a><i></i><a data-report-click="{"spm":"1001.2101.3001.6866","dest":"http://iyenn.com/index/link?url=https://edu.csdn.net/skill/network/?utm_source=csdn_ai_skill_tree_blog"}" href="http://iyenn.com/index/link?url=https://edu.csdn.net/skill/network/?utm_source=csdn_ai_skill_tree_blog" target="_blank">概览</a></span><span class="skill-tree-con"><span class="skill-tree-count">37518</span> 人正在系统学习中</span></div></div></div></div> </article> </div> <div style="margin-top: 5px;color: #828a91;font-size: 12px"> <span>注:本文转载自blog.csdn.net的popAnt的文章<a href="http://blog.csdn.net/kfanning/article/details/6062118" target="_blank">"http://blog.csdn.net/kfanning/article/details/6062118"</a>。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。</span> </div> <div class="content-footer post-content-footer"> <div class="inner-wrapper-sticky"> <div class="post-content-footer-in"> <div class="content-footer-poster"> <button data-title="去评论" class="mobile-hidden b2tooltipbox comment-span"><a href="#demoAnchor"><i class="b2font b2-chat-2-fill "></i></a></button> <a href="/member/login/"> <button data-title="喜欢" class="mobile-hidden b2tooltipbox comment-span" data-id="326508"><span class=""><i class="b2font b2-heart-fill "></i><b>3423</b></span></button> </a> <button data-title="分享到脸书" class="mobile-hidden b2tooltipbox comment-span" style="margin-top: 22px"><a href="javascript:fbShare();"> <svg t="1690264724364" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2299" width="24" height="24"> <path d="M933.8 195.213c0-58.296-47.259-105.554-105.554-105.554h-633.12c-58.296 0-105.554 47.258-105.554 105.554v633.12c0 58.295 47.258 105.554 105.554 105.554h633.12c58.295 0 105.554-47.259 105.554-105.554v-633.12zM776.21 300.46H669.787v105.4H776.21v105.401H669.787v317.225h-105.4V511.261H458.985v-105.4h105.4V267.9c0-35.433 39.029-72.84 78.785-72.84H776.21v105.4z" fill="#6C6E72" p-id="2300"></path> </svg> </a> </button> <button data-title="分享到推特" class="mobile-hidden b2tooltipbox comment-span"><a href="javascript:twitterShare();"> <svg t="1690265072794" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2903" width="24" height="24"> <path d="M1024 512c0-282.763636-229.236364-512-512-512C229.236364 0 0 229.236364 0 512s229.236364 512 512 512C794.763636 1024 1024 794.763636 1024 512zM236.311273 693.946182c8.843636 1.117091 17.873455 1.722182 26.996364 1.722182 53.015273 0.093091 101.794909-19.037091 140.474182-51.153455-49.524364-1.163636-91.275636-36.165818-105.658182-84.200727 6.888727 1.442909 14.010182 2.280727 21.271273 2.327273 10.333091 0.046545 20.293818-1.349818 29.789091-4.049455-51.758545-11.450182-90.763636-60.555636-90.763636-119.063273 0-0.512 0-1.024 0-1.536 15.266909 9.216 32.674909 14.801455 51.246545 15.639273C279.365818 431.709091 259.397818 394.472727 259.397818 352.581818c0-22.155636 5.585455-42.821818 15.313455-60.509091 55.808 73.774545 139.170909 122.740364 233.146182 128.837818-1.954909-8.797091-2.932364-17.966545-2.932364-27.322182 0-66.141091 50.641455-118.923636 113.105455-117.899636 32.535273 0.558545 61.952 15.499636 82.571636 38.958545 25.786182-4.933818 49.989818-14.429091 71.819636-27.694545-8.424727 27.601455-26.391273 50.594909-49.757091 64.977455 22.900364-2.56 44.683636-8.610909 64.977455-17.780364-15.173818 23.598545-34.350545 44.218182-56.459636 60.695273 0.232727 5.12 0.325818 10.24 0.325818 15.36 0 157.044364-113.803636 338.152727-321.861818 338.059636C345.832727 748.311273 286.347636 728.296727 236.311273 693.946182z" p-id="2904" fill="#6C6E72"></path> </svg> </a> </button> <button data-title="分享到Whatsapp" class="mobile-hidden b2tooltipbox comment-span"><a href="javascript:whatsApp();"> <svg t="1690265463406" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4099" id="mx_n_1690265463407" width="24" height="24"> <path d="M512 85.333333a426.666667 426.666667 0 0 0-345.6 676.693334L128 878.933333a20.906667 20.906667 0 0 0 5.12 21.76 21.76 21.76 0 0 0 21.76 5.546667l121.6-39.253333A426.666667 426.666667 0 1 0 512 85.333333z m248.32 602.453334a119.893333 119.893333 0 0 1-85.333333 60.16c-22.186667 4.693333-51.626667 8.533333-149.333334-32a530.346667 530.346667 0 0 1-213.333333-187.733334 242.773333 242.773333 0 0 1-50.773333-128 136.96 136.96 0 0 1 42.666666-104.106666 63.573333 63.573333 0 0 1 42.666667-15.36h14.08c12.373333 0 18.773333 0 27.306667 20.906666s34.986667 85.333333 37.973333 92.16a24.32 24.32 0 0 1 2.133333 23.04 78.933333 78.933333 0 0 1-14.08 19.626667c-5.973333 7.253333-12.373333 12.8-18.346666 20.48a20.053333 20.053333 0 0 0-5.12 26.88 381.44 381.44 0 0 0 69.12 85.333333 313.173333 313.173333 0 0 0 100.266666 61.866667 26.453333 26.453333 0 0 0 29.866667-4.693333 426.666667 426.666667 0 0 0 33.28-42.666667 23.893333 23.893333 0 0 1 30.72-8.96c11.52 3.84 72.533333 34.133333 85.333333 40.106667s20.906667 9.386667 23.893334 14.506666a106.666667 106.666667 0 0 1-2.986667 58.453334z" p-id="4100" fill="#6C6E72"></path> </svg> </a> </button> <!-- <a class="tooltip be-btn-beshare be-btn-link be-btn-link-l use-beshare-link-btn bk dah"--> <!-- rel="external nofollow" onclick="myFunction()" onmouseout="outFunc()">--> <!-- <span class="sharetip bz copytipl">复制链接</span>--> <!-- </a>--> <div> <span class="sharetip bz copytipl">复制链接</span> <button class="btn btn-secondary mobile-hidden b2tooltipbox comment-span copy_button"> <a> <svg t="1690338204788" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10669" width="24" height="24"> <path d="M512 1024C229.228 1024 0 794.772 0 512S229.228 0 512 0s512 229.228 512 512-229.228 512-512 512z m54.545-565.02l-1.798-1.764a102.207 102.207 0 0 0-11.002-9.523l-35.453 35.442c4.176 2.446 8.078 5.393 11.605 8.92l1.866 1.763a58.277 58.277 0 0 1 0 82.341l-96.904 96.882a58.334 58.334 0 0 1-82.341 0l-1.832-1.798a58.243 58.243 0 0 1 0-82.306l43.816-43.828a149.675 149.675 0 0 1-10.866-58.732l-67.812 67.72c-41.836 41.825-41.836 110.251 0 152.053l1.787 1.798c41.836 41.79 110.228 41.79 152.052 0l96.882-96.916c41.757-41.825 41.757-110.25 0-152.052z m141.38-141.37l-1.82-1.797c-41.802-41.825-110.228-41.825-152.053 0l-96.882 96.916c-41.824 41.79-41.824 110.216 0 152.053l1.798 1.763c3.505 3.425 7.225 6.576 11.002 9.523l35.454-35.476a57.845 57.845 0 0 1-11.583-8.92l-1.798-1.763a58.311 58.311 0 0 1 0-82.375l96.905-96.882a58.197 58.197 0 0 1 82.284 0l1.798 1.797a58.277 58.277 0 0 1 0 82.341l-43.76 43.828c7.612 18.796 11.196 38.81 10.844 58.766l67.789-67.755c41.824-41.79 41.824-110.216 0.022-152.007z" p-id="10670" fill="#6C6E72"></path> </svg> </a> </button> </div> <div class="btn-group "> <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> <svg t="1690338289501" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11788" width="24" height="24"> <path d="M960 128H64c-35.3 0-64 28.6-64 64v640c0 35.3 28.7 64 64 64h160c8.8 0 16-7.2 16-16v-12c0-2.2 1.8-4 4-4h151c2.2 0 4 1.8 4 4v12c0 8.8 7.2 16 16 16h193c8.8 0 16-7.2 16-16v-12c0-2.2 1.8-4 4-4h152c2.2 0 4 1.8 4 4v12c0 8.8 7.2 16 16 16h160c35.3 0 64-28.7 64-64V192c0-35.4-28.7-64-64-64zM576 680v-48c0-4.4 3.6-8 8-8h304c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8H584c-4.4 0-8-3.6-8-8z m0-128v-48c0-4.4 3.6-8 8-8h304c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8H584c-4.4 0-8-3.6-8-8z m320-128c0 4.4-3.6 8-8 8H584c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h304c4.4 0 8 3.6 8 8v48zM447.2 736h-288c-8.8 0-16.8-3.6-22.6-9.4-5.8-5.8-9.4-13.8-9.4-22.6 0-57.1 27.2-107.8 69.3-140 4-3.1 4.3-9 0.5-12.3-33-29.3-53.8-72.1-53.8-119.7 0-87.7 70.5-158.9 157.9-160 87.8-1.1 160.7 69.6 162 157.4 0.8 48.6-20.1 92.4-53.7 122.2-3.8 3.4-3.6 9.3 0.5 12.4 21.1 16.1 38.4 36.8 50.4 60.6 12.1 23.8 18.9 50.8 18.9 79.3 0 17.8-14.3 32.1-32 32.1z" p-id="11789" fill="#6C6E72"></path> </svg> </button> <div class="dropdown-menu" style="padding: 5px;box-shadow: 0px 0px 6px 0px #999;"> <div class="menu_img"> <div id="qrcode" style="width:100%; height:100%;"></div> </div> </div> </div> </div> </div> </div> </div> <div style="display: flex;justify-content: space-between;align-items: end;"> <div class="post-tags-meat_news"> <!-- <a class="b2-radius" href="/list_101/">--> <!-- <span class="tag-img"><i class="b2font b2-price-tag-3-line "></i></span>--> <!-- <span class="tag-text"></span>--> <!-- </a>--> </div> </div> <div class="mobile-show"> <div style="display: flex;justify-content: end;flex-wrap: wrap" class="share_mobile"> <a href="javascript:whatsApp();"> <svg t="1690265463406" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4099" id="mx_n_1690265463407" width="24" height="24"> <path d="M512 85.333333a426.666667 426.666667 0 0 0-345.6 676.693334L128 878.933333a20.906667 20.906667 0 0 0 5.12 21.76 21.76 21.76 0 0 0 21.76 5.546667l121.6-39.253333A426.666667 426.666667 0 1 0 512 85.333333z m248.32 602.453334a119.893333 119.893333 0 0 1-85.333333 60.16c-22.186667 4.693333-51.626667 8.533333-149.333334-32a530.346667 530.346667 0 0 1-213.333333-187.733334 242.773333 242.773333 0 0 1-50.773333-128 136.96 136.96 0 0 1 42.666666-104.106666 63.573333 63.573333 0 0 1 42.666667-15.36h14.08c12.373333 0 18.773333 0 27.306667 20.906666s34.986667 85.333333 37.973333 92.16a24.32 24.32 0 0 1 2.133333 23.04 78.933333 78.933333 0 0 1-14.08 19.626667c-5.973333 7.253333-12.373333 12.8-18.346666 20.48a20.053333 20.053333 0 0 0-5.12 26.88 381.44 381.44 0 0 0 69.12 85.333333 313.173333 313.173333 0 0 0 100.266666 61.866667 26.453333 26.453333 0 0 0 29.866667-4.693333 426.666667 426.666667 0 0 0 33.28-42.666667 23.893333 23.893333 0 0 1 30.72-8.96c11.52 3.84 72.533333 34.133333 85.333333 40.106667s20.906667 9.386667 23.893334 14.506666a106.666667 106.666667 0 0 1-2.986667 58.453334z" p-id="4100" fill="#6C6E72"></path> </svg> </a> <a href="javascript:fbShare();"> <svg t="1690264724364" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2299" width="24" height="24"> <path d="M933.8 195.213c0-58.296-47.259-105.554-105.554-105.554h-633.12c-58.296 0-105.554 47.258-105.554 105.554v633.12c0 58.295 47.258 105.554 105.554 105.554h633.12c58.295 0 105.554-47.259 105.554-105.554v-633.12zM776.21 300.46H669.787v105.4H776.21v105.401H669.787v317.225h-105.4V511.261H458.985v-105.4h105.4V267.9c0-35.433 39.029-72.84 78.785-72.84H776.21v105.4z" fill="#6C6E72" p-id="2300"></path> </svg> </a> <a href="javascript:twitterShare();"> <svg t="1690265072794" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2903" width="24" height="24"> <path d="M1024 512c0-282.763636-229.236364-512-512-512C229.236364 0 0 229.236364 0 512s229.236364 512 512 512C794.763636 1024 1024 794.763636 1024 512zM236.311273 693.946182c8.843636 1.117091 17.873455 1.722182 26.996364 1.722182 53.015273 0.093091 101.794909-19.037091 140.474182-51.153455-49.524364-1.163636-91.275636-36.165818-105.658182-84.200727 6.888727 1.442909 14.010182 2.280727 21.271273 2.327273 10.333091 0.046545 20.293818-1.349818 29.789091-4.049455-51.758545-11.450182-90.763636-60.555636-90.763636-119.063273 0-0.512 0-1.024 0-1.536 15.266909 9.216 32.674909 14.801455 51.246545 15.639273C279.365818 431.709091 259.397818 394.472727 259.397818 352.581818c0-22.155636 5.585455-42.821818 15.313455-60.509091 55.808 73.774545 139.170909 122.740364 233.146182 128.837818-1.954909-8.797091-2.932364-17.966545-2.932364-27.322182 0-66.141091 50.641455-118.923636 113.105455-117.899636 32.535273 0.558545 61.952 15.499636 82.571636 38.958545 25.786182-4.933818 49.989818-14.429091 71.819636-27.694545-8.424727 27.601455-26.391273 50.594909-49.757091 64.977455 22.900364-2.56 44.683636-8.610909 64.977455-17.780364-15.173818 23.598545-34.350545 44.218182-56.459636 60.695273 0.232727 5.12 0.325818 10.24 0.325818 15.36 0 157.044364-113.803636 338.152727-321.861818 338.059636C345.832727 748.311273 286.347636 728.296727 236.311273 693.946182z" p-id="2904" fill="#6C6E72"></path> </svg> </a> <a> <span class="sharetip bz copytipl2">复制链接</span> <button class="copy_button2"> <svg t="1690338204788" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10669" width="24" height="24"> <path d="M512 1024C229.228 1024 0 794.772 0 512S229.228 0 512 0s512 229.228 512 512-229.228 512-512 512z m54.545-565.02l-1.798-1.764a102.207 102.207 0 0 0-11.002-9.523l-35.453 35.442c4.176 2.446 8.078 5.393 11.605 8.92l1.866 1.763a58.277 58.277 0 0 1 0 82.341l-96.904 96.882a58.334 58.334 0 0 1-82.341 0l-1.832-1.798a58.243 58.243 0 0 1 0-82.306l43.816-43.828a149.675 149.675 0 0 1-10.866-58.732l-67.812 67.72c-41.836 41.825-41.836 110.251 0 152.053l1.787 1.798c41.836 41.79 110.228 41.79 152.052 0l96.882-96.916c41.757-41.825 41.757-110.25 0-152.052z m141.38-141.37l-1.82-1.797c-41.802-41.825-110.228-41.825-152.053 0l-96.882 96.916c-41.824 41.79-41.824 110.216 0 152.053l1.798 1.763c3.505 3.425 7.225 6.576 11.002 9.523l35.454-35.476a57.845 57.845 0 0 1-11.583-8.92l-1.798-1.763a58.311 58.311 0 0 1 0-82.375l96.905-96.882a58.197 58.197 0 0 1 82.284 0l1.798 1.797a58.277 58.277 0 0 1 0 82.341l-43.76 43.828c7.612 18.796 11.196 38.81 10.844 58.766l67.789-67.755c41.824-41.79 41.824-110.216 0.022-152.007z" p-id="10670" fill="#6C6E72"></path> </svg> </button> </a> <a class="dropdown mobile_dropup"> <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> <svg t="1690338289501" class="fenxiang_icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11788" width="24" height="24"> <path d="M960 128H64c-35.3 0-64 28.6-64 64v640c0 35.3 28.7 64 64 64h160c8.8 0 16-7.2 16-16v-12c0-2.2 1.8-4 4-4h151c2.2 0 4 1.8 4 4v12c0 8.8 7.2 16 16 16h193c8.8 0 16-7.2 16-16v-12c0-2.2 1.8-4 4-4h152c2.2 0 4 1.8 4 4v12c0 8.8 7.2 16 16 16h160c35.3 0 64-28.7 64-64V192c0-35.4-28.7-64-64-64zM576 680v-48c0-4.4 3.6-8 8-8h304c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8H584c-4.4 0-8-3.6-8-8z m0-128v-48c0-4.4 3.6-8 8-8h304c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8H584c-4.4 0-8-3.6-8-8z m320-128c0 4.4-3.6 8-8 8H584c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h304c4.4 0 8 3.6 8 8v48zM447.2 736h-288c-8.8 0-16.8-3.6-22.6-9.4-5.8-5.8-9.4-13.8-9.4-22.6 0-57.1 27.2-107.8 69.3-140 4-3.1 4.3-9 0.5-12.3-33-29.3-53.8-72.1-53.8-119.7 0-87.7 70.5-158.9 157.9-160 87.8-1.1 160.7 69.6 162 157.4 0.8 48.6-20.1 92.4-53.7 122.2-3.8 3.4-3.6 9.3 0.5 12.4 21.1 16.1 38.4 36.8 50.4 60.6 12.1 23.8 18.9 50.8 18.9 79.3 0 17.8-14.3 32.1-32 32.1z" p-id="11789" fill="#6C6E72"></path> </svg> </button> <div class="dropdown-menu mobile_menu" style="padding: 5px;box-shadow: 0px 0px 6px 0px #999;"> <div class="menu_img"> <div id="qrcode_two" style="width:100%; height:100%;"></div> </div> </div> </a> </div> </div> </article> <div class="related-posts mg-t mg-b box b2-radius"> <div class="related-posts-title">相关推荐</div> <div class="hidden-line"> <div class="related-posts-in"> </div> </div> </div> <div class="comments-box" id="demoAnchor"> <div id="comments" class="comments-area box b2-radius"> <div class="comments-title"> <div class="comment-info"> <span ref="commentCount" class="comment-count"> 发表评论</span> </div> <div id="comment-form" class="comment-form"> <div class="toolbox-left"> <div class="profile-box" style="display: flex"> <a class="profile-href comment-overlay-login"> <!-- <span class="profile-name">发表评论</span>--> <a class="login-info">登录后才能发表评论和回复</a> <a class="text-secondary" href="/member/register/">注册</p> <a class="text-secondary" href="/member/login/">/ 登录</a> </a> </div> </div> </div> </div><!-- .comments-title --> <div class="container" style="padding-bottom: 20px;"> <form class="my-4" onsubmit="return submitcomment(this);" data-action="/comment/add/?contentid=326508"> <div class="form-group"> <textarea name="comment" id="comment" onblur="if(value.length>200){value=value.substr(0,200)}" class="form-control" placeholder="请输入评论内容(限200字数)" onkeyup="value=value.substr(0,200)"></textarea> </div> <div class="form-group"> <div class="row"> <div class="col-6 col-md-3"> <input type="text" name="checkcode" required id="checkcode" onfocus='updateimg()' class="form-control" placeholder="请输入验证码"> </div> <div class="col-6 col-md-3" id="text"> <img title="点击刷新" style="height:33px;" id="codeimg" src="/core/code.php" onclick="this.src='/core/code.php?'+Math.round(Math.random()*10);"/> </div> </div> </div> <div class="form-group"> <button type="submit" class="btn btn-info mb-2">提交评论</button> </div> </form> <h4>评论记录:</h4> <a name="comment"></a> <!-- 分页 --> <!-- <div class="text-center my-5 text-secondary">未查询到任何数据!</div>--> <div class="tac text-secondary">未查询到任何数据!</div> <!-- 评论回复弹框 --> <div class="modal" tabindex="-1" role="dialog" id="reply"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">回复评论:</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <form onsubmit="return submitcomment(this);" data-action="" id="replyform"> <div class="modal-body"> <div class="form-group"> <textarea name="comment" id="comment" onblur="if(value.length>200) value=value.substr(0,200)" class="form-control" placeholder="请输入评论内容(限200字数)" onkeyup="value=value.substr(0,200)"></textarea> </div> <div class="form-group"> <div class="row"> <div class="col-6"> <input type="text" name="checkcode" required id="checkcode" class="form-control" placeholder="请输入验证码"> </div> <div class="col-6" id="text"> <img title="点击刷新" style="height:33px;" id="codeimg" src="/core/code.php" onclick="this.src='/core/code.php?'+Math.round(Math.random()*10);"/> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal"> 关闭 </button> <button type="submit" class="btn btn-info" id="text">提交评论 </button> </div> </form> </div> </div> </div> </div> </div><!-- #comments --> </div> </div> <aside id="secondary" class="widget-area" style="margin-right: 0;margin-left: 16px;margin-bottom: 10px;"> <div class="sidebars"> <div class="inner-wrapper-sticky"> <div class="sidebar-innter widget-ffixed"> <section id="tag_cloud-10" class="widget widget_tag_cloud mg-b box b2-radius mobile-hidden"> <h2 class="widget-title_fenlei">分类栏目</h2> <div class="tagcloud"> <a href="/list_103/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >后端<span class="tag-link-count"> (14832)</span></a> <a href="/list_104/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >前端<span class="tag-link-count"> (14280)</span></a> <a href="/list_105/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >移动开发<span class="tag-link-count"> (3760)</span></a> <a href="/list_106/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >编程语言<span class="tag-link-count"> (3851)</span></a> <a href="/list_107/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >Java<span class="tag-link-count"> (3904)</span></a> <a href="/list_108/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >Python<span class="tag-link-count"> (3298)</span></a> <a href="/list_109/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >人工智能<span class="tag-link-count"> (10119)</span></a> <a href="/list_110/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >AIGC<span class="tag-link-count"> (2810)</span></a> <a href="/list_111/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >大数据<span class="tag-link-count"> (3499)</span></a> <a href="/list_112/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >数据库<span class="tag-link-count"> (3945)</span></a> <a href="/list_113/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >数据结构与算法<span class="tag-link-count"> (3757)</span></a> <a href="/list_114/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >音视频<span class="tag-link-count"> (2669)</span></a> <a href="/list_115/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >云原生<span class="tag-link-count"> (3145)</span></a> <a href="/list_116/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >云平台<span class="tag-link-count"> (2965)</span></a> <a href="/list_117/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >前沿技术<span class="tag-link-count"> (2993)</span></a> <a href="/list_118/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >开源<span class="tag-link-count"> (2160)</span></a> <a href="/list_119/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >小程序<span class="tag-link-count"> (2860)</span></a> <a href="/list_120/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >运维<span class="tag-link-count"> (2533)</span></a> <a href="/list_121/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >服务器<span class="tag-link-count"> (2698)</span></a> <a href="/list_122/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >操作系统<span class="tag-link-count"> (2325)</span></a> <a href="/list_123/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >硬件开发<span class="tag-link-count"> (2492)</span></a> <a href="/list_124/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >嵌入式<span class="tag-link-count"> (2955)</span></a> <a href="/list_125/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >微软技术<span class="tag-link-count"> (2769)</span></a> <a href="/list_126/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >软件工程<span class="tag-link-count"> (2056)</span></a> <a href="/list_127/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >测试<span class="tag-link-count"> (2865)</span></a> <a href="/list_128/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >网络空间安全<span class="tag-link-count"> (2948)</span></a> <a href="/list_129/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >网络与通信<span class="tag-link-count"> (2797)</span></a> <a href="/list_130/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >用户体验设计<span class="tag-link-count"> (2592)</span></a> <a href="/list_131/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >学习和成长<span class="tag-link-count"> (2593)</span></a> <a href="/list_132/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >搜索<span class="tag-link-count"> (2744)</span></a> <a href="/list_133/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >开发工具<span class="tag-link-count"> (7108)</span></a> <a href="/list_134/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >游戏<span class="tag-link-count"> (2829)</span></a> <a href="/list_135/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >HarmonyOS<span class="tag-link-count"> (2935)</span></a> <a href="/list_136/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >区块链<span class="tag-link-count"> (2782)</span></a> <a href="/list_137/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >数学<span class="tag-link-count"> (3112)</span></a> <a href="/list_138/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >3C硬件<span class="tag-link-count"> (2759)</span></a> <a href="/list_139/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >资讯<span class="tag-link-count"> (2909)</span></a> <a href="/list_140/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >Android<span class="tag-link-count"> (4709)</span></a> <a href="/list_141/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >iOS<span class="tag-link-count"> (1850)</span></a> <a href="/list_142/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >代码人生<span class="tag-link-count"> (3043)</span></a> <a href="/list_143/" class="tag-cloud-link tag-link-279 tag-link-position-1" style="font-size: 8pt;" >阅读<span class="tag-link-count"> (2841)</span></a> </div> </section> <section id="b2-widget-hot-4" class="widget b2-widget-hot box b2-radius mobile-hidden"> <div class="b2-widget-title"> <h2 class="widget-title_hot">热门文章</h2> </div> <div class="b2-widget-box"> <ul class="b2-widget-list-ul"> </ul> </div> </section> <div style="display:none;" class="scode">101</div> <div style="display:none;" class="name">推荐</div> </div> </div> </div> </aside> </div> <footer id="colophon" class="footer"> <div class="site-footer-nav"> <div class="wrapper"> <div class="Box-v1-cmoUUM tBcFR"> <span> <a href="/About-us/">关于我们</a> </span> <span> <a href="/Privacy-policy/">隐私政策</a> </span> <span> <a href="/Disclaimer/">免责声明</a> </span> <span> <a href="/Contact-us/">联系我们</a> </span> </div> <div class="footer-bottom"> <div class="footer-bottom-left"> <div class="copyright">Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.</div> </div> </div> </div> </div> <div class="dmtop" style="bottom: 25px;">Scroll to Top</div> </footer> </div> <script> $(document).ready(function () { jQuery(window).scroll(function () { if (jQuery(this).scrollTop() > 1) { jQuery('.dmtop').css({bottom: "25px"}); } else { jQuery('.dmtop').css({bottom: "-100px"}); } }); jQuery('.dmtop').click(function () { jQuery('html, body').animate({scrollTop: '0px'}, 800); return false; }); }); </script> <style> .site-footer { background-color: #0a0a0a } .site-footer-nav { background-color: #fff; } #bigTriangleColor { background-color: #0a0a0a } </style> </body> </html> <script src="https://cdn.staticfile.org/clipboard.js/2.0.4/clipboard.min.js"></script> <script> $(".copy_button").click(function () { var html = window.location.href; new ClipboardJS('.copy_button', { text: function (trigger, e) { return html; } }).on('success', function (e) { $('.copytipl').replaceWith('<span class="sharetip bz copytipl">复制成功</span>'); $('.copytipl').show() e.clearSelection(); }).on('error', function (e) { $('.copytipl').replaceWith('<span class="sharetip bz copytipl">复制失败</span>'); }); }) $(".copy_button").hover(function () { $('.copytipl').replaceWith('<span class="sharetip bz copytipl">复制链接</span>'); $('.copytipl').show() }, function () { $('.copytipl').hide() }) $(".copy_button2").hover(function () { $('.copytipl2').replaceWith('<span class="sharetip bz copytipl2">复制链接</span>'); $('.copytipl2').show() }, function () { $('.copytipl2').hide() }) $(".copy_button2").click(function () { var html = window.location.href; new ClipboardJS('.copy_button2', { text: function (trigger, e) { return html; } }).on('success', function (e) { $('.copytipl2').replaceWith('<span class="sharetip bz copytipl2">复制成功</span>'); $('.copytipl2').show() setTimeout(function () { $('.copytipl2').hide() }, 1500) e.clearSelection(); }).on('error', function (e) { $('.copytipl2').replaceWith('<span class="sharetip bz copytipl2">复制失败</span>'); }); }) </script> <script type="text/javascript"> var qrcode = new QRCode(document.getElementById("qrcode"), { width: 100, height: 100, text: window.location.href }); var qrcode_two = new QRCode(document.getElementById("qrcode_two"), { width: 100, height: 100, text: window.location.href }); </script> <script> //share facebook function fbShare(contentId) { u = document.getElementsByClassName("share_url")[0].content; t = document.getElementsByClassName("share_title")[0].content; d = document.getElementsByClassName("share_desc")[0].content; i = document.getElementsByClassName("share_img")[0].content; window.open("https://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(u) + "&t=" + encodeURIComponent("\n\n" + t) + "&d=" + encodeURIComponent("\n\n" + d) + "&i=" + encodeURIComponent(i), "sharer", "toolbar=0,status=0,width=626,height=436"); "sharer", "toolbar=0,status=0,width=626,height=436" } //share twitter function twitterShare(contentId) { u = document.getElementsByClassName("share_url")[0].content; t = document.getElementsByClassName("share_title")[0].content; d = document.getElementsByClassName("share_desc")[0].content; i = document.getElementsByClassName("share_img")[0].content; window.open("https://twitter.com/intent/tweet?url=" + encodeURIComponent(u) + "&t=" + encodeURIComponent("\n\n" + t) + "&d=" + encodeURIComponent("\n\n" + d) + "&i=" + encodeURIComponent(i), "sharer", "toolbar=0,status=0,width=626,height=436"); } //share whatsapp function whatsApp(contentId) { u = document.getElementsByClassName("share_url")[0].content; t = document.getElementsByClassName("share_title")[0].content; d = document.getElementsByClassName("share_desc")[0].content; i = document.getElementsByClassName("share_img")[0].content; location = "https://web.whatsapp.com/send?text=" + encodeURIComponent(t) + "&u" + encodeURIComponent("\n\n" + u) + "&d=" + encodeURIComponent("\n\n" + d) + "&i=" + encodeURIComponent(i) + "&via=lopscoop"; } </script> <script> $('.entry-content a').click(function () { // var hreF = $(this).attr('href'); // window.open(hreF);//在新窗口打开 $(this).attr("target", "_blank"); }) $(".code-block-extension-copyCodeBtn").click(function () { var html = $(this).parent().parent().siblings(".code-block-extension-codeShowNum").text(); // console.log(html,'1') new ClipboardJS('.code-block-extension-copyCodeBtn', { text: function (trigger, e) { return html; } }).on('success', function (e) { alert("复制成功!"); e.clearSelection(); }).on('error', function (e) { alert('Error!'); }); }) var commentDanger = { alert: function (msg, type) { if (typeof (type) == "undefined") { type = "danger"; } var divElement = $("<div></div>").addClass('alert').addClass('alert-' + type).addClass('alert-dismissible').addClass('col-md-4').addClass('col-md-offset-4'); divElement.css({ "position": "fixed", "top": "80px", "width": "100%", "margin": "0 auto", "left": "0", "right": "0", "z-index": "99999999999" }); divElement.text(msg); var closeBtn = $('<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>'); $(divElement).append(closeBtn); $('.content-area').before(divElement); return divElement; }, message: function (msg, type) { var divElement = commentDanger.alert(msg, type); var isIn = false; divElement.on({ mouseover: function () { isIn = true; }, mouseout: function () { isIn = false; } }); // After a short delay, it rises and disappears setTimeout(function () { var IntervalMS = 20; var floatSpace = 60; var nowTop = divElement.offset().top; var stopTop = nowTop - floatSpace; divElement.fadeOut(IntervalMS * floatSpace); var upFloat = setInterval(function () { if (nowTop >= stopTop) { divElement.css({"top": nowTop--}); } else { clearInterval(upFloat); divElement.remove(); } }, IntervalMS); if (isIn) { clearInterval(upFloat); divElement.stop(); } divElement.hover(function () { clearInterval(upFloat); divElement.stop(); }, function () { divElement.fadeOut(IntervalMS * (nowTop - stopTop)); upFloat = setInterval(function () { if (nowTop >= stopTop) { divElement.css({"top": nowTop--}); } else { clearInterval(upFloat); divElement.remove(); } }, IntervalMS); }); }, 2500); } } var commentSuccess = { alert: function (msg, type) { if (typeof (type) == "undefined") { type = "success"; } var divElement = $("<div></div>").addClass('alert').addClass('alert-' + type).addClass('alert-dismissible').addClass('col-md-4').addClass('col-md-offset-4'); divElement.css({ "position": "fixed", "top": "80px", "width": "100%", "margin": "0 auto", "left": "0", "right": "0", "z-index": "99999999999" }); divElement.text(msg); var closeBtn = $('<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>'); $(divElement).append(closeBtn); $('.content-area').before(divElement); return divElement; }, message: function (msg, type) { var divElement = commentSuccess.alert(msg, type); var isIn = false; divElement.on({ mouseover: function () { isIn = true; }, mouseout: function () { isIn = false; } }); // After a short delay, it rises and disappears setTimeout(function () { var IntervalMS = 20; var floatSpace = 60; var nowTop = divElement.offset().top; var stopTop = nowTop - floatSpace; divElement.fadeOut(IntervalMS * floatSpace); var upFloat = setInterval(function () { if (nowTop >= stopTop) { divElement.css({"top": nowTop--}); } else { clearInterval(upFloat); divElement.remove(); } }, IntervalMS); if (isIn) { clearInterval(upFloat); divElement.stop(); } divElement.hover(function () { clearInterval(upFloat); divElement.stop(); }, function () { divElement.fadeOut(IntervalMS * (nowTop - stopTop)); upFloat = setInterval(function () { if (nowTop >= stopTop) { divElement.css({"top": nowTop--}); } else { clearInterval(upFloat); divElement.remove(); } }, IntervalMS); }); }, 2500); } } var id = $('.likebox').data('id'); if ($.cookie('likes_' + id)) { $('.likebox').find(".b2font").replaceWith('<i class="b2font b2-heart-fill red"></i>'); } $('.likebox').click(function () { var id = $(this).data('id'); if ($.cookie('likes_' + id)) { commentDanger.message("您已点过赞了,请勿重复赞!"); } else { $(this).find('#support_number').text(parseInt($(this).find('#support_number').text()) + 1); // $(this).find(".b2font").addClass('red'); $(this).find(".b2font").replaceWith('<i class="b2font b2-heart-fill red"></i>'); var likeslink = $(this).data('likeslink'); var likes = parseInt($(this).find('.likes').text()) $.ajax({ url: likeslink, data: { 'likes': likes }, success: function (response, status) { commentSuccess.message("点赞!"); window.location.reload(); $(this).find(".b2font").replaceAll('<i class="b2font b2-heart-fill red"></i>'); }, error: function (xhr, status, error) { alert('返回数据异常!'); } }); } ; }) function updateimg() { $('#codeimg').attr('src', '/core/code.php?' + Math.round(Math.random() * 10)); } //评论回复弹框 $('.replybtn').on("click", function () { var url = $(this).data("action"); $("#reply").modal("show"); $("#replyform").data("action", url); }); //提交评论 function submitcomment(obj) { var url = $(obj).data("action"); //console.log(url); var comment = $(obj).find("#comment").val(); //alert(comment.length); var checkcode = $(obj).find("#checkcode").val(); //alert(checkcode); //console.log('2'); if (comment.length > 0 || comment.length > 3) { $.ajax({ type: 'POST', url: url, date: new Date(), cache: true, async: true, dataType: 'json', data: { comment: comment, checkcode: checkcode }, success: function (response, status) { if (response.code) { // alert(response.data); commentSuccess.message(response.data); $(obj)[0].reset(); $(".modal").modal("hide"); } else { commentDanger.message(response.data); if (response.tourl != "") { if (confirm(response.data + '是否立即跳转登录?')) { location.href = response.tourl; } } $('.codeimg').click(); //更新验证码 } }, error: function (xhr, status, error) { alert('返回数据异常!'); } }); } else { alert('請輸入數據!'); } return false; } </script> <script> var Page = 1; var load = false; var scode = jQuery(".scode").text(); var sortname = jQuery(".name").text(); var Dom = jQuery('.related-posts-in'); var List = jQuery('.b2-widget-list-ul'); Page = parseInt(Page); fs(); hot_list(); function fs() { var Num = 4; var url = '/api.php/list/' + scode + '/page/' + Page + '/num/' + Num; load = true; jQuery.ajax({ type: 'POST', url: url, cache: true, async: true, dataType: 'json', data: { appid: 'admin', timestamp: '1747357387', signature: '3d5fda696d089bb734008558e76e5372', }, success: function (response, status) { var Data = response.data; if (response.code) { jQuery.each(Data, function (index, value,) { if (value.ico == null || value.ico == "") { var Html = '<div class="related-posts-item">\n' + ' <div>\n' + ' <div class="related-post-thumb">\n' + ' <a href="' + value.contentlink + '" class="link-block lazy_back"></a>\n' + ' <span class="cat"><a href="' + value.sortlink + '">' + value.sortname + '</a></span><span class="img_title"><a\n' + ' href="' + value.contentlink + '" title="' + value.title + '">' + value.title + '</a></span>\n' + ' </div>\n' + ' <a href="' + value.contentlink + '"><h2 title="' + value.title + '">' + value.title + '</h2></a>\n' + ' <div class="post-excerpt" style="margin:0 0 5px 0">\n' + ' <a href="' + value.contentlink + '" style="color: #797C80 !important;" title="' + value.description + '">' + value.description + '</a>\n' + ' </div>\n' + ' <div class="realte-post-meta">\n' + ' <span>' + value.date.slice(0, 11) + '</span>\n' + ' <span><i class="b2font b2-heart-fill "></i>' + value.likes + '</span>\n' + ' <span><i class="b2font b2-eye-fill "></i>' + value.visits + '</span>\n' + ' </div>\n' + ' </div>\n' + ' </div>'; } else { var Html = '<div class="related-posts-item">\n' + ' <div>\n' + ' <div class="related-post-thumb">\n' + ' <a href="' + value.contentlink + '" class="link-block lazy_back"><img src="' + value.ico + '"></a>\n' + ' <span class="cat"><a href="' + value.sortlink + '">' + value.sortname + '</a></span>\n' + ' </div>\n' + ' <a href="' + value.contentlink + '"><h2 title="' + value.title + '">' + value.title + '</h2></a>\n' + ' <div class="post-excerpt" style="margin:0 0 5px 0">\n' + ' <a href="' + value.contentlink + '" style="color: #797C80 !important;" title="' + value.description + '">' + value.description + '</a>\n' + ' </div>\n' + ' <div class="realte-post-meta">\n' + ' <span>' + value.date.slice(0, 11) + '</span>\n' + ' <span><i class="b2font b2-heart-fill "></i>' + value.likes + '</span>\n' + ' <span><i class="b2font b2-eye-fill "></i>' + value.visits + '</span>\n' + ' </div>\n' + ' </div>\n' + ' </div>'; } Dom.append(Html); }); load = false; return Page += 1; } else { $('.related-posts').hide(); } }, error: function (xhr, status, error) { console.log(error); } }) } function hot_list() { var listNum = []; var number = 0; var nums = 1; var Num = 10; var url = '/api.php/list/' + scode + '/page/' + Page + '/num/' + Num; load = true; jQuery.ajax({ type: 'POST', url: url, cache: true, async: true, dataType: 'json', data: { appid: 'admin', timestamp: '1747357387', signature: '3d5fda696d089bb734008558e76e5372', }, success: function (response, status) { var Data = response.data; for (let i in Data) { listNum.push(Data[i]) } var scrollS = []; var su = number + 10; for (var jj = number; jj < su; jj++) { scrollS.push(listNum[jj]); number = number + 1; } if (response.code) { scrollS.forEach(function (item, index) { var Html = '<li class="b2-widget-box widget-post widget-post-none">\n' + ' <div class="b2-widget-post-order widget-order-'+nums+'"><span\n' + ' class="b2-radius">'+nums+'</span></div>\n' + ' <div class="b2-widget-post-title">\n' + ' <a href="' + item['contentlink'] +'"><h2 title="' + item['title'] +'">' + item['title'] +'</h2></a>\n' + ' </div>\n' + ' </li>'; List.append(Html); nums++; }) // }); load = false; return Page += 1; } else { $('#b2-widget-hot-4').hide(); } }, error: function (xhr, status, error) { console.log(error); } }) } </script>