HTTP 笔记与总结(2 )HTTP 协议的(请求行的)请求方法 及 (响应行的)状态码
(请求行的)请求方法 包括:
GET,POST,HEAD,PUT,TRACE,DELETE,OPTIONS
注意:这些请求方法虽然是 HTTP 协议规定的,但是 Web Server 未必允许或支持这些方法。
HEAD 和 GET 基本一致,只是不返回内容,比如只是确认一个内容还正常存在,不需要返回具体内容。演示:

GET:

HEAD:

HEAD 方法只返回了响应的头信息。
PUT,往服务器上的资源传输内容:

服务器未必支持 HTTP 协议所规定的方法。
TRACE, 例如使用了代理上网(例如访问 news.163.com),可以使用 TRACE 查看代理有没有修改 HTTP 请求(163.com 的服务器就会把最后收到的请求返回):


同样 Not Allowed,对方的服务器不允许使用 TRACE 方法。
OPTIONS,返回服务器可用的请求方法:

OPTIONS 也不被允许。
用自己的本地服务器测试:

(响应行的)状态码、状态文字
状态码是用来反应服务器的响应情况;
状态文字是用来描述状态码的。
| 状态码 | 定义 | 说明 |
| 1XX | 信息 | 接收到请求,继续处理 |
| 2XX | 成功 | 操作成功地收到,理解和接受 |
| 3XX | 重定向 | 为了完成请求,必须采取进一步措施 |
| 4XX | 客户端错误 | 请求的语法有错误,或者不能完全被满足 |
| 5XX | 服务端错误 | 服务器无法完成明显有效地请求 |
常见的状态码
200 OK:服务器成功返回网页;
301 / 302:永久 / 临时 跳转,例:
301 重定向:
运行 redirect.php
<?php
//301永久重定向
header('Location:http://www.baidu.com', true, 301);

302 重定向:
运行 redirect.php
<?php
//302临时重定向
header('Location:http://www.baidu.com');

注意:当 post 数据发送到 a.php,a.php(header("Location:b.php");) 重定向到了 b.php(print_r($_POST);),导致的结果是 b.php 接受到的数据是 Array ()。
原因:从表单到 a.php 是 post 请求,从 a.php 到 b.php 变成了 get 请求(从 f12 开发人员工具中可以看出)
解决方案:
如果想保持 post 请求,可以使用 307 :重定向中保持原有数据。a.php:
<?php
header("Location:b.php", true, );
即可。此时 a.php 到 b.php 仍然是 post 请求。
例:
test.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="a.php" method="post">
username: <input type="text" name="usernam">
<input type="submit" value="提交">
</form>
</body>
</html>
a.php
<?php
header('Location:b.php');
b.php
<?php
error_reporting(0);
print_r($_POST);

修改 b.php
<?php
header('Location:b.php', true, 307);

Not Modified:未修改(浏览器缓存),例如
当第一次访问一个页面:


当刷新几次页面:


客户端(Chrome)告诉服务我有这张图片,并且告诉服务器该图片时间上的编号(If-Modified-Since 和 If-None-Match),询问服务器该图片是否过期,如果过期则传给我最新的图片;服务器告诉浏览器(ETag 和 Last-Modified),这张图片没有进行修改过,因此浏览器就从缓存中取出这张图片,减小了服务器传输的压力。
使用 telnet 进行缓存的测试,正常 GET 请求图片:

返回二进制的图片信息;
加上以下信息:
If-Modified-Since:Sun, 02 Nov 2014 13:46:57 GMT
If-None-Match:"1860000000012c5-9d39-506e076b8dbb5"
返回:

