quartz/content/computer_sci/web/http/http_introduction.md
2024-03-09 16:50:03 +08:00

78 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: HTTP Brief Introduction
tags:
- web
- http
date: 2024-03-07
---
HTTP是在网络上传输HTML的协议用于浏览器和服务器的通信。
## Learn HTTP by devTool
![](computer_sci/web/http/attachments/Pasted%20image%2020240307164822.png)
* `Elements`显示网页的结构
* `Network`显示浏览器和服务器的通信
* `Console` 用于debug的控制台debug JS的运行
![](computer_sci/web/http/attachments/Pasted%20image%2020240308153643.png)
可以看出来,浏览器发送给谷歌服务器`GET`的请求。
`GET`表示一个读取请求,将从服务器获得网页数据,`/`表示URL的路径URL总是以`/`开头,`/`就表示首页
HTTP响应分为Header和Body两部分Body是可选项我们在`Network`中看到的Header最重要的几行如下
```
200 OK
```
`200`表示一个成功的响应,后面的`OK`是说明。失败的响应有`404 Not Found`:网页不存在,`500 Internal Server Error`:服务器内部出错,等等。
```
Content-Type: text/html
```
`Content-Type`指示响应的内容,这里是`text/html`表示HTML网页。请注意浏览器就是依靠`Content-Type`来判断响应的内容是网页还是图片是视频还是音乐。浏览器并不靠URL来判断响应的内容所以即使URL是`http://example.com/abc.jpg`,它也不一定就是图片。
HTTP响应的**Body就是HTML源码**
HTTP请求的流程
> [!abstract]
> 步骤1浏览器首先向服务器发送HTTP请求请求包括
>
> 方法:`GET`还是`POST``GET`仅请求资源,`POST`会附带用户数据;
>
> 路径:`/full/url/path`
>
> 域名由Host头指定`Host: www.sina.com.cn`
>
> 以及其他相关的Header
>
> 如果是POST那么请求还包括一个Body包含用户数据。
> [!abstract]
> 步骤2服务器向浏览器返回HTTP响应响应包括
>
> 响应代码:`200`表示成功,`3xx`表示重定向,`4xx`表示客户端发送的请求有错误,`5xx`表示服务器端处理时发生了错误;
>
> 响应类型:由`Content-Type`指定,例如:`Content-Type: text/html;charset=utf-8`表示响应类型是HTML文本并且编码是`UTF-8``Content-Type: image/jpeg`表示响应类型是JPEG格式的图片
>
> 以及其他相关的Header
>
> 通常服务器的HTTP响应会携带内容也就是有一个Body包含响应的内容网页的HTML源码就在Body中。
> [!abstract]
> 步骤3如果浏览器还需要继续向服务器请求其他资源比如图片就再次发出HTTP请求重复步骤1、2。
Web采用的HTTP协议采用了非常简单的请求-响应模式从而大大简化了开发。当我们编写一个页面时我们只需要在HTTP响应中把HTML发送出去不需要考虑如何附带图片、视频等浏览器如果需要请求图片和视频它会发送另一个HTTP请求因此一个HTTP请求只处理一个资源。
# Reference
* https://www.liaoxuefeng.com/wiki/1016959663602400/1017804782304672