前端工程师基础课程作业

一、问答题:

(1)139邮箱资源服务器与缓存相关的响应首部是怎么配置的?

(2)登录139邮箱web2.3,在浏览器有缓存的情况下,刷新页面,浏览器会不会重新发送请求获取静态资源?如果会,请列出与缓存相关的请求首部以及响应状态码;如果不会,请说明原因。

(3)请指出Cache-Control与Expires的区别

(4)新功能上线后,如何清空浏览器的缓存,让用户获取最新的资源文件?

问题1、问题2 可用Fiddler抓包然后截图说明。

二、编程题:

请写一个页面,并封装相应的JS代码,完成139邮箱的写信功能,无需调用邮箱组件,完成发信功能即可。

我的答案:

一 问答题:

(1)、139邮箱资源服务器与缓存相关的响应首部配置如下图所示:

  

(2)、依然会重新发送请求获取静态资源,服务器响应304 Not Modified,所以会使用本地资源。

从请求头部可知缓存max-age = 0,没有缓存请求,所以会再发送请求。

      

(3)、

网页的缓存是由HTTP消息头中的“Cashe-control”来控制的,其中max-age的值表示在此值内的时间里不会重新访问服务器。

Expires 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的效果。但是如果同时存在,则被Cache-Control的max-age覆盖。

Cache-control:

  根据是否可缓存分为

  Public 指示响应可被任何缓存区缓存。

  Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的

  部分响应消息,此响应消息对于其他用户的请求无效。

  no-cache 指示请求或响应消息不能缓存(HTTP/1.0用Pragma的no-cache替换)

  根据什么能被缓存

  no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

  根据缓存超时

  max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

  min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

  max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

Expires:

数据包中的格式:
Expires = "Expires" ":" HTTP-date 
例如

Expires: Thu, 01 Dec 1994 16:00:00 GMT (必须是GMT格式)

(4)、

可以在地址后面加版本号。

因为HTTP请求时候,如果访问的路径不变,而客户端缓存中又有该文件时,浏览器会直接调用缓存中的文件。这样的话,即使服务器的资源文件更新了,但是客户端仍然有可能显示的是以前的资源文件。而加上新的版本号以后,浏览器会认为这是一个新的地址,会重新下载最新版本的文件。加版本号会强制浏览器更新,清空浏览器的缓存,让用户获取最新的资源文件。

二、编程题:

    我的思路是

1、用139邮箱的写信功能发送一封信件,通过Fiddler抓包获取邮件发送接口。

2、通过抓包,在TextView中观察发送出去的数据。

3、编写写信页面(包含收件人、主题、正文),命名为index.html,将其挂载在Fiddler上。

4、获取登陆后URL中sid的值。

5、用ajax将写信页面中的收件人、主题、正文的值传到服务器。

HTML代码:

<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>139邮箱</title>
<script charset="utf-8" src="javascript.js" type="text/javascript"></script>
</head>

<body>
    <!--以下这个table包含收件人、主题、正文-->
    <table align="center" style="margin-top:150px" >
        <tr>
            <th colspan=‘2‘ align="center">139邮箱写信页面</th>
        </tr>
        <tr>
            <td align="right">收件人:</td>
            <td><input type="text" name="to" style="width:300px"></td>
        </tr>
        <tr>
            <td align="right">主题:</td>
            <td><input type="text" name="subject" style="width:300px" ></td>
        </tr>
        <tr>
            <td align="right">正文:</td>
            <td>
                <textarea rows="5" cols="50" name="content"></textarea>
            </td>
        </tr>
        <tr>
            <td colspan=‘2‘ align="right"><input type="button" value="发送"  onclick="send();"/></td>
        </tr>
    </table>
    <div id="resText"></div>
    <!--包含收件人、主题、正文的table结束-->
 </body>
</html>

