栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

网络原理(HTTP协议)-------javaweb

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

网络原理(HTTP协议)-------javaweb

面试题1:HTTPS的传输过程?

1)客户端先从服务器那边获取到证书,证书里面包含了公钥A(证书里面的公钥A是服务器发送过去的);

2)客户端对证书进行检验(到第三方机构进行检验)

3)客户端生成一个对称密钥,使用公钥A对对称密钥进行加密,发送给服务器;

4)服务器收到这个请求之后,使用私钥B进行解密,得到对称密钥;

5)客户端发出的后续的请求,后续的请求都是通过这个对称密钥进行加密的,收到的数据也是通过这个对称密钥进行解密的;

面试题2:HTTP和HTTPS的区别?

http是超文本传输协议,信息是明文传输, https则具安全性的ssl/tls加密传输协议。

1.Http和https使用完全不同的连接方法和不同的端口。前者是80,后者是443。Http连接是非常简单和无状态的;HttpS协议是由SSL/TLS+HTTP协议构建的网络协议,可用于加密传输和身份认证。它比HTTP协议更安全。

2.超文本传输协议,缩写为HTTP,是分布式、协作式和超媒体信息系统的应用层协议,是万维网数据通信的基础,也是互联网上使用最广泛的网络传输协议。HTTP最初被设计为提供一种发布和接收HTML页面的方式。

3.HTTPS协议之所以安全,是因为HTTPS协议对传输的数据进行加密,而加密过程是由非对称加密实现的。然而,HTTPS在内容传输的加密过程中使用对称加密,而非对称加密只在证书验证阶段发挥作用。

无状态:

无状态指的是对于请求方的每个请求,接收方都当这次请求是第一次请求。

因为对于请求方而言,每次请求时,接收方就像是失忆了一样,并不会依赖请求方以往的请求所生成的数据作回应。也就是说,就像是接收方没有保存请求方的状态(数据)一样,所以叫无状态。

面试题三:为什么要有HTTPS,他是为了解决什么问题的?

1)引入对称加密,来加密数据业务;

2)引入非对称加密,来加密对称密钥;

3)引入证书,来向客户端证明当前的公钥是真实有效的;

面试题四:HTTP常见的header有哪些,都是干什么的? 面试题五:HTTP那些地方可以放自定义的数据?
3.HTTP响应格式

一:状态码(面试的时候会让你说常见的状态码,背下来)

状态码表示访问一个网站的结果

1)200  OK这是最常见的一个状态码,表示访问成功

2)404 Not Found 表示没有找到资源,我们在浏览器中输入一个URL,目的是访问对方服务器的上面的一个资源,如果这个URL标识的资源不存在,那么就会出现404;

3)403 Forbidden  这是表示访问被拒绝,有的页面通常是用户具有一定的权限才可以进行访问,登录后才可以进行访问,如果用户没有直接登陆后就进行访问,容易出现403;

4)405 Method Not Allowed前面我们介绍了HTTP中所支持的方法,例如GET,POST等等,但是对方的服务器并不一定支持所有的方法,或者不允许用户使用一些其他的方法,

5)500 Internal Server Error 这是表示服务器内部出现错误,或这是服务器的代码中遇到了一些特殊情况(服务器会异常崩溃),这是就会产生这个状态码;

6)504 Gateway Timeout表示当服务器负载和比较大的时候,服务器处理单条请求的时间就会比较长,可能会出现超时的情况;这种情况一般是双十一的时候;

7)302 Move temporarily 这是表示临时重定向,类似于呼叫转移,别人呼叫旧的号码自动连接到新密码上;例如我原来的手机号是138-0000-9000,但是我现在换号了,换成了139-0000-9000,这是我需要办理一个呼叫转移业务,这样我的朋友们就不需要知道新号码,当他们拨打我的旧号码的时候,就会自动的转到新的手机号;

比如在刚才我没有登录我的账号,访问了我的一个私有项目,变成了403,这时我再进行登录,登陆成功后,就会自动的跳转到我的私有项目的那个页面;

这时在响应报文中的header中会包含一个Location字段,表示要跳转到那个页面;

8)301--Moved Permanently 表示永久重定向,当浏览器收到这种请求时,后续的请求都会改成新的地址,301也是通过Location字段来表示需要重定向的新地址;

对于重定向来说,他会发送两次请求,这个过程中的url会发生改变,第一次的请求的url,会变成第一次响应中的Location中的地址;

状态码小节:

1)1xx表示信息型状态码:接受的请求正在处理;

2)2xx表示成功状态码,表示请求正常,处理完毕;

3)3xx表示重定向状态码,需要进行附加操作才可以完成请求;

4)4xx表示客户端错误状态码,表示服务器无法处理请求;

5)5xx表示服务器处理错误状态码,服务器请求处理出错;

4.HTTP协议的构造形式

1)直接在网络上输入一个URL

2)使用form表单,他可以构造GET和POST请求;

3)使用ajax,构造各种请求;

4)也可以通过java代码,基于其中的socket来构造出其中的HTTP请求,进行字符串拼接;

1)通过form表单创建HTTP请求;

input标签中的name属性,就构成了querystring中的key,input标签输入的内容,就成为了querystring中的value;在form中的method方法,可以控制请求的类型;

但是当给百度进行提交请求的时候,百度报错了;这是很正常的,因为百度没有支持像userld,classld这样的参数;必须客户端要和服务器相互配合;

 
https://www.baidu.com/?userID=aa&classID=bb Content-type=application/x-www-form-urlencoded

2)通过ajax来创建HTTP请求

ajax的全称是Asynchronous JavaScript and XML;以前的时候ajax主要是通过传输XML格式的数据,但是在今天很少会用到XML了;

ajax可以在浏览器渲染页面的时候,进行网络请求,如果没有这种异步机制,那么浏览器要发起网络请求,就会阻塞渲染页面的线程,这样就会导致网络请求中页面被卡死;

所以说在浏览器发送Ajax请求的时候,同时也是在进行其他工作的,当响应回来了之后,浏览器才处理刚才请求的响应;

Ajax原生的用法是比较麻烦的,我们可以引入一个第三方库;在浏览器进行页面加载的过程中,是可以同时发送多个Ajax请求的,此时这多个Ajax的请求就相当于是并发执行的关系;谁的响应先到,先去处理谁;


  
  
  

3)自己实现一个HTTP请求

发送请求:拼接字符串;接收响应:解析字符串;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

public class HTTP {
    int serverport;
    String serverIP;
    Socket socket=null;
    public HTTP(String serverIP,int Serverport) throws IOException {
        this.serverIP=serverIP;
        this.serverport=serverport;
        this.socket=new Socket(serverIP,serverport);
    }
    public String get(String url)throws IOException
    {
        System.out.println(1);
        StringBuilder request=new StringBuilder();
        //构造首行
        request.append("GET "+url+" HTTP/1.1n");
        //构造header
        request.append("Host: "+serverIP+":"+serverport+"n");
        //构造空行
        request.append("n");
        //GET请求不需要正文部分,所以到这里构造就结束了
        System.out.println(request);
        OutputStream outputStream= socket.getOutputStream();
        InputStream inputStream=socket.getInputStream();
//因为outputstream是一个字节流,以字节为单位进行写入
因此需要把Stringbulider转化成字节数组
outputStream.write(request.toString().getBytes());
 //读取响应,先创建一个缓冲区
 byte[] buffer=new byte[4096];
 //它的返回值是读取到的字节数;
 int n=inputStream.read(buffer);
 return new String(buffer,0,n);
    }
    //具体的实现方法和钢材的一样,就是多了body这个字符串
    public String post(String url,String body)throws IOException
    {
  StringBuilder request=new StringBuilder();
  //构造首行
  request.append("POST: "+url+" http/1.1n");
  //构造header
  request.append("Host: "+serverIP+":"+serverport+"n");
  request.append("Content-type: text/plainn");
  request.append("Content-Length: "+body.getBytes().length+"n");
  //构造空行
        request.append("n");
        //构造body
        request.append(body);
        OutputStream outputStream= socket.getOutputStream();
        outputStream.write(request.toString().getBytes());
        byte[] arr1=new byte[4096];
        InputStream inputStream= socket.getInputStream();
        int length=inputStream.read(arr1);
        return new String(arr1,0,length);
    }

  
}
5 HTTPS和HTTP的区别(面试必考)

1)什么是HTTPS

HTTPS就是在HTTP协议的基础上引入了一个加密层,本质上是套上了一层TLS/SSL协议,正常情况下HTTP协议都是按照文本的格式明文传输,这是就有可能发生流量劫持;因为从源主机(客户端发送的主机)到目标主机(服务器进程所在的主机)要经过很多的网络设备,例如路由器和交换机;这些路由器和交换机甚至可以做到一些应用层级别的解析;

例如URL网址是a,就偷偷的改成b,通过inferer知道上一个页面,就偷偷插入一个小广告啥的;

相关概念:
明文:真正要传输的信息
密文:加密之后的信息
密钥:可以给予一个密钥,一般是一个字符串,将一个数据(文本或二进制数据),密钥一般是字符串,进行加密,是有相同的密钥就可以进行解密;
加密:将铭文通过加密手段,转化成密文;
解密:将密文通过解秘手段,转化成明文;
对称加密:加密和解密使用同一个密钥;
非对称加密:加密和解密使用不同的密钥
公钥和私钥的关系:
通过公钥来进行一定的算法可以生成私钥;
对称加密,成本是比较低的,速度也是极快的;
非对称加密,成本是比较高的,速度也比较慢;

非对称加密的公钥和私钥是成对出现的;可以使用密钥1进行加密,密钥2进行解密;也可以使用密钥2进行加密,密钥1进行解密;

我们通常会把一个密钥给公开出去,别人就可以使用这个密钥来加密了,自己则会留下一个密钥进行解密;这时我们就可以把公开出去的密钥叫做公钥,把自己保留的密钥称为私钥;

1 先使用对称加密的方式,针对HTTP内的数据进行加密;

对称加密最重要的就是这个密钥,客户端和服务器首先要约定好这个密钥是什么;如果是客户端生成了密钥,就需要通过网络告知服务器,密钥是啥;密钥在网络上也是通过明文传输的方式,也容易被黑客获取;一旦密钥的传输被黑客获取到了,那么之前的对称加密也就失去了意义;

2 使用非对称加密,使用非对称加密对第一次对报文进行对称加密的密钥进行加密;

一个网站生成了一对公钥和私钥,客户端就会拿着这个公钥把自己的对称密钥进行加密,然后传输密文给服务器,服务器拿私钥解密,也就得到了密钥的明文,只要有了这个密钥,就可以对后续的数据进行对称加密来传输了;

那么本质上只要保证对称加密的传输不泄露,就可以完成一个安全运输了;

那么怎么保证客户端获取的公钥是真实可靠的,而不是黑客伪造的?

那么我们此时就可以通过证书,把公钥要放在里面,当客户端想要这个公钥的时候,就不仅仅只是索要这个公钥,这时就是索要一个证书,公钥就在这个证书里面;

这个证书不是服务器自己生成的,而是要经过第三方的认证才可以,所以当客户端拿到证书之后,就会到第三方的机构进行认证,来检测证书是否合法;证书如果合法,就可以信任其中的公钥了;

黑客是不可以伪造证书的,证书上有着一些重要信息;
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号