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方法

  • GET请求: 参数追加到 url地址后面还有地址长度有限制
  • POST请求: 参数加到请求体内传递.比 GET安全, 请求数据大小没有限制
  • HEAD请求: 类似与GET, 只不过 HEAD请求时服务端只返回响应头, 不返回响应内容. 一般查看页面的状态时用
  • OPTIONS请求: 用于获取当前 URL所支持的方法
  • PUT请求: 与POST相似, 它们之间的区别是 PUT通常指定了资源的存放位置, 而POST的数据存放位置由服务器自己决定
  • DELETE请求: 删除某一个资源
  • TRACE请求: 回显服务器收到的请求, 主要用于测试或诊断
  • CONNECT请求: CONNECT方法是HTTP/1.1协议预留的, 能够将连接改为管道方式的代理服务器. 通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信

四. 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 服务器当前不能处理客户端的请求, 一段时间后可能恢复正常

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值