欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP协议基础知识总结

程序员文章站 2022-07-10 14:13:39
...

一. 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特点及优点

  1. 由于HTTP协议简单. 发起请求时只需传送请求方法和路径
  2. HTTP协议, 当一次请求获得服务器响应后会立即关闭相关连接, 释放资源, 既节省资源又吸取了 TCP的可靠性
  3. HTTP协议是无状态的, 就是当一次请求完毕后, 它并不会保存此次数据. 这意味着再次请求可能需要重传前面的信息. 导致连接传送的数据量增大, 但由于服务器不需要保存先前信息, 因此应答就较快
  4. 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 服务器当前不能处理客户端的请求, 一段时间后可能恢复正常

如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!