HTTP (HyperText Transfer Protocol,超文本传输协议)是浏览器与Web服务器之间的通信协议,是传递消息的规范和要求。
统一资源定位符(网址),用来告诉web容器,浏览器所请求资源(文件)的路径。例如:
http://localhost/test/request.php?name=ajest
schema://login: password@address:port/path/to/resource/?query_string#fragment
port 80
Login 用户名
address 地址
password 密码 匿名访问时,默认没有这两个内容
fragment 锚点 实现页面内定位
Web应用的所有通信的消息都要遵守HTTP协议的规范和要求。
GET /php/test/get. php HTTP/1.1 请求行
Host: 172.16.132.161
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv: 69.0)Gecko/20100101 Firefox/69.0
Accept:text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8
Accept-Language:zh-CN, zh; q=0.8, zh-TW; q=0.7, zh-HK; q=0.5, en-US; q=0.3, en; q=0.2Accept-Encoding: gzip, deflate
Referer: http://172.16.132.161/php/test/
Connection: close
Upg rade-Insecure-Requests: 1
Cache-Control: max-age=0
其余为请求头。 get方式请求没有请求正文,post有请求正文
HTTP请求由请求行、请求头、请求正文三部分组成。
1、请求行:方法,资源路径,协议/版本。
方法:GET
资源路径:/php/test/get. php
协议/版本:HTTP/1.1
2、请求头
从请求报文第二行开始到第一个空行为止之间的内容,其中包含很多字段。
3、请求正文
以上GET方法中没有请求正文。
- GET
GET是最常用的方法,通常用于请求服务器发送的某个资源。- POST
POST 方法可以向服务器提交参数以及表单,包括文件流等。- HEAD
与GET 方法类似,但在服务器响应中只返回首部。- PUT
与GET从服务器读取文档相反, PUT 方法会向服务器写入文档。- TRACE 回显浏览器的请求。
- OPTIONS
OPTIONS方法请求Web 服务器告知其支持的各种功能。- DELETE
DELETE 方法请求服务器删除请求URL所指定的资源。
- Host
Host: 172.16.132.161
主要用于指定被请求资源的Internet主机和端口号- User-Agent
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:
69.0)Gecko/20100101 Firefox/69.0
浏览器指纹- Referer
Referer: http://172.16.132.161/php/test/
包含一个URL,代表当前URL的上一个URL- Cookie
记录请求者的身份认证信息- Accept-Charset
用于指定客户端接收的字符集- Content-Type
用于向接收方指示实体的介质类型(数据类型)- Content-Length
用于指明实体正文的长度,以字节方式存储的十进制数字来表示。- Last-Modified
用于指示资源的最后修改时间和日期
HTTP/1.1 200 OK
Date: Sun, 29 Sep 2019 08:43:35 GMT
Server- Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 13
Connection: close
Content-Type: text/html
array (0){
}
响应报文由状态行、响应头、响应正文三部分组成
1、状态行:协议/版本,状态代码,描述短语
HTTP/1.1 200 OK
2、响应头:
从第二行开始到第一个空行为止之间的内容,其中包含了关于HTTP响应的重要字段。
3、响应正文:
服务器返回资源的内容,即浏览器接收到的HTML代码。
100~199
信息性状态码
200~299
成功状态码
300~399
重定向状态码
400~499
客户端错误状态码
500~599
服务器错误状态码
Server
服务器指纹
Set-Cookie
向浏览器端设置Cookie
Last-Modified
服务器通过这个头信息告诉浏览器,资源的最后修改时 间
Content-Length
正文的长度
Location
重定向目标页面
Refresh
服务器通过Refresh头告诉浏览器定时刷新浏览器
HTTP 协议本身是无状态的协议, HTTP
不会记录前一次传输的数据信息。而很多情况下,我们和服务器之间的一个会话不是一个动作就完成了,所以我们希望能在客户端和服务器这个交互的会话期间内,服务器能够保持对客户端会话的识别,也就是保持http 的状态性,Cookie应运而生。
#index.php
<meta charset="utf-8">
<?php
if (isset($_COOKIE ['name' ]) and $_COOKIE [' name ' ] == ' admin '){
echo "欢迎你! " .$_COOKIE [' name ];
echo "注销";
}else{
echo "
#login.php
<meta charset="utf-8">
<?php
if(isset($_GET['name']) && $_GET [' name '] =="admin" &&
isset ($_GET [' pwd' ]) && $_GET [' pwd ']=="123456"){
setcookie( ' name', 'admin');//向浏览器写入Cookie信息
name=admin
echo "登录成功! 首页";
}else{
echo "登录失败! 首页";
}
?>
以上代码中的关键函数是set_cookie()
该函数有7个参数,如下
参数 | 名字 | 含义 |
---|---|---|
name | 名称 | Cookie 名称 |
value | 值 | 这个值存储于用户的电脑里,请勿存储敏感信息 |
expire | 过期时间 | 这是个Unix时间戳,如果设置成零或者忽略参数,Cookie会在绘画结束时过期(也就是关掉浏览器时) |
path | 有效路径 | 设置成’/‘时,Cookie对整个域名domain有效。如果设置成’/foo/',Cookie仅仅对domain中/foo/目录及其子目录有效(比如)/foo/bar/)。默认值是设置Cookie时的当前目录 |
domain | 有效域名 | 设置成子域名(例如’www.example.com’),会使Cookie对这个子域名和它的三级域名有效(例如w2.www.example.com)。要让Cookie对整个域名有效(包括它的全部子域名), 只要设置成域名就可以了(这个例子里是’example. com’) |
secure | 安全 | 设置成TRUE时,只有安全连接存在时才会设置Cookie。如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类 Cookie (通过 $_SERVER [“HTTPS”] 判断) |
httponly | 是包含在http返回头Set-Cookie里面的一个附加的flag,TRUE或FALSE | 设置成TRUE, Cookie仅可通过HTTP 协议访问。这意思就是Cookie 无法通过类似 JavaScript 这样的脚本语言访问。要有效减少XSS攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持) 不过这个说法经常有争议。PHP 5.2.0中添加。 |
同源策略是禁止JavaScript进行跨域访问的安全策略。它也是浏览器沙盒环境所提供的一项制约。浏览器可以同时处理多个网站的内容,其典型方法为使用标签页或iframe 等。
同源策略的保护对象不仅仅是iframe 内的文档。比如,实现Ajax 时所使用的XMLHttpRequest 对象能够访问的URL也受到了同源策略的限制。
index.html
<html>
<head>
<title>跨frame的读取试验title>
<meta charset='utf-8'>
head>
<body>
<iframe name="iframe1" width="300" height="80"
src="http://localhost/sop/iframe.html">
iframe>
<input type="button" onclick="go()" value=" 密码→ "> <script>
function go() {
try {
var x = iframe1.document.form1.passwd.value;
document.getElementById ('out').innerHTML = x;
}catch (e)
alert(e.message);
}
}
script>
<span id="out">span>
body>
html>
--------
iframe.html
<html>
<head>
<meta charset='utf-8'>
head>
<body>
<form name="form1">iframe的内层
密码<input type = "text" name="passwd" value="password1">
form>
body>
html>