HTTP协议
HTTP: HyperText Transport Protocol, 超文本传输协议, 超文本在网络之间(b/s)传输过程中应该遵循的协议(规则)
数据在网络之间的传输: 理论上基于的不是HTTP协议, 底层需要基于TCP/IP协议
TCP/IP : 负责电脑连接
HTTP: 负责数据传输
HTTP协议特点
优点:
支持客户/服务器模式: HTTP协议默认是基于B/S架构来使用(web), 但是HTTP协议不限制只有B/S架构可以使用, C/S架构只要能够按照协议要求发送协议,也可以实现HTTP协议应用(比较底层,socket编程, windows下telnet软件)
简单快速: 只需请求方法和路径, 浏览器在使用HTTP协议进行处理的时候, 只需要提供两个内容就可以完成: 请求方法(GET/POST), 请求内容所在的路径(URI)
灵活: 任意数据, HTTP协议允许传送任何数据, 字符数据,二进制数据(图片,视频,文件等)
缺点:
无连接: 每次连接只处理一个请求, 浏览器发起一个请求之后, 服务器只能响应一次, 如果浏览器还想获取数据,需要重新发起请求.
无状态: 事务处理没有记忆能力, 浏览器多次请求服务器, 服务器不认识
HTTP协议分类
协议通常是用来约束双方的, 协议对彼此的约束可能不一样(也有可能有一样的内容)
HTTP协议: 因为参与者有两部分(浏览器和服务器)
HTTP协议分为两个部分:
第一部分: 约束浏览器, HTTP请求
第二部分: 约束服务器, HTTP响应
HTTP请求
HTTP请求: 是浏览器用来寻找服务器的,发送请求给服务器的一些约束条件
如:http://www.itcast.cn/gz/php/index.php
HTTP请求分为四个部分: 请求行, 请求头, 空行, 请求数据
1.请求行: 属于协议的第一行, 独占一行, 分为三个部分, 使用空格分隔
请求方式 请求路径(URI) 协议版本
GET /gz/php/index.php HTTP/1.1
2.请求头: 协议内容, 一个协议占一行,但是可以有N个协议: 格式是: 协议项 : 协议内容
Host: www.feng.com
常见的请求头有哪些?
Host: 主机地址, 告诉服务器去对应的哪个文件夹取数据
accept-encoding: 可以接收的编码格式(不是字符集), gzip等
Referer: 引用的,表示当前网页是由哪个网页产生过来的(上一个访问界面)
Connection: 保持连接, 请求与响应的过程是一组, 响应的内容比较大的时候,周期会比较长(kee-alive, 是HTTP/1.1与HTTP/1.0的区别)
accept-language: 可以接收的语言类型, zh-cn中文, en英文等
Cookie: cookie本身是一种技术(会话技术) ,同时也是一种数据, 将浏览器上保存的服务器数据携带给服务器
user-agent: 用户代理, 是浏览器的基本信息(内核等)
Accept: 浏览器可以接收的数据类型(MIME类型), 如text/html, image/png等
content-length(post): 只有POST提交的时候才会有, 提交的数据的长度(字节)
if-modified-since(get): 一种缓存, 发送当前缓存的文件的时间给服务器
content-type(post)): 内容的发送形式, 只有post提交的时候才会有
3.空行: 用来结束请求头
4.请求数据: POST才会有的内容
HTTP响应
HTTP响应是服务器发送给浏览器的约束: 告诉浏览器怎么处理.
HTTP响应也分为四个部分: 响应行(状态行) 响应头 空行 响应主题(数据HTML)
1.状态行: 用来描述服务器对数据处理的状态的, 分为三个部分
协议版本 状态码 状态描述
HTTP/1.1 200 OK (表示服务器正确响应)
2.响应头: 与请求头几乎一样(内容不同)
常见的响应头有哪些?
Server: 服务器基本信息
Date: 当前处理的时间
last-modified: 与请求中的if-modified-since对应, 告诉浏览器当前请求的脚本的最后修改时间
content-length: 数据的总长度
content-type: 数据类型(MIME类型)
Location: 重定向, 告诉浏览器重新发起请求(立即执行)
Refresh: 重定向, 刷新, 告诉浏览器重新发起请求(等指定时间之后)
content-encodeing: 与accept-encoding, 数据编码格式(不是字符集)
cache-control: 缓存控制,告诉浏览器要不要缓存
No-ached: 不要缓存
Cached: 缓存起来
3.空行: 告诉浏览器响应头结束了
4.响应主题: HTML数据
状态码
状态码: 服务器对处理的结果的数字描述, 浏览器就会根据状态码来决定自己的处理方式.
状态码分为五类:
1XX: 表示服务器正在处理,还没有处理完
2XX: 表示服务器已经正确处理完
3XX: 重定向,表示服务器要求浏览器重新请求
4XX: 浏览器错误: 浏览器发送的请求,服务器不能正确理解
5XX: 服务器错误: 服务器处理不了
常见的代码信息
200: OK,服务器处理完成
302: Found, 找到新的界面要访问: Location重定向
303: See Other, 已经转移到别的地方
304: Not Modified,没有修改,告诉浏览器读取本地缓存
400: Bad Request, 请求坏了, 服务器不认识
403: Forbidden, 没有权限访问
404: Not Found,找不到
502: Bad Gateway ,网关错误, 没有正确的从上游服务器得到结果