HTTP协议学习

浏览器请求过程

浏览器请求过程1

请求头

请求行(请求方法 路径 协议)
请求头(格式:key:value)
(空行)
主体信息(可选)(发送内容)


例子:
POST /taskmgr/getTableList HTTP/1.1
Host: localhost
Connection: keep-alive
Content-type: application/x-www-form-urlencode
Content-length: 98
Accept: application/json, text/plain, */*
x-Requested-With:XMLHttpRequest
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=460dg9u06a14gn3qsqgf0gflse

tableTypeId=0&userName=&ownerType=2&cIsSubmit=-1&rIsSubmit=-1&startTime=&endTime=&start=0&limit=30

响应头

响应行(协议 状态码 状态文字)
响应头(key:value)
(空行)
主体信息(可选)

例子:
HTTP/1.1 200 OK
Content-type: text/html
Content-length: 5

hello

请求方法

方法说明
GET获取一个url指定的资源
HEAD获取一个指定的资源的信息
POST向服务器提交数据
PUT向服务器提交资源
DELETE请求服务器删除Request-URL标识的资源
TRACE网络跟踪
CONNECT与proxy之间的连接管理
OPTIONS查询服务器支持的方法

状态码

状态码定义说明
1XX请求被接受一般只在实验环境下使用,websocket的协议也是1XX系列的
2XX成功操作成功
3XX重定向为了完成请求,采取进一步措施。nginx的负载均衡经常用到303、304
4XX客户端错误请求语法有错或不能完全被满足
5XX服务端错误服务器无法完成有效的请求

常见状态码

状态码说明
200请求成功
301永久重定向,浏览器地址栏也会变
302临时重定向,浏览器地址保持不变
304not modified 未修改
307重定向中保持原有的请求数据,比如nginx反向代理、vpn代理,
404资源未找到
503服务器暂时不可用,访问量过大时可能会出现,500也是
500服务器内部错误

用Telnet连接

> telnet localhost 80

按下 ctrl + ]

欢迎使用 Microsoft Telnet Client

Escape 字符为 'CTRL+]'


Microsoft Telnet>

再按下回车,显示全黑页面,进行输入即可

GET请求

GET /test.php HTTP/1.1
host:localhost


POST请求

post请求要指定Content-type和Content-length

POST /test.php HTTP/1.1
host:localhost
content-type:application/x-www-form-urlencoded
content-length:5

id=12

telnet模拟文件上传

test.php

<?php
echo move_uploaded_file($_FILES['myfile']['tmp_name'], './'.$_FILES['myfile']['tmp_name']) ? 'success':'failed';

telnet输入下面内容,其中boundary是文件内容的边界,随便自定义。浏览器上传文件其实也是这样,把文件内容用定界符包起来作为body部分再发送

POST /test.php HTTP/1.1
host:localhost
content-type:multipart/form-data,boundary=AaB03x
content-length:140

--AaB03x
Content-Disposition:form-data; name="myfile"; filename="a.txt"
Content-Type:text/plain

wo hen shuai
--AaB03x--

COOKIE

请求中发送cookie

test.php

<?php
if($_COOKIE['name'] == 'admin'){
    echo 'success'
} else {
    echo 'failed';
}

telnet

GET /test.php HTTP/1.1
host:localhost
cookie:name=admin


使用fsockopen()打开连接来发送请求

<?php
$f = fsockopen('localhost', 80, $err, $errMsg);  // 返回的是文件句柄
// 发送请求
$content = [
    'GET /test.php HTTP/1.1',
    'host:localhost',
    'cookie:name=admin',
    '',''
];
$content = implode("\n", $content);
fwrite($f, $content);
// 接收响应
while($str = fread($f, 32)){
    echo $str;
}
fclose($f);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值