JS代码:

        function send() {
            function QueryString(){    //这个函数是获取sid值
                var name;
                var value;
                var str=location.href;
                var num=str.indexOf("?")
                var str=str.substr(num+1);
                var arrtmp=str.split("&");
                for(var i=0 ; i < arrtmp.length ; i++){
                    num=arrtmp[i].indexOf("=");
                    if(num>0){
                        name=arrtmp[i].substring(0,num);
                        value=arrtmp[i].substr(num+1);
                        this[name]=value;
                    }
                }
            }

            function cookieString(){    //这个函数是获取cookie中的电话值
                var name;
                var value;
                var str=document.cookie;
                var arrtmp=str.split("; ");
                for(var i=0 ; i < arrtmp.length ; i++){
                    num=arrtmp[i].indexOf("=");
                    if(num>0){
                        name=arrtmp[i].substring(0,num);
                        value=arrtmp[i].substr(num+1);
                        this[name]=value;
                    }
                }
            }
            var Request1=new cookieString();
            cookieNum = Request1["Login_UserNumber"];
            email = cookieNum+"@139.com";

            //调用函数QueryString()获取URL中的sid
            var Request=new QueryString();
            ID=Request["sid"];

            var to;                    //收件人
            var subject;            //主题
            var content;            //正文
            to = document.getElementsByName("to")[0].value;                        //获取收件人地址
            subject = document.getElementsByName("subject")[0].value;        //获取主题内容
            content = document.getElementsByName("content")[0].value;        //获取正文内容

            //将从页面获得的数据插入到抓包得到的数据
            var str = ‘<object> <object name="attrs"><string name="id" /><string name="mid" /><string name="messageId" /><string name="account">&quot;&quot;&lt;‘+email+‘&gt;</string><string name="to">‘+to+‘</string><string name="cc" /><string name="bcc" /><int name="showOneRcpt">0</int><int name="isHtml">1</int><string name="subject">‘+subject+‘</string><string name="content">‘+content+‘</string><int name="priority">3</int><int name="signatureId">0</int><int name="stationeryId">0</int><int name="saveSentCopy">1</int><int name="requestReadReceipt">0</int><int name="inlineResources">1</int><int name="scheduleDate">0</int><int name="normalizeRfc822">0</int><array name="attachments"></array></object><string name="action">deliver</string> <int name="replyNotify">0</int><int name="returnInfo">1</int></object>‘;

           //先声明一个异步请求对象
          var xmlHttpReg = null;
          if (window.ActiveXObject) {//如果是IE
              xmlHttpReg = new ActiveXObject("Microsoft.XMLHTTP");
          } else if (window.XMLHttpRequest) {
              xmlHttpReg = new XMLHttpRequest(); //实例化一个xmlHttpReg
           }

           //如果实例化成功,就调用open()方法,就开始准备向服务器发送请求
           if (xmlHttpReg != null) {
               xmlHttpReg.open("post", "http://appmail.mail.10086.cn/RmWeb/mail?func=mbox:compose&categroyId=103000000&sid="+ID , true);
               xmlHttpReg.send(str);
               xmlHttpReg.onreadystatechange = doResult; //设置回调函数
           }

           //回调函数,一旦readyState的值改变,将会调用这个函数,readyState=4表示完成相应设定函数doResult()
          function doResult() {
              if (xmlHttpReg.readyState == 4) {//4代表执行完成
                  if (xmlHttpReg.status == 200) {//200代表执行成功
                       //将xmlHttpReg.responseText的值赋给ID为resText的元素
                       document.getElementById("resText").innerHTML = xmlHttpReg.responseText;
                   }
               }
           }
        }
            

前端工程师基础课程作业,布布扣,bubuko.com

时间: 2024-12-28 15:51:04

前端工程师基础课程作业的相关文章

2014前端工程师基础课程作业

一.问答题: (1)139邮箱资源服务器与缓存相关的响应首部是怎么配置的? 答: (2)登录139邮箱web2.3,在浏览器有缓存的情况下,刷新页面,浏览器会不会重新发送请求获取静态资源?如果会,请列出与缓存相关的请求首部以及响应状态码:如果不会,请说明原因. 答:依然会发送请求资源的请求,但服务器响应304,使用本地资源. (3)请指出Cache-Control与Expires的区别 Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓

前端工程师基础培训_问答(139邮箱)

一.问答题: (1)139邮箱资源服务器与缓存相关的响应首部是怎么配置的? (2)登录139邮箱web2.3,在浏览器有缓存的情况下,刷新页面,浏览器会不会重新发送请求获取静态资源?如果会,请列出与缓存相关的请求首部以及响应状态码:如果不会,请说明原因. (3)请指出Cache-Control与Expires的区别 (4)新功能上线后,如何清空浏览器的缓存,让用户获取最新的资源文件? 问题1.问题2 可用Fiddler抓包然后截图说明. 二.编程题: 请写一个页面,并封装相应的JS代码,完成13

前端工程师晋升课程 Vue全家桶+SSR+Koa2全栈开发美团网

