打开浏览器输入127.0.0.1查看显示的内容
属性 | 功能 | 例子 |
---|---|---|
User-Agent | 浏览器的具体类型 | User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0 |
Accept | 浏览器支持哪些数据类型 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9 |
Accept-Charset | 浏览器采用的是哪种编码 | Accept-Charset: ISO-8859-1 |
Accept-Encoding | 浏览器支持解码的数据压缩格式 | Accept-Encoding: gzip, deflate |
Accept-Language | 浏览器的语言环境 | Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 |
Host | 请求的主机名,允许多个域名同处一个IP地址,即虚拟主机 | Host:www.baidu.com |
Connection | 表示是否需要持久连接。Keep-Alive/close,HTTP1.1默认是持久连接,它可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。 | Connection: Keep-Alive |
Content-Length | 表示请求消息正文的长度。对于POST请求来说Content-Length必须出现。 | |
Content-Type | WEB服务器告诉浏览器自己响应的对象的类型和字符集 | Content-Type: text/html; charset=‘gb2312’ |
Content-Encoding | WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象 | Content-Encoding:gzip |
Content-Language | WEB服务器告诉浏览器自己响应的对象的语言 | |
Cookie | 最常用的请求头,浏览器每次都会将cookie发送到服务器上,允许服务器在客户端存储少量数据 | |
Referer | 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。服务器能知道你是从哪个页面过来的 | Referer: http://www.baidu.com/ |
属性 | 功能 | 例子 |
---|---|---|
Server | WEB 服务器表明自己是什么软件及版本等信息 | Server:Apache/2.0.61 (Unix) |
Accept-Ranges | WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。bytes:表示接受,none:表示不接受 | |
Content-Type | WEB 服务器告诉浏览器自己响应的对象的类型 | Content-Type:application/xml |
Etag | 就是一个对象(比如URL)的标志值,就一个对象而言,比如一个html文件,如果被修改了,其Etag也会别修改,所以,ETag的作用跟Last-Modified的作用差不多,主要供WEB服务器判断一个对象是否改变了。比如前一次请求某个html文件时,获得了其 ETag,当这次又请求这个文件时,浏览器就会把先前获得ETag值发送给WEB服务器,然后WEB服务器会把这个ETag跟该文件的当前ETag进行对比,然后就知道这个文件有没有改变了。 | |
Allow | 服务器支持哪些请求方法(如GET、POST等) | |
Location | 表示客户应当到哪里去提取文档,用于将接收端定位到资源的位置(URL)上。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。 | |
Content-Base | 解析主体中的相对URL时使用的基础URL | |
Content-Encoding | WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象 | Content-Encoding:gzip |
Content-Language | WEB 服务器告诉浏览器理解主体时最适宜使用的自然语言。 | |
Content-Length | WEB服务器告诉浏览器自己响应的对象的长度或尺寸 | Content-Length: 26012 |
Content-Location | 资源实际所处的位置 | |
Content-MD5 | 主体的MD5校验和 | |
Content-Range | 实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式: Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth | 传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。 |
Expires | WEB服务器表明该实体将在什么时候过期,对于过期了的对象,只有在跟WEB服务器验证了其有效性后,才能用来响应客户请求。是 HTTP/1.0 的头部 | Expires:Sat, 23 May 2009 10:02:12 GMT |
Last-Modified | WEB服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等 | Last-Modified:Tue, 06 May 2008 02:42:43 GMT |
http://baike.baidu.com/link?url=LarF3FUBzX-IU1BMZbwbxaC8oJPUSGOj3seQRNVSVbZ2F9A6BiE-Je0sxFwsQK8dFJkKH6VP_ghpK66p8C2Zvkdl9nABXBR8mIqZGJj_D59q6NJQwmw3GqjIx2bzAsEG
// 1.JS中有两种注释
// 1.1单行注释
// 1.2多行注释
//
/* */
// 2.JS中如何定义变量?
//var num = 10;
// PHP中如何定义变量?
$num = 10;
// 3.JS中如何打印内容?
//console.log();
// 注意点: 后端编写的代码不能直接运行, 只能放到服务器对应的文件夹下, 通过服务器运行
// 如何通过服务器运行: 通过ip地址找到服务器对应的文件夹, 然后再找到对应的文件运行
// PHP中如何打印内容?
echo $num;
// 4.JS中如何定义集合
// 4.1数组
// 4.2字典(对象)
//var arr = [1, 3, 5];
// arr[0];
// PHP中如何定义集合
$arr = array(1, 3, 5);
print_r($arr);
echo "
";
// PHP中取出数组中的内容
echo $arr[1];
// JS中如何定义对象
//var dict = {"name":"lnj", "age":"33"};
// dict["name"];
// PHP中如何定义对象
$dict = array("name"=>"lnj", "age"=>"33");
print_r($dict);
echo "
";
// PHP中取出对象中的内容
echo $dict["name"];
// 5.PHP中的分支循环语句
// if/switch/三目/for/while
$age = 16;
if($age >= 18){
echo "成年人";
}else{
echo "未成年人";
}
$res = ($age >= 18) ? "成年人" : "未成年人";
echo $res;
switch ($age){
case -1:
echo "非人类";
break;
case 18:
echo "成年人";
break;
default:
echo "未成年人";
break;
}
$arr = array(1, 3, 5);
for($i = 0; $i < count($arr); $i++){
echo $arr[$i];
echo "
";
}
$index = 0;
while ($index < count($arr)){
echo $arr[$index];
echo "
";
$index++;
}
?>
<form action="02-get-post.php" method="get">
<input type="text" name="userName"><br>
<input type="password" name="userPwd"><br>
<input type="submit" value="提交"><br>
form>
print_r($_GET);
echo $_GET["userName"];
echo $_GET["userPwd"];
?>
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET", "04-ajax-get.php", true);
xmlhttp.send();
xmlhttp.onreadystatechange = function (ev2) {
if(xmlhttp.readyState === 4){
// 判断是否请求成功
if(xmlhttp.status >= 200 && xmlhttp.status < 300 ||
xmlhttp.status === 304){
// 5.处理返回的结果
console.log("接收到服务器返回的数据");
}else{
console.log("没有接收到服务器返回的数据");
}
}
}
if(xmlhttp.status >= 200 && xmlhttp.status < 300 ||
xmlhttp.status === 304){
// 5.处理返回的结果
console.log("接收到服务器返回的数据");
}else{
console.log("没有接收到服务器返回的数据");
}
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open("GET","05-ajax-get.txt?t="+(new Date().getTime()),true);
function ajax(url,success, error) {
// 1.创建一个异步对象
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
// 2.设置请求方式和请求地址
xmlhttp.open("GET", url+"?"+(new Date().getTime()), true);
// 3.发送请求
xmlhttp.send();
// 4.监听状态的变化
xmlhttp.onreadystatechange = function (ev2) {
if(xmlhttp.readyState === 4){
// 判断是否请求成功
if(xmlhttp.status >= 200 && xmlhttp.status < 300 ||
xmlhttp.status === 304){
// 5.处理返回的结果
// console.log("接收到服务器返回的数据");
success(xmlhttp);
}else{
// console.log("没有接收到服务器返回的数据");
error(xmlhttp);
}
}
}
}
function obj2str(obj) {
/*
{
"userName":"lnj",
"userPwd":"123456",
"t":"3712i947132987649813å2"
}
*/
obj = obj || {}; // 如果没有传参, 为了添加随机因子,必须自己创建一个对象
obj.t = new Date().getTime();
var res = [];
for(var key in obj){
// 在URL中是不可以出现中文的, 如果出现了中文需要转码
// 可以调用encodeURIComponent方法
// URL中只可以出现字母/数字/下划线/ASCII码
res.push(encodeURIComponent(key)+"="+encodeURIComponent(obj[key])); // [userName=lnj, userPwd=123456];
}
return res.join("&"); // userName=lnj&userPwd=123456
}
function ajax(url, obj,success, error) {
// 0.将对象转换为字符串
var str = obj2str(obj); // key=value&key=value;
// 1.创建一个异步对象
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
// 2.设置请求方式和请求地址
xmlhttp.open("GET", url+"?"+str, true);
// 3.发送请求
xmlhttp.send();
// 4.监听状态的变化
xmlhttp.onreadystatechange = function (ev2) {
if(xmlhttp.readyState === 4){
clearInterval(timer);
// 判断是否请求成功
if(xmlhttp.status >= 200 && xmlhttp.status < 300 ||
xmlhttp.status === 304){
// 5.处理返回的结果
// console.log("接收到服务器返回的数据");
success(xmlhttp);
}else{
// console.log("没有接收到服务器返回的数据");
error(xmlhttp);
}
}
}
}
function obj2str(obj) {
obj = obj || {}; // 如果没有传参, 为了添加随机因子,必须自己创建一个对象
obj.t = new Date().getTime();
var res = [];
for(var key in obj){
// 在URL中是不可以出现中文的, 如果出现了中文需要转码
// 可以调用encodeURIComponent方法
// URL中只可以出现字母/数字/下划线/ASCII码
res.push(encodeURIComponent(key)+"="+encodeURIComponent(obj[key])); // [userName=lnj, userPwd=123456];
}
return res.join("&"); // userName=lnj&userPwd=123456
}
function ajax(url, obj, timeout, success, error) {
// 0.将对象转换为字符串
var str = obj2str(obj); // key=value&key=value;
// 1.创建一个异步对象
var xmlhttp, timer;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
// 2.设置请求方式和请求地址
xmlhttp.open("GET", url+"?"+str, true);
// 3.发送请求
xmlhttp.send();
// 4.监听状态的变化
xmlhttp.onreadystatechange = function (ev2) {
if(xmlhttp.readyState === 4){
clearInterval(timer);
// 判断是否请求成功
if(xmlhttp.status >= 200 && xmlhttp.status < 300 ||
xmlhttp.status === 304){
// 5.处理返回的结果
// console.log("接收到服务器返回的数据");
success(xmlhttp);
}else{
// console.log("没有接收到服务器返回的数据");
error(xmlhttp);
}
}
}
// 判断外界是否传入了超时时间
if(timeout){
timer = setInterval(function () {
console.log("中断请求");
xmlhttp.abort();
clearInterval(timer);
}, timeout);
}
}
<form action="02-get-post.php" method="post">
<input type="text" name="userName"><br>
<input type="password" name="userPwd"><br>
<input type="submit" value="提交"><br>
form>
print_r($_POST);
echo $_POST["userName"];
echo $_POST["userPwd"];
?>
注意:
默认情况下服务器对上传文件的大小是有限制的, 如果想修改上传文件的限制可以修改php.ini文件
属性 | 功能 |
---|---|
file_uploads = On | 是否允许上传文件 On/Off 默认是On |
upload_max_filesize = 2048M | 上传文件的最大限制 |
post_max_size = 2048M | 通过Post提交的最多数据 |
max_execution_time = 30000 | 脚本最长的执行时间 单位为秒 |
max_input_time = 30000 | 接收提交的数据的时间限制 单位为秒 |
memory_limit = 2048M | 最大的内存消耗 |
<form action="03-post-file.php" method="post" enctype="multipart/form-data">
<input type="file" name="upFile"><br>
<input type="submit" value="上传"><br>
form>
//echo "post page";
//print_r($_POST);
//echo "
";
//print_r($_FILES);
// 1.获取上传文件对应的字典
$fileInfo = $_FILES["upFile"];
//print_r($fileInfo);
// 2.获取上传文件的名称
$fileName = $fileInfo["name"];
// 3.获取上传文件保存的临时路径
$filePath = $fileInfo["tmp_name"];
//echo $fileName;
//echo "
";
//echo $filePath;
// 4.移动文件
move_uploaded_file($filePath, "./source/".$fileName);
?>
var xhr;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xhr=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}
// var xhr = new XMLHttpRequest();
xhr.open("POST","08-ajax-post.php",true);
// 注意点: 以下代码必须放到open和send之间
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("userName=zs&userPwd=321");
xhr.onreadystatechange = function (ev2) {
if(xhr.readyState === 4){
if(xhr.status >= 200 && xhr.status < 300 ||
xhr.status === 304){
// alert("请求成功");
alert(xhr.responseText);
}else{
alert("请求失败");
}
}
}
function obj2str(data) {
data = data || {}; // 如果没有传参, 为了添加随机因子,必须自己创建一个对象
data.t = new Date().getTime();
var res = [];
for(var key in data){
res.push(encodeURIComponent(key)+"="+encodeURIComponent(data[key])); // [userName=lnj, userPwd=123456];
}
return res.join("&"); // userName=lnj&userPwd=123456
}
function ajax(option) {
// 0.将对象转换为字符串
var str = obj2str(option.data); // key=value&key=value;
// 1.创建一个异步对象
var xmlhttp, timer;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
// 2.设置请求方式和请求地址(判断请求方式为 GET 还是 POST)
if(option.type.toLowerCase() === "get"){
xmlhttp.open(option.type, option.url+"?"+str, true);
// 3.发送请求
xmlhttp.send();
}else{
xmlhttp.open(option.type, option.url,true);
// 注意点: 以下代码必须放到open和send之间
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(str);
}
// 4.监听状态的变化
xmlhttp.onreadystatechange = function (ev2) {
if(xmlhttp.readyState === 4){
clearInterval(timer);
// 判断是否请求成功
if(xmlhttp.status >= 200 && xmlhttp.status < 300 ||
xmlhttp.status === 304){
// 5.处理返回的结果
// console.log("接收到服务器返回的数据");
option.success(xmlhttp);
}else{
// console.log("没有接收到服务器返回的数据");
option.error(xmlhttp);
}
}
}
// 判断外界是否传入了超时时间
if(option.timeout){
timer = setInterval(function () {
console.log("中断请求");
xmlhttp.abort();
clearInterval(timer);
}, option.timeout);
}
}
$.ajax({
url: "09-ajax-jquery.php",
type: "get",
data: "userName=lnj&userPwd=654321",
success: function(msg){
alert(msg );
},
error: function (xhr) {
alert(xhr.status);
}
});
toLowerCase() === "get"
function ajax(option)
ajax({
url:"04-ajax-get.php",
data:{
"userName":"lnj",
"userPwd":"123456"
},
timeout: 3000,
type:"post",
success: function (xhr) {
alert(xhr.responseText);
},
error: function (xhr) {
alert("请求失败");
}
});
<person> // 根节点(随便写)
// 数据
person>
js
ajax({
type:"get",
url:"11-ajax-xml.php",
success: function (xhr) {
// console.log(xhr.responseXML);
// console.log(document);
var res = xhr.responseXML;
console.log(res.querySelector("name").innerHTML);
console.log(res.querySelector("age").innerHTML);
},
error: function (xhr) {
console.log(xhr.status);
}
})
php
// 执行结果中有中文, 必须在php文件顶部设置
//header("content-type:text/html; charset=utf-8");
// 如果PHP中需要返回XML数据, 也必须在PHP文件顶部设置
header("content-type:text/xml; charset=utf-8");
echo file_get_contents("info.xml");
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
josn 语法规则
JSON 与 JS 对象的关系
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
js
ajax({
type:"get",
url:"12-ajax-json.php",
success: function (xhr) {
// console.log(xhr.responseText);
var str = xhr.responseText;
/*
在低版本的IE中, 不可以使用原生的JSON.parse方法, 但是可以使用json2.js这个框架来兼容
*/
var obj = JSON.parse(str);
// console.log(obj);
console.log(obj.name);
console.log(obj.age);
},
error: function (xhr) {
console.log(xhr.status);
}
})
php
echo file_get_contents("12-ajax-json.txt");
json
{
"name":"lnj",
"age":"33"
}
cookie
session
document.cookie = "name=lnj;";
document.cookie = "age=33;";
var date = new Date();
date.setDate(date.getDate() - 1);
document.cookie = "age=33;expires="+date.toGMTString()+";";
document.cookie = "name=zs;path=/;domain=127.0.0.1;";
window.onload = function (ev) {
function addCookie(key, value, day, path, domain) {
// 1.处理默认保存的路径
// if(!path){
// var index = window.location.pathname.lastIndexOf("/")
// var currentPath = window.location.pathname.slice(0, index);
// path = currentPath;
// }
var index = window.location.pathname.lastIndexOf("/")
var currentPath = window.location.pathname.slice(0, index);
path = path || currentPath;
// 2.处理默认保存的domain
domain = domain || document.domain;
// 3.处理默认的过期时间
if(!day){
document.cookie = key+"="+value+";path="+path+";domain="+domain+";";
}else{
var date = new Date();
date.setDate(date.getDate() + day);
document.cookie = key+"="+value+";expires="+date.toGMTString()+";path="+path+";domain="+domain+";";
}
}
function getCookie(key) {
// console.log(document.cookie);
var res = document.cookie.split(";");
// console.log(res);
for(var i = 0; i < res.length; i++){
// console.log(res[i]);
var temp = res[i].split("=");
// console.log(temp);
if(temp[0].trim() === key){
return temp[1];
}
}
}
console.log(getCookie("name"));
// 默认情况下只能删除默认路径中保存的cookie, 如果想删除指定路径保存的cookie, 那么必须在删除的时候指定路径才可以
function delCookie(key, path) {
addCookie(key, getCookie(key), -1, path);
}
delCookie("name", "/");
}
window.location.hash = 3;
console.log(window.location.hash.substring(1));
什么是ajax:
Ajax包含下列技术:
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET", "04-ajax-get.php", true);
xmlhttp.send();
xmlhttp.onreadystatechange = function (ev2) {
if(xmlhttp.readyState === 4){
// 判断是否请求成功
if(xmlhttp.status >= 200 && xmlhttp.status < 300 ||
xmlhttp.status === 304){
// 5.处理返回的结果
console.log("接收到服务器返回的数据");
}else{
console.log("没有接收到服务器返回的数据");
}
}
}
if(xmlhttp.status >= 200 && xmlhttp.status < 300 ||
xmlhttp.status === 304){
// 5.处理返回的结果
console.log("接收到服务器返回的数据");
}else{
console.log("没有接收到服务器返回的数据");
}
JavaScript | AJAX |
---|---|
JavaScript是一种基于对象的脚本语言。 | AJAX是一组相互关联的技术,如JavaScript,XML,HTML,CSS等 |
它请求服务器并等待响应。 | 它向服务器发送请求,不等待响应。 |
重新加载页面时会占用更多带宽。 | 它不会重新加载页面,因此占用的带宽更少。 |
同源策略限制 不同源会造成跨域。以下任意一种情况不同,都是不同源。
例子:
http:// | 协议不同 |
www | 子域名不同 |
baidu.com | 主域名不同 |
8080 | 端口号不同 |
www.baidu.com | ip地址和网址不同 |
//去创建一个script标签
var script = document.createElement("script");
//script的src属性设置接口地址 并带一个callback回调函数名称
script.src = "http://127.0.0.1:8888/index.php?callback=jsonpCallback";
//插入到页面
document.head.appendChild(script);
//通过定义函数名去接收后台返回数据
function jsonpCallback(data){
//注意 jsonp返回的数据是json对象可以直接使用
//ajax 取得数据是json字符串需要转换成json对象才可以使用。
}
Access-Control-Allow-Origin: * //允许所有域名访问
或者
Access-Control-Allow-Origin: http://a.com //只允许所有域名访问
// URL http://a.com/foo
var ifr = document.createElement('iframe');
ifr.src = 'http://b.a.com/bar';
ifr.onload = function(){
var ifrdoc = ifr.contentDocument || ifr.contentWindow.document;
ifrdoc.getElementsById("foo").innerHTML);
};
ifr.style.display = 'none';
document.body.appendChild(ifr);