精华内容
下载资源
问答
  • 基于netty构建http服务器

    万次阅读 2020-11-24 16:31:21
    基于netty构建http服务器 基于Netty构建Http服务的流程如下: Client向Server发送http请求。 Server端对http请求进行解析。 Server端向Client发送http响应。 Client对http响应进行解析。 流程图如下: 服务器端...

    基于netty构建http服务器

    基于Netty构建Http服务的流程如下:

    1. Client向Server发送http请求。
    2. Server端对http请求进行解析。
    3. Server端向Client发送http响应。
    4. Client对http响应进行解析。

    流程图如下:

    在这里插入图片描述

    服务器端实现

    package com.morris.netty.protocol.http;
    
    import io.netty.bootstrap.ServerBootstrap;
    import io.netty.buffer.ByteBuf;
    import io.netty.buffer.Unpooled;
    import io.netty.channel.*;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.SocketChannel;
    import io.netty.channel.socket.nio.NioServerSocketChannel;
    import io.netty.handler.codec.http.*;
    import io.netty.util.CharsetUtil;
    import lombok.extern.slf4j.Slf4j;
    
    import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE;
    import static io.netty.handler.codec.http.HttpResponseStatus.OK;
    import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1;
    
    @Slf4j
    public class Server {
    
        private static final int port = 8899;
    
        public static void main(String[] args) throws Exception {
            EventLoopGroup bossGroup = new NioEventLoopGroup();
            EventLoopGroup workerGroup = new NioEventLoopGroup();
            try {
                ServerBootstrap b = new ServerBootstrap();
                b.group(bossGroup, workerGroup)
                        .channel(NioServerSocketChannel.class)
                        .childHandler(new ChannelInitializer<SocketChannel>() {
                            @Override
                            protected void initChannel(SocketChannel ch) throws Exception {
                                ch.pipeline().addLast(new HttpRequestDecoder()); // 请求消息解码器
                                ch.pipeline().addLast(new HttpObjectAggregator(65536));// 目的是将多个消息转换为单一的request或者response对象
                                ch.pipeline().addLast(new HttpResponseEncoder());//响应编码器
                                ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
                                    @Override
                                    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
                                        FullHttpRequest request = (FullHttpRequest) msg;
                                        log.info("method:{}", request.method().name());
                                        log.info("uri:{}", request.uri());
                                        log.info("content:{}", request.content().toString(CharsetUtil.UTF_8));
    
                                        FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK);
                                        response.headers().set(CONTENT_TYPE, "text/html; charset=UTF-8");
                                        ByteBuf buffer = Unpooled.copiedBuffer("<h3>hello world</h3>", CharsetUtil.UTF_8);
                                        response.content().writeBytes(buffer);
                                        buffer.release();
                                        request.release();
                                        ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
                                    }
                                });// 业务逻辑
                            }
                        });
                ChannelFuture future = b.bind("127.0.0.1", port).sync();
                log.info("HTTP服务器启动,网址是 : " + "http://127.0.0.1:" + port);
                future.channel().closeFuture().sync();
            } finally {
                bossGroup.shutdownGracefully();
                workerGroup.shutdownGracefully();
            }
        }
    }
    

    在浏览器输入http://127.0.0.1:8899就可以看到页面显示hello world

    客户端实现

    package com.morris.netty.protocol.http;
    
    import io.netty.bootstrap.Bootstrap;
    import io.netty.channel.*;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.nio.NioSocketChannel;
    import io.netty.handler.codec.http.*;
    import io.netty.util.CharsetUtil;
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class Client {
    
        public static void main(String[] args) throws InterruptedException {
    
            EventLoopGroup workerGroup = new NioEventLoopGroup();
            try {
                Bootstrap b = new Bootstrap();
                b.group(workerGroup)
                        .channel(NioSocketChannel.class)
                        .handler(new ChannelInitializer() {
    
                            @Override
                            protected void initChannel(Channel ch) throws Exception {
                                ch.pipeline().addLast(new HttpResponseDecoder()); // 响应解码器
                                ch.pipeline().addLast(new HttpObjectAggregator(65536));
                                ch.pipeline().addLast(new HttpRequestEncoder()); // 请求编码器
                                ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
    
                                    @Override
                                    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
                                        FullHttpResponse httpResponse = (FullHttpResponse)msg;
                                        log.info("status:{}", httpResponse.status());
                                        log.info("headers:{}", httpResponse.headers());
                                        log.info("body:{}", httpResponse.content().toString(CharsetUtil.UTF_8));
                                        httpResponse.release();
                                    }
    
                                    @Override
                                    public void channelActive(ChannelHandlerContext ctx) throws Exception {
                                        DefaultFullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/");
    
                                        // 构建http请求
                                        request.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
                                        request.headers().set(HttpHeaderNames.CONTENT_LENGTH, request.content().readableBytes());
                                        // 发送http请求
                                        ctx.writeAndFlush(request);
                                    }
                                });
                            }
                        });
    
                // 启动 server.
                ChannelFuture f = b.connect("127.0.0.1", 8899).sync();
    
                // 等待socket关闭
                f.channel().closeFuture().sync();
            } finally {
                workerGroup.shutdownGracefully();
            }
        }
    }
    
    展开全文
  • 什么是http服务器

    万次阅读 多人点赞 2019-02-25 10:13:43
    本篇文章旨在从服务器后台开发的角度剖析一个简单的http服务器的运行原理. 我们知道浏览器是http(s)的客户端,目的是连接远程的http服务器,然后服务器返回浏览器数据.浏览器接收数据解析数据之后展现出来.我们看到的...

    本篇文章旨在从服务器后台开发的角度剖析一个简单的http服务器的运行原理.

    我们知道浏览器是http(s)的客户端,目的是连接远程的http服务器,然后服务器返回浏览器数据.浏览器接收数据解析数据之后展现出来.我们看到的外在表现就是,浏览器访问一个url,然后就得到相应的web页面.

    同样我们知道,浏览器与http服务器是通过http协议,传输层是tcp协议,因为他是有连接,可靠的协议.关于http协议简单的介绍一下:


    一个标准的HTTP请求由以下几个部分组成

    <request-line>
    <headers>
    <CRLF>
    [<request-body><CRLF>]

    在HTTP请求中,第一行是请求行(request-line),用来说明请求类型、要访问的资源(URL)以及使用的HTTP版本;
    紧接着是多行头部(headers)信息,用来说明服务器要使用的附加信息;
    头部信息之后是一个回车换行符(\r\n),用于标明头部信息的结束。
    以上是必须内容,根据需要可在头部信息结束之后增加主体数据(request-body);

    主体数据之后是一个回车换行符(\r\n),用于标明主体数据的结束。

    例如,我们可以在IE浏览器上输入下面的网址:

    http://localhost:8000/hello/index.html

    HTTP请求的头部信息如下:

    GET /hello/index.html HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    Host: localhost:8000
    Connection: Keep-Alive
    Cookie: JSESSIONID=BBBA54D519F7A320A54211F0107F5EA6

    收到请求数据之后,服务器解析,毕竟是明文字符,这个简单.然后服务器就知道了客户端的要求--获取目录hello/index.html文件.服务器读取文件内容发送给浏览器就好了.

    后来随着业务逻辑越来越复杂,单单获取某个html文件功能早已不能满足需求,个性化需求呼之欲出.比如在线问卷调查表,他究竟是怎么把我们填写的数据传递给服务器的呢?

    你可能会说那不是一样,客户端发送什么内容,服务器就接收什么内容.可是你想过没有,每个网站的需求是不一样的,本来服务器接收到浏览器的请求数据已经是够复杂的了,还让服务器来解析数据并响应不同的数据处理,这不太现实.

    一般的,服务器最好只接收数据,如果让服务器也处理数据逻辑,势必会让服务器变得很复杂,稳定性也得不到保证.

    另外一个角度是为了让程序复用,提高生产效率.也就是说,如果不关注业务逻辑,只注重接收数据,那么服务器程序可以给任何一个开发者使用.换句话说,我们不用从头开始写.直接使用现有的高性能的服务器就可以满足需求了.例如公司白领中午要吃饭,不可能跑回家自己去做饭吃,自己叫外卖就好了.

    但是现实问题仍然没有解决,通过什么方式去处理业务逻辑呢?

    你要给手机充电时,把插头插入插线板就能获取电了.插线板有接口,提供了电.

    同理服务器程序最好也提供接口,浏览器通过统一的接口给服务器,然后我们从服务器接口中获取我们想要的数据.获取数据之后我们可以把数据交给第三方程序来处理逻辑,这样就做到与服务器业务分离了,good iead.

    事实上,现在的http服务器就是这么做的,不过很复杂而已.下一篇开始为您介绍这些接口.

    附录:HTTP Request Header 请求头

     

    Header 解释 示例
    Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html
    Accept-Charset 浏览器可以接受的字符编码集。 Accept-Charset: iso-8859-5
    Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。 Accept-Encoding: compress, gzip
    Accept-Language 浏览器可接受的语言 Accept-Language: en,zh
    Accept-Ranges 可以请求网页实体的一个或者多个子范围字段 Accept-Ranges: bytes
    Authorization HTTP授权的授权证书 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache
    Connection 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) Connection: close
    Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 Cookie: $Version=1; Skin=new;
    Content-Length 请求的内容长度 Content-Length: 348
    Content-Type 请求的与实体对应的MIME信息 Content-Type: application/x-www-form-urlencoded
    Date 请求发送的日期和时间 Date: Tue, 15 Nov 2010 08:12:31 GMT
    Expect 请求的特定的服务器行为 Expect: 100-continue
    From 发出请求的用户的Email From: user@email.com
    Host 指定请求的服务器的域名和端口号 Host: www.zcmhi.com
    If-Match 只有请求内容与实体相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”
    If-Modified-Since 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
    If-None-Match 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 If-None-Match: “737060cd8c284d8af7ad3082f209582d”
    If-Range 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag If-Range: “737060cd8c284d8af7ad3082f209582d”
    If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
    Max-Forwards 限制信息通过代理和网关传送的时间 Max-Forwards: 10
    Pragma 用来包含实现特定的指令 Pragma: no-cache
    Proxy-Authorization 连接到代理的授权证书 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Range 只请求实体的一部分,指定范围 Range: bytes=500-999
    Referer 先前网页的地址,当前请求网页紧随其后,即来路 Referer: http://www.zcmhi.com/archives/71.html
    TE 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 TE: trailers,deflate;q=0.5
    Upgrade 向服务器指定某种传输协议以便服务器进行转换(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
    User-Agent User-Agent的内容包含发出请求的用户信息 User-Agent: Mozilla/5.0 (Linux; X11)
    Via 通知中间网关或代理服务器地址,通信协议 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
    Warning 关于消息实体的警告信息 Warn: 199 Miscellaneous warning


    --------------------- 
    作者:Shonm 
    来源:CSDN 
    原文:https://blog.csdn.net/zxm342698145/article/details/79995039 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 搭建http服务器

    千次阅读 2019-06-04 15:58:37
    使用tomcat搭建HTTP文件下载服务器 用简单的方法实战演练搭建http服务器(Windows上) 超简单——自己搭建ftp服务器(python nodejs)
    展开全文
  • 小型HTTP服务器

    千次阅读 2017-04-10 13:38:47
    本文的重点是介绍HTTP服务器的框架结构,旨在了解HTTP服务器的工作流程,所以我们在下面我们会实现一个多线程的HTTP/1.0版本服务器,这个HTTP服务器主要支持GET和POST方法。在实现HTTP服务器之前,我们首先要了解...

    本文的重点是介绍HTTP服务器的框架结构,旨在了解HTTP服务器的工作流程,所以我们在下面我们会实现一个多线程的HTTP/1.0版本服务器,这个HTTP服务器主要支持GET和POST方法。

    在实现HTTP服务器之前,我们首先要了解HTTP协议,CGI协议等:
    http协议

    一、web框架的原理图
    如果使用非CGI方式处理浏览器的请求的话很简单,服务器直接将浏览器请求的资源返回即可。下面给出CGI方式为浏览器服务的框架:
    这里写图片描述

    二、多线程http服务器工作方法
    1、http/1.0版本的服务器采用的是短连接。
    我们要搭建的是多线程服务器,并且使用短连接,所以每当建立一个连接之后,就创建一个线程去处理这个请求,并将这个线程设置成分离状态,然后主线程继续处于监听状态。当线程处理完这个请求之后,然后断开连接。这样一来一回就处理完一个请求。

    2、实现支持GET和POST方法的小型http服务器。
    GET方法:如果GET方法只是简单的请求一份资源,而不传递参数的话则由服务器直接将资源返回即可。如果GET方法的url中带有参数的话,则就要使用CGI模式进行处理。
    POST方法:POST方法要使用CGI模式进行处理。POST的参数在消息正文中出现。
    这里写图片描述
    那么如何判断请求的方法呢?
    由于请求方法在http请求报文中的第一行,所以我们需要按行读取第一行,然后判断是那种方法,并且判断是不是CGI模式。

    3、非CGI模式
    当我们判断出是GET请求时,并且url中没有参数的时候,就是用非CGI模式。非CGI模式处理起来比较简单,首先我们要解析出请求路径,判断请求的是不是合法资源,如果是的话,我们就返回这个资源。

    4、CGI模式
    当是CGI模式处理请求的时候,我们要要将fork一个子进程,对子进程exec替换CGI程序。在这过程中,我们使用pipe进行父子进程之间的通信。所有需要的参数在exec之前,我们都将这些参数导出为环境变量,这样就算exec的话,子进程还是能够通过环境变量获取所需的参数。

    三、程序主要逻辑
    这里写图片描述

    四、代码实现
    这里写图片描述

    cgi_bin:存放CGI程序的目录
    configure.sh:配置脚本,自动生成Makefile。
    thttp_ctl.sh:控制http服务器启停的脚本
    conf:配置文件目录,里面有一个thttpd.conf文件,存放的是http服务器的IP和PORT。
    log:日志目录。
    wwwroot:web根目录,里面存放的是服务器的资源和CGI程序。

    main.c
    thttpd.c
    thttpd.h
    这三个是服务器的代码。

    http服务器代码

    例1:显示用python爬取的段子。
    python爬虫代码:
    爬取笑话

    这里写图片描述

    这里写图片描述

    例2:编写一个CGI程序,浏览器提交两个数据,通过cgi_math程序运算后返回结果 。

    这里写图片描述

    这里写图片描述

    这里写图片描述

    展开全文
  • 区分Web服务器、HTTP服务器、应用程序服务器

    万次阅读 多人点赞 2018-04-04 16:58:08
    进程听到和看到web服务器、HTTP服务器、应用程序服务器,但一直不知道它们有什么区别,迷惑了好久,今天查看的很多博客,终于算是梳理通了,下面我就来总结一下它们的区别,顺别了解一些服务器。 首先我们要知道web...
  • Web服务器、HTTP服务器及应用服务器有何区别?Apache、Nginx、IIS、Tomcat、JBoss、Weblogic、WebSphere 都各属于哪种服务器? Web服务器是指驻留在Internet上的计算机程序,它的基本功能是提供Web信息浏览服务。...
  • 在之前的博文中, 我陆续说过如何搭建ftp, sftp, tftp服务器, 在本文中, 我们来继续聊如何实战搭建一个http服务器http服务器有很多种, 如tomcat,apache等, 然而, 很多新手无法搭建和配置成功, 颇为受挫,...
  • HTTP服务器搭建

    千次阅读 2018-06-19 11:36:56
    借助hfs这个软件很轻易的搭建http服务器,这样做升级的话很效率高。。很多客户端做升级。需要在后台写服务端软件。这种沟通过socket来玩的话。很费精力。。后面看到hfs这个软件。然后在客户端用libcurl这个库来做...
  • 创建HTTP服务器 在Node.js中,可以很方便地创建一个HTTP服务器,只需调用http模块中的create Server方法即可 var server=http.createServer([requestListener]) 在createServer方法中,可以使用一个可选参数,参数...
  • web/http服务器实现

    千次阅读 2020-02-08 14:18:45
    需求分析:实现基本的HTTP服务器,支持浏览器的访问(支持标准http协议) 接收浏览器发送HTTP请求; 解析请求数据,请求方式(GET),请求文件(html…),协议版本; 根据请求构建响应头,发送响应头: ...
  • Java 简单实现HTTP服务器

    万次阅读 2019-01-03 16:56:34
    HTTP服务器  解释: 个人理解,http服务器就是解析http请求信息,并解析信息;然后根据信息做后续事情。   Http请求格式与响应格式      核心代码   package com_2.Httpserver; import java.io....
  • Qt Http服务器简单变成https服务器

    千次阅读 2018-05-11 18:05:10
    一开始qt http服务器还是好简单,因为就是TCP连接上面一个简单协议。后来听说发布小程序必须用到https+域名,估计好多刚开始往小程序里跑的小伙子都哭晕在测所。不过我不负责写小程序,我负责搞用qt 写个http的...
  • HFS搭建HTTP服务器

    万次阅读 2018-06-12 17:39:34
    本文介绍用HTTP服务器工具软件HFS建立一个临时的HTTP文件服务,使能通过手机浏览器等访问下载计算机中的指定文件。 1. 简介 HFS ~Http File Server,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案...
  • 手写Http服务器

    千次阅读 2020-10-31 12:03:29
    你写的一个Html页面,丢到服务器,启动一个Web服务(Tomcat/Nginx),然后大家就可以访问了,为什么?...HTTP允许Web服务器和浏览器通过网络发送和接收数据,是一种基于【请求-响应】的协议。 说白了HT
  • eNSP模拟HTTP服务器 HTTP服务器设置 Cliient5客户端信息配置
  • Qt Http QHttpMultiPart上传文件到java http服务器 1.最近项目用到了Qt上传文件到HTTP服务器,由于之前做过一个http接收文件的服务器,所以直接拿来调试。由于对http的了解一个不够深入,调试了许久都没有成功上传...
  • 在很多情况下,需要在本地开启http服务器来测试。所以就需要一个简单的省事好用的http服务器。以前的时候,都是使用php的本地环境,但是,自从学了nodejs,发现了http-server好东西。不用配置直接在当前文件夹内打开...
  • c语言编写http服务器

    千次阅读 2018-09-27 10:26:24
    一直想弄一下http服务器,一直没有深入的去看http协议。 昨天研究了一天,查看源码和优化,终于实现了。也稍微的理解了一下http协议。 身为一个嵌入式工程师,需要了解http协议吗?显然是必要的, 例如:你有一个...
  • pomelo服务器集群中集成http服务器

    千次阅读 2015-08-19 18:04:34
    运维部门需要一个http服务器,来查询服务器及玩家的一些数据。 在做的过程中考虑的是两个问题: 1 这个http服务器挂在什么地方? 为了不污染pemelo的代码,做了一个httpServer的组件,在gate服务器中加载。 ...
  • java 编写简易的http服务器

    千次阅读 2019-06-05 14:40:27
    java 编写简易的http服务器 想要写一个http服务器,首先得了解http协议。这里仅介绍一下相关的知识。 1、http协议 HTTP请求报文 在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成。其中方法、...
  • netty实现http服务器

    千次阅读 2017-10-21 12:08:26
    本文主要讲解如何用Netty 实现一个简单的http服务器。 1 http 请求消息 Http的请求由三部分组成:请求行、消息头、请求正文(body)。 请求行以一个方法开头,以空格分开,后面跟着请求URI和协议版本,格式为:...
  • 说说如何搭建 HTTP 服务器

    千次阅读 2018-06-10 11:42:46
    这里使用 Apache HTTP Server 来搭建 HTTP 服务器。 1、在搜索引擎中输入 “Apache HTTP Server 下载” 关键字,下载 Apache HTTP Server 的安装包,形如:httpd-2.2.25-win32-x86-no_ssl.msi 2、双击运行安装程序...
  • 在很多情况下,需要在本地开启http服务器来测试。所以就需要一个简单的省事好用的http服务器。 1.简介: http-server是一个简单的零配置命令行http服务器。它对于生产使用来说是足够强大的,但它的测试,本地开发和...
  • 阿帕奇HTTP服务器下载与安装

    万次阅读 多人点赞 2013-10-14 12:38:09
    阿帕奇HTTP服务器下载与安装.
  • http服务-搭建简易的http服务器

    万次阅读 2016-08-13 18:31:32
    http服务-搭建简易的http服务器仅仅实现了Post和Get,也就简单的使用了 200 OK,100-continue和发送http格式的文本而已,其实我们只要按照HTTP协议收发数据即可。先来一张做http上传功能时的意外收获,也是待会我们的...
  • Java 实现简单的Http服务器

    千次阅读 2018-02-02 11:11:25
    Java 实现简单的Http服务器  首先需要说明的是,这个HTTP服务器真的超级简单,简单到只有一个Java类,它只能返回一个特定的HTML文本。写这个HTTP服务器程序是为了探究Web服务器到底是如何提供HTTP服务的。  要...
  • HTTP服务器开发教程

    万次阅读 2010-08-07 09:42:00
    最近因为项目需要,必须自己实现一个HTTP服务器的部分功能。 需求大概是这样的,winform里使用webrowser控件显示一个本地的html页面,同时winform启动http服务,本地html页面里通过javascript使用XMLHttpRequest...
  • HTTP服务器 -- http-server 的安装与运行

    千次阅读 2019-07-18 15:10:08
    http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs. HttpServlet容器响应Web客户请求流程如下: 1)Web客户向Servlet容器发出Http请求; 2)Servlet容器解析Web客户的Http请求; 3)Servlet容器...
  • 我的HTTP服务器

    千次阅读 2010-08-11 13:02:00
    轻量级的HTTP服务器,功能控制、扩展方便,能够很容易就把代码集成到其他winform应用。  效果图 用IE访问 欢迎交流 MSN:hunk.cai@hotmail.com QQ:157859303 有兴趣想开发自己的HTTP服务器的,请...
  • Http服务器--使用Http服务做转发

    千次阅读 2017-11-16 10:20:08
    使用Http服务器解决前后端联调中的跨域问题var http = require('http');http.createServer(function (req, res) { res.setHeader('Access-Control-Allow-Origin', '*'); // 设置请求头 允许所有域名访问 解决跨域 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 299,871
精华内容 119,948
关键字:

http服务器