HTTP
一、协议
1.1 什么是协议
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。不同厂商的设备、不同的CPU以及不同的操作系统组成的计算机之间,只要遵守相同的协议就能够实现通信
二、HTTP协议简介
3.1 HTTP协议是什么
- Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。
- 客户端与服务端通信时传输的内容我们称之为报文。
- HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为“请求报文”,服务器发送给客户端的称为“响应报文”。
3.2 什么是HTTP报文
-
它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。
-
**HTTP报文的流动方向:**一次HTTP请求,HTTP报文会从“客户端”流到“代理”再流到“服务器”,在服务器工作完成之后,报文又会从“服务器”流到“代理”再流到“客户端”
-
报文的语法:
所有的HTTP报文都可以分为两类,
请求报文和响应报文
。请求和响应报文的基本报文结构大致是相同的,只有起始行的语法有所不同。
- **请求报文:**它会向Web服务器请求一个动作
- **响应报文:**它会将请求的结果返回给客户端。
3.3 浏览器查看network
3.3.1 响应的内容
- Headers:报文的头部
- Preview:预览响应的数据
- Response:响应的具体数据
- Initiator:初始化内容
- Timing:时间
- Cookies:携带的cookie
3.3.2 响应头的内容
-
General:通用头部
-
Response Headers:响应头部
-
Request Headers:请求头部
3.4 报文包
3.4.1 请求报文包
3.4.1.1 GET请求报文包
-
请求报文首行
- GET http://localhost:3000/?name=lily HTTP/1.1
- GET 请求方式是GET(其他的方式:GET(查) POST(增)PUT(上传文件)DELETE(删除)OPTIONS(跨域请求))
- http://localhost:3000/ 请求服务器地址
- HTTP/1.1 HTTP协议/1.1版本
- ?name=lily :请求参数,也叫查询字符串(query String)
-
请求报文头部
- Host: localhost:3000 访问服务器的主机名
- Connection: keep-alive 保持长链接(保持TCP连接)实际上它是一种TCP复用,每次http请求都需要tcp三次握手,浪费资源和时间,因此我们可以保持tcp通道连接一段时间,这样一次tcp连接就可以维持几次http请求
- Cache-Control: max-age=0 缓存
- Upgrade-Insecure-Requests: 1 允许https协议
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 用户代理:客户端信息通过User-Agent来区分浏览器
- Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9代表客户端允许接收的文件类型
- Accept-Encoding: gzip, deflate, br 代表客户端允许接收文件的压缩格式
- Accept-Language: zh-CN,zh;q=0.9 代表客户端支持语言
- Cookie: _ga=GA1.1.444464845.1583242232 cookie 会话控制
- Sec-Fetch-Dest :表示请求的目的地,即如何使用获取的数据;
- Sec-Fetch-Mode:请求模式
- Sec-Fetch-Site:
none:如果用户直接触发页面导航,例如在浏览器地址栏中输入地址,点击书签跳转等,就会设置none; - Sec-Fetch-User:取值是一个Boolean类型的值,true(?1)表示导航请求由用户激活触发(鼠标点击/键盘),false(?0)表示导航请求由用户激活以外的原因触发;
-
请求报文空行
-
请求报文体
POST请求的请求数据 (GET请求会在请求首行中)
3.4.1.2 POST请求报文包
-
请求报文首行
POST http://localhost:3000/ HTTP/1.1
-
请求报文头部
- Host: localhost:3000
- Connection: keep-alive
- Content-Length: 28
- Cache-Control: max-age=0
- Origin: http://localhost:52330
- Upgrade-Insecure-Requests: 1
- Content-Type: application/x-www-form-urlencoded form表单提交的数据
-
请求体类型
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36
- Sec-Fetch-Dest: document
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
- Sec-Fetch-Site: same-site
- Sec-Fetch-Mode: navigate
- Sec-Fetch-User: ?1
- Referer: http://localhost:52330/03.nodejs/day03/form.html
- Accept-Encoding: gzip, deflate, br
- Accept-Language: zh-CN,zh;q=0.9
- Cookie: _ga=GA1.1.444464845.1583242232
-
空行
-
请求报文体
username=aaaa&password=bbbbb
3.4.2 响应报文包
- 响应报文首行
- HTTP/1.1 200 OK(原因短语)
- HTTP/1.1 协议名/版本号
- 200 响应状态码
- OK 响应信息
- HTTP/1.1 200 OK(原因短语)
- 响应报文头部
- Content-Type: text/html;charset=utf8
- 响应体类型
- Date: Fri, 06 Mar 2020 0545 GMT
- 响应时间
- Connection: keep-alive
- Content-Length: 25
- 响应体长度
- Content-Type: text/html;charset=utf8
- 空行
- 响应报文体
3.5 HTTPS
3.5.1 HTTP缺点
- 通信使用明文,内容可能被窃听
- 加密处理防止被窃听,http没有加密机制。
- 不验证通信方的身份就可能遭遇伪装
- 无法确认报文的完整性,可能已经遭遇篡改
3.5.2 HTTPS
- HTTP+加密+认证+完整性保护 = HTTPS。
- 另外当浏览器访问https://的网站时,地址栏会显示一个锁的标志
三、重要报文
3.1 Content-Type
Content-Type实体头部用于指示资源的MIME类型。
在响应中,Content-Type标头告诉客户端实际返回的内容的内容类型。
MIME类型也叫媒体类型,是一种标准,用来表示文档、文件或字节流的性质和格式。
重要的MIME类型:
| MIME类型 | 含义 |
|---|---|
| application/octet-stream | 应用程序文件 |
| text/plain | 文本文件 |
| text/css | css文件 |
| text/html | html文件 |
| application/javascript | js文件 |
| image/gif | GIF 图片 |
| image/jpeg | JPEG/JPG 图片 |
| image/png | PNG 图片 |
| image/svg+xml | SVG图片 (矢量图) |
| image/x-icon | icon图片 |
| application/json | json文件 |
| multipart/form-data | 上传文件 |
| application/x-www-form-urlencoded | Form表单格式 |
| audio/webm | WebM 音频文件格式 |
| video/webm | **WebM**视频文件格式的音视频文件 |
3.2 响应状态码 status
HTTP 响应状态代码(status)指示特定 HTTP 请求是否已成功完成。响应分为五类:
- 信息响应(100–199):接受的请求正在处理
- 成功响应(200–299):请求正常处理完毕
- 200: 请求成功。
- 201: Created 表示请求已经被成功处理,并且创建了新的资源。这通常是在POST请求,或是某些PUT请求之后返回的响应
- 204 No Content 该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新,一般只需要客户端向服务端发送消息,而不要新内容的时候发生
- 重定向(300–399)
- 301: Moved Permanently, 永久性重定向。该状态码表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI
- 302 Found 临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
- 304 Not Modified 请求资源未被修改,浏览器将会读取缓存
- 客户端错误(400–499)
- 400 Bad Request 该状态码表示请求报文中存在语法错误。当错误发生时,需要修改请求的内容后再次发送请求。
- 401 Unauthorized 该状态码表示发送的请求需要有通过HTTP认证的认证信息,另外若之前已进行过1此请求,则表示用户认证失败。
- 403 Forbidden 该状态码表明对请求资源的访问被服务器拒绝了,服务端没有必要给出拒绝理由
- 404 Not Found 该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
- 服务器错误 (500–599)。
- 500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误。
- 503 Service Unavailable 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
四、请求方式
4.1 请求方式
-
GET请求
发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中
-
POST请求
和GET一样很常见,向服务器提交资源让服务器处理,比如提交表单、上传文件等,可能导致建立新的资源或者对原有资源的修改。提交的资源放在请求体中。
-
PUT请求
和post类似,html表单不支持,向指定资源位置上传其最新内容(主要是传输文件)
-
DELETE请求
请求服务器删除某资源
-
HEAD请求
本质和get一样,但是响应中没有呈现数据,而是http的头信息,主要用来检查资源或超链接的有效性或是否可以到达
-
OPTIONS请求
获取http服务器支持的http请求方法,比如ajax跨域时的预检等。
4.2 GET和POST的区别
- get是以url的方式传递数据;而post是以http请求中的body部分传递数据。所以有种说法说post更安全。
- get传递数据时,直接在浏览器地址栏中可以看到;而post可以使用开发者工具中看到。
- get传递的数据,中文会被编码或有可能出现乱码;而post不会。
- get在IE下会走缓存;而post不会。
本文详细介绍了HTTP协议的基础知识,包括协议概念、HTTP报文结构、GET和POST请求的区别、HTTPS的安全性提升,以及重要报文如Content-Type和状态码的作用。

699

被折叠的 条评论
为什么被折叠?



