java http 1.1_HTTP1.0 HTTP 1.1 HTTP 2.0主要区别

HTTP1.0 HTTP 1.1主要区别

长连接

HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。

HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。

节约带宽

HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。

这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。

HOST域

现在可以web server例如tomat,设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。

HTTP1.0是没有host域的,HTTP1.1才支持这个参数。

HTTP1.1 HTTP 2.0主要区别

多路复用

HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

关于多路复用,可以参看学习NIO 。

数据压缩

HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

服务器推送

意思是说,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。

参考的文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是 Spring Boot 集成 SAML 2.0 的步骤: 1. 首先,在 pom.xml 中添加 Spring Security SAML 依赖: ```xml <dependency> <groupId>org.springframework.security.extensions</groupId> <artifactId>spring-security-saml2-core</artifactId> <version>1.0.10.RELEASE</version> </dependency> ``` 2. 配置 SAML 相关的属性,可以在 application.properties 或者 application.yml 文件中添加以下属性: ```properties # SAML SP 配置 saml2.metadata-url=https://idp.example.com/metadata saml2.entity-id=https://sp.example.com/metadata saml2.private-key=classpath:/saml/private.key saml2.certificate=classpath:/saml/certificate.crt saml2.credentials-issuer=SP Entity ID saml2.name-id=urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified saml2.sign-metadata=true saml2.sign-requests=true saml2.sign-responses=true ``` 3. 创建 SAML 配置类,继承 SAMLConfigurerAdapter 并重写 configure 方法: ```java @Configuration @EnableWebSecurity public class SAMLConfig extends SAMLConfigurerAdapter { @Autowired private SAMLUserDetailsService samlUserDetailsService; @Override public void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/saml/**").permitAll() .anyRequest().authenticated() .and() .apply(saml()) .userDetailsService(samlUserDetailsService) .sso() .defaultSuccessURL("/home") .and() .logout() .logoutSuccessUrl("/") .and() .metadata() .defaultIDP() .singleSignOnService() .binding("urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect") .url("https://idp.example.com/sso") .and() .entityID("https://idp.example.com/metadata") .and() .and() .keyManager() .privateKeyDERLocation("classpath:/saml/private.key") .publicKeyPEMLocation("classpath:/saml/certificate.crt"); } @Bean public SAMLConfigurer saml() { return new SAMLConfigurer(); } } ``` 这里的 SAMLUserDetailsService 是自定义的用户服务,用于根据 SAML 断言中的信息获取用户信息。 4. 创建 SAMLUserDetailsService 类,实现 SAMLUserDetailsService 接口: ```java @Service public class SAMLUserDetailsServiceImpl implements SAMLUserDetailsService { @Override public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException { // 根据断言中的信息获取用户信息 String username = credential.getNameID().getValue(); List<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority("ROLE_USER")); return new User(username, "", authorities); } } ``` 5. 创建 SAML 元数据文件,保存在 classpath:/saml/metadata.xml 中: ```xml <?xml version="1.0" encoding="UTF-8"?> <EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:shibmd="urn:mace:shibboleth:metadata:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" entityID="https://sp.example.com/metadata"> <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> <KeyDescriptor use="signing"> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate> <!-- 将 SP 的公钥放在这里 --> </ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> </KeyDescriptor> <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://sp.example.com/saml/logout"/> <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat> <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sp.example.com/saml/acs" index="1"/> </SPSSODescriptor> </EntityDescriptor> ``` 6. 创建 SP 的私钥和证书,保存在 classpath:/saml/private.key 和 classpath:/saml/certificate.crt 中。 至此,我们完成了 Spring Boot 集成 SAML 2.0 的全部步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值