失败的状态码:
404:请求的网页不存在;
503:服务器暂时不可用;
500:服务器内部错误
HTTP 笔记与总结(2 )HTTP 协议的(请求行的)请求方法 及 (响应行的)状态码的更多相关文章
- Javaweb学习笔记——(十)——————response对象,response字符流缓冲器,响应头,状态码,重定向,requset对象,路径和乱码
请求响应对象: request和response *当服务器接收都请求后,服务器会创建request和response对象,把请求数据封装到request对象中: *然后调用Servlet的sevic ...
- http协议详解及htt面试题目,常见的http状态码
http协议详解及htt面试题目,常见的http状态码 HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. HTTP ...
- 19. HTTP协议二:HTTP请求与响应、常见状态码
HTTP请求与响应 HTTP请求 HTTP请求是指从客户端到服务器端的请求消息.HTTP请求主要由三部分构成,请求行.请求头(headers).body(请求数据). 上图是笔者用Charles抓包工 ...
- php笔记06:http响应中的状态码
首先我们看一个360浏览器中使用开发截图如下: 上面的Status Code: OK (这个就是状态码) 1.状态码主要用于服务器对请求的处理结果,它是一个三位的十进制数.响应状态码分为5类,如下所 ...
- Nginx笔记总结十八:nginx统计响应的http状态码信息(ngx-http-status-code-counter)
编译:./configure --prefix=/usr/local/nginx --add-module=../ngx_http_status_code_counter-master make &a ...
- http协议学习笔记——状态码
1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101(切换协议) 请求者已要 ...
- HTTP协议 (六) 状态码详解
HTTP协议 (六) 状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了. 如果 ...
- HTTP协议中状态码的应用
HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码. 所有状态码的第一个数字代表了响应的五种状态之一. Mark from 维基百科 消息 ...
- HTTP协议的状态码
对于Web编程人员来说,熟悉了解HTTP协议的状态码是很有必要的,很多时侯可能根据HTTP协议的状态码很快就能定位到错误信息!今天整理了一下所有HTTP状态码. HTTP状态码(HTTP Status ...
- HTTP协议状态码详解
HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了. 如果是做AJAX,REST,网络爬虫, ...
随机推荐
- grep -n 显示行号
[root@86 ~]# grep -n "StartDiscoverers" /usr/local/zabbix/etc/zabbix_server.conf 176:### O ...
- DJANGO的API跨域实现
Ajax跨域请求报错:XMLHttpRequest cannot load ''. No 'Access-Control-Allow-Origin' header is present on the ...
- HTML <img> 标签的 height 和 width 属性
定义和用法 <img> 标签的 height 和 width 属性设置图像的尺寸. 提示:为图像指定 height 和 width 属性是一个好习惯.如果设置了这些属性,就可以在页面加载时 ...
- 使用jQuery Mobile + PhoneGap 开发Android应用程序(转)
使用jQuery Mobile + PhoneGap 开发Android应用程序(转) 一.简介 jQuery Mobile是jQuery在手机上和平板设备上的版本.jQuery Mobile 不仅给 ...
- (转载)数据库表设计-水电费缴费系统(oracle)
水电缴费管理系统数据表设计 SQL建表脚本: 1 --建表 2 --管理人员表 admin 3 create table admin( 4 admin_id varchar2(3) not null, ...
- C# 中Datetime类用法总结
收集了一些记录下来,这些有的是从网上找的,有些是自己使用到的: DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25dt.ToF ...
- Hark的数据结构与算法练习之奇偶排序
算法说明 奇偶排序又叫奇偶换位排序,砖排序.它是一种交换排序,也是冒泡的一个变种 顾名思义,奇偶排序,其实就是先循环奇数位,然后将奇数位与偶数位比较计算. 然后再循环偶数位,再和奇数位比较运算.看一下 ...
- hdu 1284 分硬币 && uva 147
#include<bits/stdc++.h> using namespace std; int main() { unsigned ]; memset(dp,,sizeof(dp)); ...
- Codeforces Round #208 (Div. 2) B Dima and Text Messages
#include <iostream> #include <algorithm> #include <string> using namespace std; in ...
- 【BZOJ】1074: [SCOI2007]折纸origami
http://www.lydsy.com/JudgeOnline/problem.php?id=1074 题意:一开始有一个左上角是(0,100),右下角是(100,0)的纸片,现在可以沿有向直线折n ...