HTTP协议基础知识总结
HTTP协议基础知识总结
一. HTTP概念
- HTTP(hypertext transfer protocol)中文是"超文本传输协议", HTTP协议是 TCP/IP协议的一个应用层协议, 用于浏览器和服务器之间定义的一种规范, 也就是交互时需要遵守一定的通讯格式.
二. HTTP版本
- HTTP/0.9协议是交换信息的无序协议, 只支持 GET方法
- HTTP/1.0协议 TCP连接只能发送一个请求/响应后连接断开, 支持方法 GET, POST和 HEAD
- HTTP/1.1协议 TCP连接默认不关闭, 可以被多个请求复用. 对于同一个域名, 大多数浏览器允许同时建立6个持久连接. 默认开启 Connection: keep-alive. 在同一个TCP连接里, 可同时发送多个请求. 但响应时服务器是按请求的顺序进行的, 可能会造成队头阻塞, 支持方法 GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE和 CONNECT
三. HTTP特点及优点
- 由于HTTP协议简单. 发起请求时只需传送请求方法和路径
- HTTP协议, 当一次请求获得服务器响应后会立即关闭相关连接, 释放资源, 既节省资源又吸取了 TCP的可靠性
- HTTP协议是无状态的, 就是当一次请求完毕后, 它并不会保存此次数据. 这意味着再次请求可能需要重传前面的信息. 导致连接传送的数据量增大, 但由于服务器不需要保存先前信息, 因此应答就较快
- HTTP协议允许传输任意类型的数据类型由报文头部的 Content-Type指定
四. HTTP协议的组成
HTTP协议由 HTTP请求和 HTTP响应组成. 当访问某个网站时浏览器会将请求封装成一个 HTTP请求发送给服务器, 服务器接收请求后会将响应数据封装成一个 HTTP响应返回给浏览器
五. HTTP请求报文
- HTTP请求报文由3部分组成(请求行, 请求头, 请求体)
POST https://www.test.com/test.php HTTP/1.1
Host: www.test.com
Connection: keep-alive
Content-Length: 38
Accept: */*
Origin: https://www.test.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
Sec-Fetch-Mode: cors
Content-Type: application/x-www-form-urlencoded
Sec-Fetch-Site: same-origin
Referer: https://www.test.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: _ga=GA1.2.1894115336.1562634624; mcheck=ok; PHPSESSID=16540043bc6348b97c5947237ca715db
mb_id=test&mb_pass=123456
1. 请求行
POST(请求方法) https://www.test.com/test.php(资源路径) HTTP/1.1(协议/版本)
2. 请求头
Host: www.test.com
Connection: keep-alive
Content-Length: 38
Accept: /
Origin: https://www.test.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
Sec-Fetch-Mode: cors
Content-Type: application/x-www-form-urlencoded
Sec-Fetch-Site: same-origin
Referer: https://www.test.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: _ga=GA1.2.1894115336.1562634624; mcheck=ok; PHPSESSID=16540043bc6348b97c5947237ca715db
空行
3. 请求体
用户发送到服务器的数据
mb_id=test&mb_pass=123456
常见请求头
- Host 请求的服务器主机名
- Connection 表示客户端与服务连接类型 Keep-Alive表示持久连接, close已关闭
- Content-Length 请求体的长度
- Accept 告诉服务端, 该请求支持的响应数据类型, 专业术语称为 MIME类型(文件类型描述方式). 如 text/html, text/css, text/javascript, image/*, / 等等
- User-Agent 客户端浏览器与操作系统相关信息传给服务端
- Content-Type 请求的与实体对应的 MIME信息. POST请求时会有此报文头, 默认值为 application/x-www-form-urlencoded表示请求体内容使用 url编码, 如果 form的 enctyped设置了, 此报文头值为 mutipart/form-data, 或 Json的话 application/json
- Referer 表示这个请求是从哪个 url跳过来的
- Accept-Encoding 浏览器所支持的数据压缩格式
- Accept-Language 浏览器所支持的语言
- Cache-Control 响应内容进行缓存控制
- Cokkie 客户端的 Cookie通过此报文头传给服务端
六. HTTP响应报文
- HTTP响应报文由3部分组成(响应行, 响应头, 响应体)
HTTP/1.1 200 OK
Date: Sat, 19 Oct 2019 10:18:45 GMT
Server: Apache
X-Powered-By: PHP/5.3.27
Set-Cookie: C_PASSPORT=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.test.com
Set-Cookie: member_type=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.test.com
Set-Cookie: C_PASSPORT=a%3A5%3A%7Bs%3A5%3A%22mb_no%22%3Bs%3A6%3A%22295509%22%3Bs%3A5%3A%22mb_id%22%3Bs%3A7%3A%22qcl108%22%3Bs%3A5%3A%22token%22%3Bs%3A32%3A%2268f9e0c14521af4b6a3be2cace50ca2c%22%3Bs%3A10%3A%22token_time%22%3Bs%3A10%3A%221571480325%22%3Bs%3A9%3A%22check_sum%22%3Bs%3A32%3A%22f7370275e715fb8b38e568b7927ea2cc%22%3B%7D; path=/; domain=.test.com
Set-Cookie: M_SESSION_ID=f770ab808b951f8d6bcb3d46d0ecee9d; path=/; domain=.test.com
Set-Cookie: save_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/
P3P: CP="ALL CURa ADMa DEVa TAIa CAO PSA OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"
Content-Length: 2
Connection: close
Content-Type: text/html
154
{"status":0,"message":"success","data":{"loginId":"test"}}
0
1. 响应行
HTTP/1.1(协议/版本) 200(状态码) OK(状态描述)
2. 响应头
Date: Sat, 19 Oct 2019 10:18:45 GMT
Server: Apache
X-Powered-By: PHP/5.3.27
Set-Cookie: C_PASSPORT=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.test.com
Set-Cookie: member_type=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.test.com
Set-Cookie: > C_PASSPORT=a%3A5%3A%7Bs%3A5%3A%22mb_no%22%3Bs%3A6%3A%22295509%22%3Bs%3A5%3A%22mb_id%22%3Bs%3A7%3A%22qcl108%22%3Bs%3A5%3A%22token%22%3Bs%3A32%3A%2268f9e0c14521af4b6a3be2cace50ca2c%22%3Bs%3A10%3A%22token_time%22%3Bs%3A10%3A%221571480325%22%3Bs%3A9%3A%22check_sum%22%3Bs%3A32%3A%22f7370275e715fb8b38e568b7927ea2cc%22%3B%7D; path=/; domain=.test.com
Set-Cookie: M_SESSION_ID=f770ab808b951f8d6bcb3d46d0ecee9d; path=/; domain=.test.com
Set-Cookie: save_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/
P3P: CP=“ALL CURa ADMa DEVa TAIa CAO PSA OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC”
Content-Length: 2
Connection: close
Content-Type: text/html
空行
3. 响应体
服务器的相应数据
154
{“status”:0,“message”:“success”,“data”:{“loginId”:“test”}}
0
常见响应头
- Server 服务器名称
- Set-Cookie 服务器向浏览器写入 cookie
- Content-Length 请求体的长度
- Connection 表示客户端与服务连接类型 Keep-Alive表示持久连接, close已关闭
- Content-Type 响应正文的类型(MIME类型)
常见状态码及状态描述
1xx 指示信息, 表示请求已接收, 继续处理
2xx 成功, 表示请求已被成功接受, 处理
- 200 OK 客户端请求成功
- 204 No Content 无内容. 服务器成功处理,但未返回内容. 一般用在只是客户端向服务器发送信息, 而服务器不用向客户端返回什么信息的情况
- 206 Partial Content 服务器已经完成了部分 GET请求(客户端进行了范围请求). 响应报文中包含 Content-Range指定范围的实体内容
3xx 重定向
- 301 Moved Permanently 永久重定向, 表示请求的资源已经永久的搬到了其他位置
- 302 Found 临时重定向, 表示请求的资源临时搬到了其他位置
- 303 See Other 与302基本一样, 区别是303明确客户端应该使用 GET访问
- 307 Temporary Redirect 与302基本一样, 区别是不能从 POST变成 GET
4xx 客户端错误
- 400 Bad Request 客户端请求有语法错误, 服务器无法理解
- 401 Unauthorized 请求未经授权, 表示用户认证失败
- 403 Forbidden 表示拒绝对请求资源的访问
- 404 Not Found 请求资源不存在
- 415 Unsupported media type 不支持的媒体类型
5xx 服务器端错误, 服务器未能实现合法的请求
- 500 Internal Server Error 服务器发生不可预期的错误
- 503 Server Unavailable 服务器当前不能处理客户端的请求, 一段时间后可能恢复正常
如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!