第1章 课程导学这门课主讲以Vue SSR+Koa2全栈技术为目标,最终实现美团网项目.本章节旨在告诉大家我们会用到哪些技能.教学方法.课程内容分布.学习方法等.备注:我们会涉及Vue2.5.Nuxt.Koa2.element-ui.Mongodb等 1-1 课程导学第2章 Vue基础知识整个SSR部分都是用的Vue框架,需要给初级用户讲解Vue的基础语法,不会让他们在学习实战的时候感到迷茫,这个章节会通过vue-cli搭建一个简单的demo,让大家快速的掌握Vue的基础应用,即使他没有学习过.

web前端技术基础课程详解之JavaScript面向对象

JavaScript中的面向对象是个老生常谈的话题,但是依然有很多小伙伴处于懵逼状态.面试时候最担心的就是被问到面向对象相关的内容,自己看过无数的资料,依然对面向对象百思不得其解.到底什么是原型?什么是构造函数?什么是继承...一提到这些概念那真是欲哭无泪.悲愤交加,甚至恨的直咬牙!所以有必要谈一次面向对象. 对象在生活中指的是女朋友或者男朋友,而在JavaScript里说的通俗一点就是一个放了很多属性与方法的集合,有很多的属性与方法是一个对象最显著的特点(可以粗暴的认为,但凡有属性与方法的就是

3月7日课程作业 信息化基础知识、信息化系统服务管理

3月7日课程作业  信息化基础知识.信息化系统服务管理 信息化基础知识 1.国家信息化体系要素 a) 信息化技术:是信息化体系六要素的龙头. b) 信息化资源:是国家信息化的核心任务,是国家信息建设取得实效的关键,也是我国信息化的薄弱环节.信息资源开发和利用的程度是衡量国家信息化水平的一个重要标志. c) 信息网络:是信息资源开发利用和信息技术应用的基础.通常将信息网络分为电信网.广播电视网和计算机网络.三网的发展方向将逐步实现三网融合. d) 信息技术和产业:是我国进行信息化建设的基础. e)

【慕课网】php工程师学习计划之我的学习笔记——01 入门必学web基础 htmlcss基础课程 篇

为了进一步学习PHP,本周我选定了慕课网的PHP工程师学习计划, 从今天2015-07-06 10:24:47开始从头学习:计划本周尽快学习完成本课程,谨此作为笔记. 有个好的学习计划和思路非常非常重要,非常感谢慕课网提供本套学习计划,希望更多地学习平台能提供像这样全面一条龙学习思路清晰地教程. 计划图:链接 我的学习状况:2015-07-06 10:29:46 开始随记: php工程师学习计划笔记——01 入门必学web基础 htmlcss基础课程 篇 入门篇: text-align:cent

web前端开发基础班课程大纲

前端开发是创建Web页面或app等前端界面呈现给用户的过程.前端开发通过HTML,CSS及JavaScript以及衍生出来的各种技术.框架.解决方案,来实现互联网产品的用户界面交互.Web前端工程师,他是伴随着web兴起而细分进去的行业.Web前端的岗位职责是利用HTML.CSS.JavaScript.DOM.Flash等各种Web技能结合产品的界面开发.web前端开发入门教程要学哪些内容呢? 首先第一阶段就是基础学习, 1.HTML基础 内容包括:(HTML简介与历史版本.常用开发软件.常见标

如何成为一名优秀的Web前端工程师?

何为:前端工程师? 前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发技术主要包括三个要素:HTML.CSS和JavaScript!它要求前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化.SEO和服务器端的基础知识,而且要学会运用各种工具进行辅助开发以及理论层面的知识,包括代码的可维护性.组件的易用性.分层语义模板和浏览器分级支持等.随着近两三年来RIA(Rich Internet Applications的缩写,中文含义为:丰富的因特网应用程

Web前端工程师前景何去何从

互联网日新月异,各种应用程序如雨后春笋般冒了出来.生活节奏的加快,大众的消费意识,也发生了很大的转变.从习惯性的逛商场.超市,到现在接受在互联网APP里面下单.这种习惯的改变彻底改变了国人的消费习惯.一年比一年高涨的双十一,就是很有利的证明.正是在这样的大环境下,WEB前端工程师http://www.maiziedu.com/course/web/这一职业诞生了. 何为WEB前端工程师?简单来说,就是从事WEB前端的工程师.Web前端具体包括:传统的PC网站的前端.手机等移动端网站前端.APP客