精华内容
下载资源
问答
  • 文章目录简介基本流程CleartextHttp2ServerUpgradeHandlerHttp2ConnectionHandler总结 简介 上一篇文章中,我们提到了如何在netty中配置TLS,让他支持HTTP2。事实上TLS并不是https的一个必须要求,它只是建议的标准...

    简介

    上一篇文章中,我们提到了如何在netty中配置TLS,让他支持HTTP2。事实上TLS并不是https的一个必须要求,它只是建议的标准。那么除了TLS之外,还需要如何设置才能让netty支持http2呢?一起来看看吧。

    基本流程

    netty支持http2有两种情况,第一种情况是使用tls,在这种情况下需要添加一个ProtocolNegotiationHandler来对握手之后的协议进行协商,在协商之后,需要决定到底使用哪一种协议。

    上一篇文章,我们已经介绍TLS支持http2的细节了,这里不再赘述,感兴趣的朋友可以查看我之前的文章。

    如果不使用tls,那么有两种情况,一种是直接使用http1.1了,我们需要为http1.1添加一个ChannelInboundHandler即可。

    另一种情况就是使用clear text从HTTP1.1升级到HTTP2。

    HTTP/2 ClearText也叫做h2c,我们看一个简单的升级请求,首先是客户端请求:

    GET /index HTTP/1.1
    Host: server.flydean.com
    Connection: Upgrade, HTTP2-Settings
    Upgrade: h2c 
    HTTP2-Settings: (SETTINGS payload) 
    

    然后是服务器端的响应,如果服务器端不支持升级,则返回:

    
    HTTP/1.1 200 OK 
    Content-length: 100
    Content-type: text/html
    
    (... HTTP/1.1 response ...)
    

    如果服务器支持升级,则返回:

    HTTP/1.1 101 Switching Protocols 
    Connection: Upgrade
    Upgrade: h2c
    
    (... HTTP/2 response ...)
    

    CleartextHttp2ServerUpgradeHandler

    有了上面的基本流程,我们只需要在netty中提供对应的handler类就可以解决netty对http2的支持了。

    不过上面的升级流程看起来比较复杂,所以netty为我们提供了一个封装好的类:CleartextHttp2ServerUpgradeHandler来实现h2c的功能。

    这个类需要传入3个参数,分别是HttpServerCodec、HttpServerUpgradeHandler和ChannelHandler。

    HttpServerCodec就是处理http server的编码类,一般我们使用HttpServerCodec。

    HttpServerUpgradeHandler是从http1.1升级到http2的处理类。

    netty也提供了一个现成的类:HttpServerUpgradeHandler,来处理升级的编码。

    HttpServerUpgradeHandler需要两个参数,一个是sourceCodec,也就是http原始的编码类HttpServerCodec,一个是用来返回UpgradeCodec的工厂类,返回netty自带的Http2ServerUpgradeCodec。

        public HttpServerUpgradeHandler(SourceCodec sourceCodec, UpgradeCodecFactory upgradeCodecFactory) {
            this(sourceCodec, upgradeCodecFactory, 0);
        }
    

    ChannelHandler是真正处理HTTP2的handler,我们可以根据需要对这个handler进行自定义。

    有了UpgradeHandler,将其加入ChannelPipeline即可。

    Http2ConnectionHandler

    不管是HttpServerUpgradeHandler,还是CleartextHttp2ServerUpgradeHandler,都需要传入一个真正能够处理http2的handler。这个handler就是Http2ConnectionHandler。

    Http2ConnectionHandler是一个实现类,它已经实现了处理各种inbound frame events的事件,然后将这些事件委托给 Http2FrameListener。

    所以Http2ConnectionHandler需要跟Http2FrameListener配合使用。

    这里要详细讲解一下Http2FrameListener,它主要处理HTTP2 frame的各种事件。

    先来看下http2FrameListener中提供的event trigger方法:

    从上图可以看到,主要是各种frame的事件触发方法,其中http2中有这样几种frame:

    • DATA frame
    • HEADERS frame
    • PRIORITY frame
    • RST_STREAM frame
    • SETTINGS acknowledgment frame
    • SETTINGS frame
    • PING frame
    • PING acknowledgment
    • PUSH_PROMISE frame
    • GO_AWAY frame
    • WINDOW_UPDATE frame
    • Unknown Frame

    这几种frame基本上列举了http2 frame中所有的类型。

    我们要做的就是自定义一个handler类,继承Http2ConnectionHandler,然后实现Http2FrameListener接口即可。

        public final class CustHttp2Handler extends Http2ConnectionHandler implements Http2FrameListener
    

    在使用clear text从HTTP1.1升级到HTTP2的过程中,我们需要处理两个事情,第一个事情就是处理http1.1使用http头升级到http2,可以重写继承自Http2ConnectionHandler的userEventTriggered方法,通过判断event的类型是否是UpgradeEvent,来触发对应的Http2FrameListener接口中的方法,比如这里的onHeadersRead:

    
        /**
         * 处理HTTP upgrade事件
         */
        @Override
        public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
            if (evt instanceof HttpServerUpgradeHandler.UpgradeEvent) {
                HttpServerUpgradeHandler.UpgradeEvent upgradeEvent =
                        (HttpServerUpgradeHandler.UpgradeEvent) evt;
                onHeadersRead(ctx, 1, upgradeToHttp2Headers(upgradeEvent.upgradeRequest()), 0 , true);
            }
            super.userEventTriggered(ctx, evt);
        }
    

    upgradeToHttp2Headers方法将传入的FullHttpRequest,转换成为Http2Headers:

        private static Http2Headers upgradeToHttp2Headers(FullHttpRequest request) {
            CharSequence host = request.headers().get(HttpHeaderNames.HOST);
            Http2Headers http2Headers = new DefaultHttp2Headers()
                    .method(HttpMethod.GET.asciiName())
                    .path(request.uri())
                    .scheme(HttpScheme.HTTP.name());
            if (host != null) {
                http2Headers.authority(host);
            }
            return http2Headers;
        }
    

    还有一个要实现的方法,就是sendResponse方法,将数据写回给客户端,回写需要包含headers和data两部分,如下所示:

        /**
         * 发送响应数据到客户端
         */
        private void sendResponse(ChannelHandlerContext ctx, int streamId, ByteBuf payload) {
            Http2Headers headers = new DefaultHttp2Headers().status(OK.codeAsText());
            encoder().writeHeaders(ctx, streamId, headers, 0, false, ctx.newPromise());
            encoder().writeData(ctx, streamId, payload, 0, true, ctx.newPromise());
        }
    

    总结

    到此,一个处理clear text从HTTP1.1升级到HTTP2的handler就做好了。加上之前讲解的TLS扩展协议的支持,就构成了一个完整的支持http2的netty服务器。

    本文的例子可以参考:learn-netty4

    本文已收录于 http://www.flydean.com/27-netty-http2/

    最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

    展开全文
  • nginx配置域名启用http2协议

    万次阅读 2019-05-13 22:13:30
    HTTP1.1则在1999年才开始广泛应用于现在的各大...现在基本都主流浏览器都支持HTTP2协议,许多支持HTTPS的网站基本也都启用了HTTP2协议,若我们的域名配置了HTTPS证书,可以在nginx中配置启用HTTP2协议,加速网站响应...

    HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。HTTP/2在支持HTTP1.1的基础上拓展了, 较之1.1在性能上有着大幅度的提升。现在基本都主流浏览器都支持HTTP2协议,许多支持HTTPS的网站基本也都启用了 HTTP2协议,若我们的域名配置了HTTPS证书,可以在nginx中配置启用HTTP2协议,加速网站响应效率。

     

    一、HTTP 2.0简述

    1、HTTP 2.0简介

    HTTP/2 (原名HTTP/2.0)即超文本传输协议 2.0,是下一代HTTP协议。是由互联网工程任务组IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。HTTP 2.0在2013年8月进行首次合作共事性测试。目前在开放互联网上HTTP 2.0将只用于https://网址,而http://网址将继续使用HTTP 1.1。

    2、HTTP 2.0 优点

    HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语意兼容的基础上,进一步减少了网络的延迟。实现低延迟高吞吐量。对于前端开发者而言,减少了优化工作。有以下优点

    • 二进制分帧
    • 首部压缩
    • 流量控制
    • 多路复用
    • 请求优先级
    • 服务器推送

    二、前提条件

    1、openssl的版本必须在1.0.2e及以上,在 Chrome 51后,谷歌去掉了对 NPN 的支持,HTTP2不能用了会证书错误,而openssl1.0.2e之后的版本修复了此问题

    2、开启https加密,目前http2.0只支持开启了https的网站

    3、nginx的版本必须在1.9.5以上,原因是nginx从1.9.5开始,已经用 http_v2_module 模块替换了 ngx_http_spdy_module

    三、准备openssl

    1、查看openssl

    $ openssl version 查看是否安装了openssl,安装了如下,且1.0.2k大于e

    2、安装openssl

    若没安装或者版本低于1.0.2e,去下载安装

    下载 $ wget https://www.openssl.org/source/openssl-1.0.2r.tar.gz
    解压 $ tar zxvf openssl-1.0.2r.tar.gz
    进入 $ cd openssl-1.0.2r
    配置 $ ./config
    编译 $ make 
    安装 $ make install

    3、更新openssl

    由于是源码编译安装,若之前安装过,openssl相关命令配置不会自动更新,需手动更新

    备份旧的命令 

    $ mv /usr/bin/openssl /usr/bin/openssl.old
    $ mv /usr/include/openssl /usr/include/openssl.old

    添加软连接
    $ ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
    $ ln -s /usr/local/ssl/include/openssl /usr/include/openssl

    写入openssl库文件的搜索路径
    $ echo "/usr/local/ssl/lib" >> /etc/ld.so.conf

    使修改后的搜索路径生效 
    $ ldconfig

    重新查看openssl版本$ openssl version

    若openssl已经安装且版本大于1.0.2e,以上操作可省略

    四、修改nginx配置

    1、查看nginx版本

    $ /usr/local/openresty/nginx/sbin/nginx -V

    nginx version: openresty/1.13.6.2
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
    built with OpenSSL 1.0.2k-fips  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 
    --add-module=../ngx_devel_kit-0.3.0 --add-module=../iconv-nginx-module-0.14 
    --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 
    --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.32 
    --add-module=../form-input-nginx-module-0.12 
    --add-module=../encrypted-session-nginx-module-0.08 --add-module=../ngx_postgres-1.0 
    --add-module=../srcache-nginx-module-0.31 
    --add-module=../ngx_lua-0.10.13 --add-module=../ngx_lua_upstream-0.07 
    --add-module=../headers-more-nginx-module-0.33 
    --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 
    --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 
    --add-module=../rds-csv-nginx-module-0.09 
    --add-module=../ngx_stream_lua-0.0.5 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib 
    --with-http_realip_module 
    --with-http_stub_status_module --with-http_ssl_module 
    --with-http_gzip_static_module --with-stream --with-stream_ssl_module

    看是否安装了with-http_v2_module,这里看到没有安装要安装

    http_ssl_module看到已经安装了,若没有安装也要安装下

    2、重新编译nginx

    1、添加ngx_http_v2_module同时要带上原来的参数

    $ ./configure --prefix=/usr/local/openresty --with-cc-opt=-O2 \
    --with-http_realip_module \
    --with-http_v2_module \
    --with-http_stub_status_module \

    --with-http_ssl_module \
    --with-http_gzip_static_module \
    --with-stream \
    --with-stream_ssl_module \
    --with-luajit

    若要更新openssl加上

    --with-openssl=/usr/local/ssl \ 

    重新编译注意事项:

    1、--prefix=/usr/local/openresty,是配置安装路径,而不是--prefix=/usr/local/openresty/nginx

    2、要添加--with-luajit,重新配置luajit,不然启动nginx找不到libluajit-5.1.so.2,还得手动去添加

    3、带有--add-module的模块无需带上,编译时openresty会自动添加

    2、接下来$ make 编译,注意不要执行make install安装了,这样会覆盖原来的安装

    3、备份原来的nginx二进制文件,以免出错时便于回退

    $ cp /usr/local/openresty/nginx/sbin/nginx /usr/local/openresty/nginx/sbin/nginx.bak

    4、用新编译的nginx替换掉旧的nginx

    $ cp  /opt/soft/openresty-1.13.6.1/build/nginx-1.13.6/objs/nginx  /usr/local/openresty/nginx/sbin/nginx

    5、查看添加是否成功

    $ /usr/local/openresty/nginx/sbin/nginx -V

    nginx version: openresty/1.13.6.2
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
    built with OpenSSL 1.0.2k-fips  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/usr/local/openresty/nginx 
    --with-cc-opt='-O2 -O2' 
    --add-module=../ngx_devel_kit-0.3.0 
    ................. 
    --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib 
    --with-http_realip_module 
    --with-http_v2_module 
    --with-http_stub_status_module 
    --with-http_ssl_module 
    --with-http_gzip_static_module 
    --with-stream 
    --with-stream_ssl_module

    可以看到 http_v2_module模块以已经添加成功

    6、配置nginx.conf

     server {
     	listen       80;
            listen 443 ssl http2; #增加http2
            server_name www.uwsxxx.com;
            #开启ssl并添加证书
            ssl on;
            ssl_certificate cert/nginx_uws.pem;
            ssl_certificate_key cert/nginx_uws.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
            ssl_prefer_server_ciphers on;
            
            access_log /usr/local/openresty/nginx/logs/access.log combined;
            
            location / {
                     proxy_set_header Host $host:$proxy_port;
                     proxy_set_header   X-Real-IP   $remote_addr;
                     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                     proxy_pass http://uws02:7867;
    
                     proxy_redirect http:// $scheme://;
                	 if ( $server_port = 80 ){
                        rewrite ^(.*) https://$server_name$1 permanent;
                 	 }
    
            }
    }
    

    7、重启nginx

    $ /usr/local/openresty/bin/openresty -s reload 加载配置无效,必须停止后重新启动

    必须先停止 $ /usr/local/openresty/bin/openresty -s stop

    再重启启动 $ /usr/local/openresty/bin/openresty 

    8、查看生效 

    在chrome浏览器地址栏中输入我们的域名:https://www.uwscloud.com 访问,然后再输入chrome://net-internals/#http2 查看启用了http2的域名,可以看到配置的域名已经出现了

    参考:http://nginx.org/en/docs/http/ngx_http_v2_module.html

    参考:https://www.cnblogs.com/tinywan/p/7860774.html

    展开全文
  • Java对HTTP2的支持

    万次阅读 2018-07-02 14:15:28
    说到Java对HTTP2的支持情况,实质上包含两个部分。一个就是Java对TLS 1.2及其ALPN扩展的支持情况,另一个就是Java对HTTP2客户端、服务器的编程支持情况。 1. Java对TLS 1.2及其ALPN扩展的支持 1.1 Java 6 初始时...

    说到Java对HTTP2的支持情况,实质上包含两个部分。一个就是Java对TLS 1.2及其ALPN扩展的支持情况,另一个就是Java对HTTP2客户端、服务器的编程支持情况。

    1. Java对TLS 1.2及其ALPN扩展的支持

    1.1 Java 6
    初始时不支持TLS 1.2,但在最新的更新包(6u191)支持,并且客户端默认即使用TLS 1.2。

    但是为了支持HTTP2,还要借助于Jetty的ALPN模块alpn-boot。

    下载alpn-boot的jar,并且在启动JVM时加参数java -Xbootclasspath/p:<path_to_alpn_boot_jar> ...

    1.2 Java 7

    初始时都不支持TLS 1.2,但在最新的更新包(7u181)支持,并且客户端默认即使用TLS 1.2。

    但是为了支持HTTP2,还要借助于Jetty的ALPN模块alpn-boot。

    下载alpn-boot的jar,并且在启动JVM时加参数java -Xbootclasspath/p:<path_to_alpn_boot_jar> ...

    1.3 Java 8

    初始即支持TLS 1.2,并且客户端默认即使用TLS 1.2。

    但是为了支持HTTP2,还要借助于Jetty的ALPN模块alpn-boot。

    下载alpn-boot的jar,并且在启动JVM时加参数java -Xbootclasspath/p:<path_to_alpn_boot_jar> ...

    1.4 Java 9

    初始即支持TLS 1.2,并且客户端默认即使用TLS 1.2。

    通过JEP 244, TLS ALPN Extension支持ALPN,完整支持了HTTP2。

    1.5 Java 10

    同Java 9。

    1.6 Java 11

    同Java 9,并进而支持TLS 1.3。

    2. Java对HTTP客户端、服务器的编程支持

    2.1 客户端Java API

    从Java 9开始,通过JEP 110, HTTP/2 Client API proposal提供了对HTTP 2.0和WebSocket客户端的编程支持。以HttpClient替换了HttpURLConnection/HttpsURLConnection。

    但是,该模块仍然属于沙箱试验,Java 10仍然未能正式发布。为JVM添加模块后使用:

    --add-modules=jdk.incubator.http

    从Java 11开始,JEP 110, HTTP/2 Client API终于正式发布,模块名java.net.http

    2.2 服务端Servlet 4.0

    在JavaEE 8中,正式发布了JSR 369,支持Servlet 4.0。

     

    参考链接:

    http://www.oracle.com/technetwork/java/javase/jdk-relnotes-index-2162236.html

     

    展开全文
  • ngixn异常 net::ERR_HTTP2_PROTOCOL_ERROR 200

    万次阅读 2020-07-16 14:01:50
    再描述下现象:不是一个接口报上面的错误,多个接口多次调用都会偶现上面的问题:net::ERR_HTTP2_PROTOCOL_ERROR 200 所以基本断定不是单个接口 或 数据库的问题,因为我们用了四台nginx做负载均衡和转发,所以基本...

    先看页面报错页面报错实例:

    再描述下现象:不是一个接口报上面的错误,多个接口多次调用都会偶现上面的问题:net::ERR_HTTP2_PROTOCOL_ERROR 200

    所以基本断定不是单个接口 或 数据库的问题,因为我们用了四台nginx做负载均衡和转发,所以基本断定是nginx出了问题,但是是nginx中的哪台机器的什么原因导致的呢?

    下面给出2中定位策略:

    1)在每次页面有错误的时候,观察http中的header信息,统计每次header中via标签对应的nginx信息。此方法可以得出出问题的nginx。

    如下图:

     

    2)夜深人静,没有别人调用服务,自己进行调用,分别查看每台nginx服务的日志文件,看出问题的时候哪个机器会有error信息,这里给出我的机器错误日志:

    2020/07/13 11:45:52 [error] 20217#0: *85294045 open() "/usr/local/nginx-1.18/html/50x.html" failed (2: No such file or directory), client: 100.97.200.204, server: www.test.com, request: "POST /api/core/scratch/exercise/ HTTP/1.1", host: "www.test.com", referrer: "https://www.test.com/scratch/v3/?token=aee00163e0b79bf004a0001&projectType=1&practiceType=2&lesson=0172cd54dad800163e0b79bf004a0001&class=7712bc6db96f48febccafe008d9869a1&templateId=65032&category=2&role=1&fr=ts&canSave=1&isOnline=0"

    此方法可以得出错误的具体原因,我这里看上面的原因就是文件不存在,无法打开文件。

    然后与运维沟通发现nginx今天做了升级,但是仅仅reload,没有进行重启,所以缓存的一些信息导致的问题,解决方案就是运维重启下nginx就好了。

    这里给一个nginx重启和reload的差别的文章:

    https://www.cnblogs.com/fanggege/p/12145956.html

     

    展开全文
  • 问题描述 4月1日系统部署上线,发现上传图片功能跟报错,报错的是获取阿里云OSS签名接口,接口中并没有文件的上传操作,报错信息... 而Postman工具并没有遵循W3C准则,会忽略http header的设置,所以在postman中接口是正常的.
  • HTTP/2

    万次阅读 2018-07-30 11:31:32
    关于HTTP/2,最近你可能没少听到过他。首先,如果你了解过Java 9的特性,那么你会发现在Java9中,提供了新的方式来处理HTTP调用,提供了新的HTTP Client,将替代HttpURLConnection,并提供对WebSocket和HTTP/2的支持...
  • 思考gRPC :为什么是HTTP/2

    万次阅读 2018-07-19 18:55:50
    但是大多数情况下,讨论都是基于gRPC over HTTP2。 下面从一个真实的gRPC SayHello 请求,查看它在HTTP/2上是怎样实现的。用wireshark抓包: 可以看到下面这些Header: Header: :authority: localhost:...
  • 如何判断网站是否使用了HTTP/2

    万次阅读 2017-08-08 14:50:37
    1. chrome://net-internals/#http2 在浏览器输入chrome://net-internals/打开网络观察组件,然后选择HTTP/2 2. chrome.loadTimes 这种方法更简单,支持「Http2」的chrome版本,可通过其提供的chrome.load...
  • */ private void ... http2Connection = new Http2Connection.Builder(true) .socket(socket, route.address().url().host(), source, sink) .listener(this) .build(); http2Connection.start(); } }
  • http tunnel && http connect method

    万次阅读 2017-01-06 19:49:10
    在fiddler抓包时,出现了很多 tunnel to,图标是把锁,看右侧的详情,发现使用的http connect方法。如下图 查了很多资料后,总结如下 connect是http众多方法中的其中一种,它跟post、get、put、options方法是并列...
  • 解决retrofit2.adapter.rxjava.HttpException: HTTP 400 错误 前言   最近项目中遇到一件怪事,在get请求中发现没有数据,在debug时候发现居然爆了一个retrofit2.adapter.rxjava.HttpException: HTTP 400错误...
  • Android之Http通信——2.详解Http的消息头 本节引言: 在上一节中我们对HTTP的一些概念性的东西进行了了解:什么是HTTP协议,1.0版本与1.1版本的区别,SYN和ACK,TCP/IP三次握手, HTTP操作流程,几种不同的请求方式...
  • curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1) 起因:自己顶不住好奇心,升级了Mac系统。界面看起来,真香!然鹅用起来其实也挺香,就是有些开发常用的竟然挂掉了,挂掉了。 最直观的...
  • HTTPHTTP1.1、 HTTP/2的区别

    万次阅读 多人点赞 2018-11-11 16:12:48
    HTTPHTTP1.1、 HTTP/2的区别
  • Question:A:docker-machine env --shell cmd default //或者 docker-machine env defaultcopy 一下然后就好了
  • http://blog.csdn.net/eastmount/article/details/50637476 其中包括C语言的Word2vec源代码(从官网下载),自定义爬取的三大百科(百度百科、互动百科、维基百科)中文语料,涉及到国家、景区、动物和人物。 同时...
  • struts2必备jar包官方绿色版

    万次下载 热门讨论 2012-10-08 18:02:42
    struts2最新官网的jar包,已经是最少的包的无法再删除了, commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar commons-logging-1.1.1.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar ...
  • HTTP工作流程

    万次阅读 2019-10-28 16:47:57
    什么是HTTP事务2. 报文流3. 请求报文4. 响应报文5. HTTP的工作流程6. 域名解析过程:7. TCP三次握手过程8. HTTP协议栈中各层数据流 1. 什么是HTTP事务 HTTP事务 = 请求命令 + 响应结果 是HTTP请求的最小处理单元...
  • python urllib2 实现HTTP 的GET POST 请求

    万次阅读 2016-05-25 18:49:50
    1. python 一般可以用模块urllib2 来实现GET POST的http 请求 1.1 GET 请求 import os,sys import urllib2 http_str = 'http://127.0.0.1:12345/apps/' + serviceLine + '/clusters/' + clusterName url = ...
  • 关于 HTTP 常用 Method

    万次阅读 2018-08-02 02:01:57
    对于 HTTP 请求方法,seaconch 一直是有很多疑惑,按照计划今天就来了解一下各个请求有何区别 概述 根据HTTP标准,HTTP请求可以使用多种请求方法。 HTTP1.0定义了三种请求方法: GET、POST 和 HEAD方法。 ...
  • http post 方法传递参数的2种方式

    万次阅读 2013-10-12 18:16:19
    try{ HttpPost httpPost = new HttpPost(url); StringEntity stringEntity = new ...//param参数,可以为"key1=value1&key2=value2"的一串字符串 stringEntity.setContentType("application/x-www-form-u
  • JQuery插件select2

    千次下载 热门讨论 2015-11-22 17:19:43
    美化了单选框和复选框丑丑的问题,具体使用文档参考:http://blog.csdn.net/qq_19558705/article/details/49978731
  • mac上httppost请求工具-Paw HTTP Client for Mac 2.0.7.dmg

    千次下载 热门讨论 2014-09-19 16:22:14
    1.mac上httppost请求工具-Paw HTTP Client for Mac 2.0.7.dmg 2.不比谷歌浏览器上的postman差, 3.该软件大小只有2.7M 4,里面包括使用文档
  • axis2所有jar包

    千次下载 热门讨论 2014-12-26 10:03:56
    里面包括使用axis2需要的全部jar包,另外附上《java使用axis2调用webservice接口实例》代码:http://blog.csdn.net/xlb744868186/article/details/42167811
  • 最新版本的Struts2+Spring4+Hibernate4框架整合

    千次下载 热门讨论 2014-10-15 14:39:34
    整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,395,758
精华内容 3,358,303
关键字:

http2