1.如何解决跨域的问题:
跨域:协议、域名、端口号都相同,只要有一个不相同,那么都是非同源。
     同源策略限制情况:
  1.cookie,localStorage 和 IndexDB 无法读取
2.DOM 和 JS对象无法获得
3.AJAX请求不能发送
  注意:对于像 img、iframe、script 等标签的 src 属性是特例,它们是可以访问非同源网站的资源的。
跨域解决办法:

  ①、response 添加 header

    我们在 Servlet 请求返回时添加如下代码:

1 //*表示支持所有网站访问,也可以额外配置相应网站
2 resp.setHeader("Access-Control-Allow-Origin", "*");

  ②、JSONP 方式

  首先我们要修改 index.jsp 页面的 ajax 请求:

1 $.ajax({
2             type:"get",
3             async:false, 4 url:"http://localhost:8080/JavaWeb01/getPassWordByUserNameServlet?userName=Tom", 5 dataType:"jsonp",//数据类型为jsonp 6 jsonp:"backFunction",//服务端用于接收callBack调用的function名的参数 7 success:function (data) { 8 alert(data["passWord"]); 9 }, 10 error:function () { 11 alert("error"); 12 } 13 14 });

  注意:我们修改了 dataType 的数据类型为 jsonp,并且新增了 jsop 属性值为 “backFunction”。

  ④、nginx 转发

  

JSONP优缺点:

1.优点

  (1)不像XMLHttpRequest对象实现Ajax请求那样受到同源策略限制,JSONP可以跨越同源策略

  (2)在浏览器中兼容性好

  (3)在请求完毕后可以哦你给过调用callback方式回传结果,将controller和view分开,jsonp服务只提供纯服务的数据,页面渲染由自己定义

2.缺点

  (1)只支持get请求不支持post请求

  (2)只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间javascript调用问题

  (3)调用失败的时候不会返回各种HTTP状态码

  (4)安全性低,如果提供JSONP服务的一方有漏洞,他返回的javascript内容容易被人控制

2.常见Http请求头

  http消息头,在超文本传输协议( Hypertext Transfer Protocol ,HTTP)的请求和响应消息中,协议头部分的组件,http消息头用来准确描述正在获取的资源,服务器或者客户端行为,定义了http事务中的具体操作参数。

  请求头:  

GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
  Accept: /(客户端能接收的资源类型)
  Accept-Language: en-us(客户端接收的语言类型)
  Connection: Keep-Alive(维护客户端和服务端的连接关系)
  Host: localhost:8080(连接的目标主机和端口号)
  Referer: http://localhost/links.jsp(告诉服务器我来自于哪里)
  User-Agent: Mozilla/4.0(客户端版本号的名字)
  Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
  If-Modified-Since: Tue, 11 Jul 2017 18:23:51 GMT(缓存时间)
  Cookie(客户端暂存服务端的信息)
  Date: Tue, 18 Jul 12:15:02 GMT(客户端请求服务端的时间)
响应头
HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)
  Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
  Server:apache tomcat(服务端的Web服务端名)
  Content-Encoding: gzip(服务端能够发送压缩编码类型)
  Content-Length: 80(服务端发送的压缩数据的长度)
  Content-Language: zh-cn(服务端发送的语言类型)
  Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
  Last-Modified: Tue, 18 Jul 2017 12:15:02 GMT(服务端对该资源最后修改的时间)
  Refresh: 1;url=http://www.helloyoucan.com.(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
  Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
  Transfer-Encoding: chunked(分块传递数据到客户端)
  Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
  Expires: -1//3种(服务端禁止客户端缓存页面数据)
  Cache-Control: no-cache(服务端禁止客户端缓存页面数据)
  Pragma: no-cache(服务端禁止客户端缓存页面数据)
  Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)
  Date: Tue, 18 Jul 2017 12:18:03 GMT(服务端响应客户端的时间)

转载于:https://www.cnblogs.com/menghan94/p/11182745.html

