网站首页 > 技术文章 正文
相信在日常编程中我们大部分时间是在通过浏览器向服务器发出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)
- 最近发表
-
- 使用Knative部署基于Spring Native的微服务
- 阿里p7大佬首次分享Spring Cloud学习笔记,带你从0搭建微服务
- ElasticSearch进阶篇之搞定在SpringBoot项目中的实战应用
- SpringCloud微服务架构实战:类目管理微服务开发
- SpringBoot+SpringCloud题目整理
- 《github精选系列》——SpringBoot 全家桶
- Springboot2.0学习2 超详细创建restful服务步骤
- SpringCloud系列:多模块聚合工程基本环境搭建「1」
- Spring Cloud Consul快速入门Demo
- Spring Cloud Contract快速入门Demo
- 标签列表
-
- 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)