网站首页 > 技术文章 正文
相信在日常编程中我们大部分时间是在通过浏览器向服务器发出GET或者POST请求。那么问题来了,我们可不可以通过其它方式发出GET,POST请求呢?当然可以,不然你也就不会来了解SOCKET,也不会看到这篇文章。
稍微了解过HTTP协议的人知道,浏览器提交请求的实质是向服务器发送一个请求信息,这个请求信息包涵请求行、请求头、请求体三部分组成。当然,请求体非必需。而后服务器根据请求信息返回一个响应信息。连接断开。下面我们通过 一张图片来大概了解一下 。
图片简解释
浏览器发出请求(格式)
请求首行:请求方式 请求路径 协议和版本,例如:GET /index.html HTTP/1.1。
2~n请求头:请求头名称:请求内容,即为key:value格式,例如:Host:localhost:8080。
空行:用来与请求体分开。
请求体:GET没有请求体,只有POST有请求体。
GET请求
HTTP默认的请求方式是GET。
GET:
没有请求体。
数据必须在1K之内。
GET请求数据会暴露在浏览器的地址栏中。(密码)
POST请求
数据不会出现在地址栏中。
数据的大小没有上限。
有请求体。
请求体中如果出现中文,会使用URL编码。
使用表单可以发送POST请求,但表单默认是GET
服务器响应请求(格式)
响应首行
响应头信息
空行
响应体
通过上面的内容,我想大家大概知道了http的重要性了。作为php程序员在日常的项目开发中也肯定会用到http协议。如果想要进一步的提高自己的编程水平的话,那就有必要去深入的了解一下http协议。
目前我正在恶补学习关于php的http编程,很多东西以前还存在困惑的,现在也逐渐豁然开朗,也从中受益匪浅。希望分享给大家。下面我们先简单的了解一下http协议,心及什么是SOCKET。里面涉及的知识比较多,所以只能尽量以大家能接受的方式给大家呈现。
什么是HTTP协议
官方的解释是:http(HTTP-Hypertext transfer protocol):超文本传输协议,基于请求/响应模式。
它详细的规定了www服务器与客户端之间数据传送的通信规则。是一个无状态协议,和FTP相比而言,ftp是有状态的。
什么是Socket?
Socket的原意是“孔”或“插座”的意思。一般普遍叫它“套接字”,它的作用是用来描述IP地址和各端口。我们可以将其理解为一个通信链的句柄。它可以实现不同主机之间的互相通信。
Internet上的主机都装了多个服务软件,比如XWAMP,phpstudy等,而且同时提供用户多种服务,每种服务都有相应的一个Socket被绑定在相应的一个端口上面,而不同的端口它所对应的服务内容也不一样。
所以,其实通过socket操作远程文件和读写本地文件也就变得非常简单。这里我们可以把本地文件看成是通过硬件传输的,而远程文件是通过internet传递。
下面我们一起通过一段代码来消化一下上面 的内容。
实现:通过fsocketopen()模拟socket将服务本地服务器链接的内容显示在浏览中;
代码:
1、先新建一个test.php文档:
<?php
echo "hello world!";
?>
并保存.
2、新建一个test.php文档,并键入以下代码
$sk = fsockopen('localhost',80,$errno,$errstr,5); //使用localhost本地服务器,80端口,如果出错则返回错误号,错误内容,5秒运行时间;
$arr = array(
'GET /http/test.php HTTP/1.1',
'host:localhost',
'',
''
);
$str = implode("\n",$arr); //将$arr数组以回车符分隔
fwrite($sk,$str); //将内容写入文档流
while ($row = fread($sk,32)){ //循环读取$sk里面的内容每次读32字节
echo $row;
}
fclose($sk); //最后关闭
运行结果:如下图
希望对大家有用,不然今晚白熬夜了.
猜你喜欢
- 2024-11-06 JavaScript学习笔记(二十五)——HTTP
- 2024-11-06 原生js实现文件下载并设置请求头header
- 2024-11-06 干货-Http请求get、post工具类(get和post请求的区别是什么)
- 2024-11-06 聊聊在springcloud gateway如何获取请求体
- 2024-11-06 python接口自动化-发送get请求(python get请求 url传参)
- 2024-11-06 想测试HTTP响应不知道如何开展怎么办?
- 2024-11-06 接口测试遇到500报错?别慌,你的头部可能有点问题
- 2024-11-06 一文讲清HPP的请求方法和过程(hp partsufer)
- 2024-11-06 HTTP请求对象(获取用户请求信息)(如何查看http请求的头部信息)
- 2024-11-06 学习笔记-HTTP 请求方法详解(学习笔记-HTTP 请求方法详解pdf)
- 最近发表
-
- 如何在 Linux 上安装 Java_怎么在linux中安装jdk
- Linux中tar命令打包路径相关问题_linux怎么用tar打包一个目录
- 常用linux系统常用扫描命令汇总_常用linux系统常用扫描命令汇总表
- VM下linux虚拟机新建过程(有图)_linux虚拟机创建新用户命令
- 系统小技巧:迁移通过Wubi方式安装的Ubuntu系统
- 文件系统(八):Linux JFFS2文件系统工作原理、优势与局限
- 如何利用ftrace精确跟踪特定进程调度信息
- prometheus网络监控之fping-exporter
- hyper linux的实操步骤,hyper-v批量管理工具的使用指南
- 2021年,运维工程师笔试真题(二)(附带答案)
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)