面试准备JSONP(一)相关推荐

  1. “约见”面试官系列之常见面试题之第六十七篇之jsonp原理和实现(建议收藏)

    一. 同源策略 所有支持Javascript的浏览器都会使用同源策略这个安全策略.看看百度的解释: 同源策略,它是由Netscape提出的一个著名的安全策略. 现在所有支持JavaScript 的浏览 ...

  2. “约见”面试官系列之常见面试题第十五篇之jsonp(建议收藏)

    目录 什么是jsonp 首先先知道 为什么需要JSONP? JSONP的原理 jsonp的第一种方式,将目标作为js形式加载过来,尽管其实对方是一个php 一.Ajax工作原理 二.Jsonp工作原理 ...

  3. 说说json和jsonp 也许你会明白它的原理 含有jQuery实例 蛋疼 ,我面试的时候被卡了 赶紧写一个回顾...

    说到AJAX就会不可避免的面临两个问题, 第一个是AJAX以何种格式来交换数据? 第二个是跨域的需求如何解决? 这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以 ...

  4. 前端跨域jsonp的细节,挡住面试官的连环提问

    1.前言 在前端面试中,想必每一个人都会被问到跨域相关的问题,背过八股文的小伙伴肯定对跨域的解决对答如流,常见的跨域解决方案在网上有很多整理,但是如果问到实现的细节,你是否能够手写实现或者深入解读呢? ...

  5. “约见”面试官系列之常见面试题之第六十五篇之ajax如何解析jsonp(建议收藏)

    json是一种轻量级交互格式,本质上都是字符串,常用于前后端的数据交互,本质上就是字符串. 前端解析后端数据 前端在解析后端发来的数据,使用JSON.parse()方法把字符串转为json对象. 前端 ...

  6. PHP面试内容 整理搜集 PHP面试涉及技术 一文回顾全部 主要含PHP面试命令列表 方法列表...

    PHP面试时常涉及的内容总结 熟悉框架 逻辑题 快排  正则 数组函数.... 抽奖, 秒杀 数据库 优化,sql书写 缓存 redis mecache Linux命令 其他技术 sphinx, sw ...

  7. 那些巨头公司的前端面试都喜欢问些什么?

    在过去的几年里,我在亚马逊和雅虎面试过很多专注于前端开发的Web开发者和软件工程师,在这篇文章中,我想分享一些面试技巧,帮助候选人为面试做好准备. 免责声明--本文并非旨在列出在前端面试中可能会被问到 ...

  8. 2016 实习招聘面试经历 - 3

    文章写于 2016 年,旧的博客不维护了,一些文章直接迁移到这边来.本文为当时记录的第三篇,记得应该是腾讯音乐的内推一面/二面.后面内推挂了,走的实习招聘. 前端跨域 讲jsonp的原理, 如何实现 ...

  9. 前端面试问题(持续更新)

    1.有关BFC的理解 2.盒模型的理解 3.box-sizing的理解 4.渐进增强 VS 优雅降级 5.url->页面加载完成的整个流程 6.js组成部分 7.如何跨域访问 8.js判断数组 ...

  10. 面试官:说说微信和淘宝扫码登录背后的实现原理?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | my.oschina.net/u/423172 ...

最新文章

  1. Kprobe在Linux kernel debug中的应用
  2. C++的sort排序法
  3. php里Array2xml
  4. java 人脸识别 demo_java引用Arcface,实现人脸识别(demo)
  5. vue-router之路由属性配置说明
  6. VS2019调试查看变量_你很可能需要知道这个调试小技巧
  7. net应用程序中发生了未经处理的异常怎么办_介绍一些在.NET Core 3.0中引入的诊断改进工具...
  8. UserDetailsService详解
  9. django 1.8 官方文档翻译: 1-2-4 编写你的第一个Django应用,第4部分
  10. 全球最快65W闪充!OPPO Reno Ace正式发布 高达限量定制版售价仅3599元
  11. 免费开源!仿微信仿陌陌类APP源代码整项目开源,包括ADT项..
  12. Unable to start LiveReload server
  13. mac HBuX连接夜神模拟器,连接真机
  14. model.load_state_dict(state_dict, strict=False)
  15. 齐齐哈尔计算机科学与技术学院,齐齐哈尔职工大学官网
  16. 外包公司到底能不能选择
  17. Matlab 各种画图函数用法
  18. Tecplot —— 探针提取数据集任一点数值
  19. 简单讲讲前端路由概念
  20. Python PDF转JPG

热门文章

  1. c里面的fflush函数
  2. 白盒测试的学习之路----(五)TestNG的参数分离
  3. Javascript中相同Function使用多个名称
  4. [转载]表的设计命名的十个注意点
  5. 使用C# WinForm实现打印小票的功能
  6. 在Angular外部使用js调用Angular控制器中提供的函数方法或变量
  7. libevent 编程疑难解答
  8. 美国数学家维纳智力早熟,11岁就上了大学,他曾在1935-1936年 应邀参加中国清华大学讲学,一次他参加某个重要会议,年轻的脸孔 引人注意,于是有人询问他的年龄,他回答说“我年龄的立方是个4位数
  9. 爬虫实例4 爬取网络小说
  10. canopy java_在Windows上安装带有Enthought Canopy的Theano