06 HTTP协议

概述

简介

HTTP 协议,即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议

HTTP 协议是用于从 WWW 服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等

特点

  • 客户/服务器模式:客户端(浏览器)/服务端
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于 HTTP 协议简单使得 HTIP 服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP 允许传输任意类型的数据对象(MIME类型)
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
  • 无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

分类

HTTP请求协议:浏览器向服务器发起请求的时候需要遵循的协议
HTTP响应协议:服务器向浏览器发起响应的时候需要遵循的协议

HTTP请求参数

请求行

表现形式:请求方式 资源路径协议/版本号
例如:GET /index.phR HTTP/1.1

请求头

请求头就是各项协议内容:具体的协议内容不会每次都使用全部

1):Host:请求的主机地址(必须)

2):Accept:当前请求能够接收服务器返回的类型(MEMI类型)

3):Accept-Language:接收的语言

4):Usex-Agent:客户浏览器所在点的一些信息

请求体

就是请求数据:只有POST请求才会有请求体。
get请求所有的数据都跟在URL之后,会在请求行中的资源路路径上展示
数据格式:资源名称1=资源值1&资源名称2=资源值2&资源名称3=资源值3

HTTP响应协议

响应行

表现形式:协议版本号 状态码 状态消息(独占一行)
例如:HTIP/1.1 200 ok

常见状态码:

  1. 200:成功

  2. 403 Forbidden:没权限访问

  3. 404 Not Found:未找到页面

  4. 500 Server Internal Error :服务器内部错误

响应头

  1. 时间:Wed,16 sep 2017 11:43:33 GMT
  2. 服务器:Server:Apache/2.2.22(Win32)PHP/5.3.13
  3. 内容长度:Content-Length:1571,数据具体的字节数(响应体)
  4. 内容类型:Content-Type:text/htm1:告诉浏览器对应的数据格式

常见的HTTP响应设置及应用

PHP 中针对 HTTP 协议(响应)进行了底层设计,可以通过函数 header 来实现修改 HTTP 响应头

Location:重定向,立即跳转(响应体不用解析)

Refresh:延迟重定向,定时跳转(响应体会解析)

Content-type:内容类型,MIME类型

Content-disposition:内容类型,MIE类型扩展,激活浏览器文件下载对话框

响应体

实际服务器响应给浏览器的内容

常用HTTP状态码

image
image
image
image
image

常用的HTTP响应设置和使用

PHP 中针对 HTTP 协议(响应)进行了底层设计,可以通过函数 header 来实现修改 HTTP 响应(响应头)

1. Location:重定向,立即跳转(响应体不用解析)

浏览器在解析服务器响应的时候:先判定响应行,继续响应头,最后响应体:1ocation是在响应头中,所以浏览器一旦见到该协议项,不再向下解析

header('Location:list.php');

2. Refresh:重定向,定时跳转(响应体会解析)--延时跳转,定时器

延时重定向,浏览器会根据具体时间延迟后再访问指定的链接地址,因此浏览器在准备跳转之前会继续解析此http协议的内容

-- 3秒后跳转到 url 指定的链接
header('Refresh:3;url=list.php');

3. Content-type:内容类型,MINE类型

通过Content-tyoe设置响应头

-- 设置中文乱码
header('Content-type=text/html;charset=utf-8');

4. Content-disposition:内容类型,MINE类型扩展,激活浏览器文件下载对话框

浏览器在解析内容的时候,默认是直接解析,可是有时候并不需要浏览器解析,而是当做内容下载成文件,此时就可以使用
Content-disposition

header('Content-disposition:attachment;filename=txt.jpg'); 

PHP模拟HTTP请求

1. 原理-CURL开源库

PHP可以通过模拟 HTTP 协议,从而发起 HTTP 请求--CURL开源库

CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TEINET等,我们使用它来发送 HTTP请求。

它给我们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持 HTTPS

CURL可以根据 URL前缀是“HTTP” 还是“HTTPS”自动选择是否加密发送内容。

2. CRUL扩展库的使用

2.1 建立连接:curl_init()

2.2 设置请求选项:crul_setopt()

CURLOPT_URL:链接对象

CURLOPT_RETURNTRANSFER:将服务器执行的结果或响应以文件流的形式返回给请求界面,即php脚本

CURLOPT_PORT:是否采用POST方式发起请求,默认是GET请求

CURLOPT_POSTFIELDS:用来传递POST请求提交的数据。分为2种方式:
字符串(a=1&b=2&c=3)
数组(array('name'=>'张三','age'=>18))

CURLOPT_HEADER:是否得到相应的响应头信息(响应行和响应头),默认不获取

2.3 执行请求:curl_exec()

2.4 关闭连接:curl_close()

<?php
// 1 建立连接:curl_init()
$ch=curl_init();

// 2 设置请求选项:crul_setopt()

// 2.1 设置连接
curl_setopt($ch,CURLOPT_URL,'localhost/news/list.php'); 
// 2.2 文件流的方式返回数据
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
// 2.3 是否获取响应头信息 0不获取 1获取
curl_setopt($ch,CURLOPT_HEADER,1);


// 3 执行请求:curl_exec()
$content=curl_exec($ch);
var_dump($content);

// 4 关闭连接:curl_close()
curl_close($ch);
posted @ 2024-11-22 17:24  songxia777  阅读(45)  评论(0)    收藏  举报