ThinkPHP 5.1 跨域配置
因為最近的專案採用了API介面開發方式,後端需要配置跨域的規則以便前端能夠訪問。
系統採用的框架為 ThinkPHP,版本 5.1.19
關於OPTIONS請求
由於前端的知識不是很熟悉,查閱了網上的資料得知,OPTIONS 請求是在 AJAX 傳送請求前傳送的一個驗證請求,該請求會驗證一系列規則,若符合規則則會發送實際的 GET 或 POST 請求,跨域的規則也是 OPTIONS 請求時進行驗證的。
遇到的問題
按照網上大部分關於跨域請求的配置,基本都是以下三行程式碼:
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization"); header('Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS,PATCH');
把這三行程式碼放到 /route/route.php,/route/api.php,/public/index.php 以及受訪問的控制器檔案頭部均出現以下報錯資訊:
Failed to load http://url.com/main/info: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'null' is therefore not allowed access.The response had HTTP status code 404.
說明配置並沒有生效。
查閱 ThinkPHP 的文件,文件給出的例子:
Route::get('new/:id', 'News/read')
->ext('html')
->allowCrossDomain();
意思是隻需要在路由的尾部新增 allowCrossDomain() 即可,所以我在每個需要進行跨域訪問的路由後都添加了 ->allowCrossDomain(),問題得以解決。
另外的問題
由於前端的 AJAX 請求通常需要攜帶 token 驗證,所以還需要將 token 新增到 Access-Control-Allow-Headers
文件的例子是
Route::get('new/:id', 'News/read')
->ext('html')
->header('Access-Control-Allow-Origin','thinkphp.cn')
->header('Access-Control-Allow-Credentials', 'true')
->allowCrossDomain();
我按照上面的方法添加了 ->header('Access-Control-Allow-Headers','token') ,再次請求出現了下面的報錯:
Failed to load: http://url.com/main/info: Request header field token is not allowed by Access-Control-Allow-Headers in preflight response.
header 的配置沒有生效。
解決辦法:將 header('Access-Control-Allow-Headers: content-type,token'); 新增到 入口檔案 /public/index.php 即可。
相關推薦
ThinkPHP 5.1 跨域配置
因為最近的專案採用了API介面開發方式,後端需要配置跨域的規則以便前端能夠訪問。 系統採用的框架為 ThinkPHP,版本 5.1.19 關於OPTIONS請求 由於前端的知識不是很熟悉,查閱了網上的資料得知,OPTIONS 請求是在 AJAX 傳送請求前傳送的一個驗證
Nginx 跨域配置
res tro 問題 days coo elk max-age user pen 隨著 RESTFul 的流行,就會牽扯到跨域問題,那麽小夥伴有沒有被坑過,高人繞過,有需求的請往下看: location / { if ($request_method = ‘OPTION
thinkphp中session跨域問題
cto jpg access car ls參數 -c style 使用 應用 問題描述 《thinkphp實現短信驗證註冊》中,小編不止記錄了短信驗證碼的實現方法,同時還記錄了圖片驗證碼的實現方法。本地使用,一切正常;後端項目和前端項目都部署到服務器,一切正常;後端項目部署
webAPI跨域配置
tom method 限制 protocol requested acc bapi access get <httpProtocol> <!--跨域配置開始--> <customHeaders> &
springboot跨域配置
port get example pro har sta 網頁 bean build 關於什麽是跨域的問題,感興趣的同學可以看阮一峰老師的日誌 http://www.ruanyifeng.com/blog/2016/04/cors.html。 下面貼出我在sprin
.Net Core Api 跨域配置
允許 host public ice conf ONBUILD fig edev lec .Net Core 和Asp.Net 不同,不需要再去引用其他的跨域組件。創建項目時,就有了。 讓接口實現跨域,需要配置兩個地方。 一、Startup.cs 這裏需要配置兩個地方
dotnet core 2.1 跨域
.NET Core跨域問題: 1、在Startup.cs中ConfigureServices中新增: services.AddCors(); 2、在Startup.cs中Configure方法中新增: app.UseCors(builder => builder
windows下apache 跨域配置
1,首先編輯httpd.conf 找到 #LoadModule headers_module modules/mod_headers.so 去掉# 2,修改以下配置 conf/extra/httpd-ssl &n
Thinkphp 5.1+ 中的路由分組
開篇廢話: 除四書外,杜撰的太多,偏只我是杜撰不成? thinkphp 3.2 之後 '杜撰' Laravel 太嚴重,既然這樣,我 們為什麼不直接用 Laravel 呢?!! 我用 Lumen 寫 api 習慣了,總是想把路由寫成分組格式或是把字首,中介軟體等摘出來,TP5.1+ 中可以實現,
vue-cli3.x vue.config.js 跨域配置
blog 調用 art code 頁面 port tail chang then devServer: { open: true, //瀏覽器自動打開頁面 host: "0.0.0.0", //如果是真機測試,就使用這個IP
ThinkPHP 5.1.x SQL注入漏洞分析
一、背景引見 ThinkPHP 是一個疾速、複雜的基於 MVC 和麵向物件的輕量級 PHP 開發框架,遵照 Apache2 開源協議釋出。ThinkPHP從降生以來不斷秉承簡潔適用的設計準繩,在堅持出色的功能和至簡的程式碼的同時,也注重開發體驗和易用性,為 WEB 使用和 API 開發提供了強無
spring-boot 全域性跨域配置
什麼是跨域問題? 跨域,指的是瀏覽器不能執行其他網站的指令碼。它是由瀏覽器的同源策略造成的,是瀏覽器對 JavaScript 施加的安全限制。 什麼是同源? 所謂同源是指,域名,協議,埠均相同 http://www.wzhu.tk
asp.net Core 跨域配置
1.新增中介軟體 在ConfigureServices中新增 //跨域中介軟體服務 services.AddCors(); 在 Configure中新增 //跨域配置 app.UseCors(builder =&g
nignx跨域配置處理
在nginx.conf中配置 server { location / { index index.html index.htm index.php l.php; add_header 'Access-Contr
nginx跨域配置(windos走過的坑)
nginx下載地址: http://nginx.org/en/download.html 紅圈區域是穩定版 解壓之後放在資料夾就可以了。 解壓後: 注意:這裡面有個nginx.exe檔案,一般情況下雙擊執行就可以了,但是由於windos部分機型他不支援日誌填寫,執行後可能無法關閉
spring boot 跨域配置
新建如下JAVA類: import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springf
前後端分離 後端跨域配置以及Opitions 方法不被訪問
後端這裡是 .net framework4.6 webapi 在web.config中<system.webServer>節點配置 <httpProtocol> <customHeaders> &n
centos7.2 環境下 mysql-5.1.73 安裝配置
安裝mysql,安裝前準備 如果mysql使用者不存在,那麼新增mysql使用者 groupadd mysql useradd -g mysql mysql mysql編譯安裝 tar -zxvf mysql-5.1.73.tar.gz cd mysql-5.1.73 yum install nc
vue axois 跨域配置
在vue專案中找到config裡面的index,再配置裡面的proxyTable如下圖: dev: { // Paths解決跨域問題 assetsSubDirectory: ‘static’, assetsPublicPath: ‘/’, proxyTable:
Spring-Boot v2.0.5 設定跨域訪問
在@Configuration註解下的類中新增如下配置 @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfig