HTTP基础知识和网络请求

1.什么是协议

协议是一种约定,规定好一种信息的格式,如果发送方按照这种请求格式发送信息,那么接收端就要按照这样的格式解析数据,这就是协议。

2.OSI模型结构分为七层

  • 网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
  • IP协议对应于网络层
  • TCP协议对应于传输层
  • HTTP协议对应于应用层,还有FTP、TELNET等
  • TCP/IP协议是传输层协议,主要解决数据如何在网络中传输;HTTP是应用层协议,主要解决如何包装使用数据,由请求和响应构成

3.什么是HTTP协议

HTTP协议即超文本传输协议(Hypertext Transfer Protocol),是Web联网的基础,也是手机PC联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,从建立连接到关闭连接的过程称为“一次连接”

  • HTTP请求
  • HTTP响应
    响应码:
    ​ 1xx:收到请求,需要请求者继续执行操作,比较少用。
    ​ 2xx:请求成功。 200 OK,请求正常
    ​ 3xx:重定向,浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取。 301 永久性跳转,比如域名过期换个域名; 302 临时性跳转
    ​ 4xx:客户端错误。 400 请求出错,比如语法协议; 403 没权限访问; 404 Not Found,页面找不到错误; 405 Method not allowed 不允许此方法进行提交,比如接口指定POST方式,而你用了GET请求
    ​ 5xx:服务器错误。 500 服务器内部报错; 503 Service Unavailable,服务器宕机

4.HTTP和HTTPS的关系

  • Hyper Text Transfer Protocol over SecureSocket Layer
  • 主要由两部分组成:HTTP+SSL/TLS
  • 比HTTP协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性,增加破解成本
  • 缺点:相同网络环境下,https协议会使页面的加载时间延长近50%,增加额外的计算资源消耗,增加10%到20%的耗电等;不过利大于弊,所以https是趋势,相关资源损耗也在持续下降
  • 如果做软件压测,直接压测内网ip,通过压测公网域名,不管是http还是https,都会带来额外的损耗导致结果不准确

5.什么是URL(统一资源定位符)

标准格式:协议://服务器IP:端口/路径?key1=value1&key2=value2
协议:不同的协议有不同的解析方式
服务器IP:网络中存在无数的主机,要访问哪一台,通过公网IP区分
端口:一台主机上运行着很多的进程,为了区分不同的进程,一个端口对应一个进程,http默认的端口是80
路径:资源有很多,为了进一步区分资源所在的路径(后端接口,一般称为“接口路径”,“接口”)

6.网络请求代码实例

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Test {
    public static void main(String[] args) throws IOException {
        // 创建URL对象
        URL url = new URL("https://www.baidu.com/");
        // 打开连接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        // 获取响应码
        int responseCode = connection.getResponseCode();
        if (responseCode >= 200 && responseCode <= 299) {
            try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));) {
                StringBuilder str = new StringBuilder();
                String temp;
                while ((temp = in.readLine()) != null) {
                    str.append(temp);
                }
                System.out.println(str);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

7.浏览器输入一个地址,到页面展示中间经历了哪些处理

  1. 浏览器输入url,解析url地址是否合法
  2. 浏览器检查是否有缓存,如果有直接显示,如果没有跳到第三步
  3. 在发送http请求时,需要域名解析(DNS解析),解析获取对应的ip地址
  4. 浏览器向服务器发起tcp链接,完成tcp三次握手
  5. 握手成功后,浏览器向服务器发送http请求
  6. 服务器收到处理的请求,将数据返回至浏览器
  7. 浏览器收到http响应
  8. 浏览器解析响应。如果响应可以缓存则存入缓存
  9. 浏览器进行页面渲染
posted @ 2021-01-22 09:46  Gen2021  阅读(265)  评论(0)    收藏  举报