iT邦幫忙

0

Apache+PHP的CORS跨域請求設定

php
  • 分享至 

  • xImage

公司的網頁是Apache+PHP
最近網頁主機的硬碟容量快不夠了
想要把公司的產品介紹的PDF檔以及其他檔案從網頁目錄的D槽移到E槽

一開始是測試在原本的目錄下建立捷徑指向E槽目錄,測試才知道沒辦法這樣做

之後想到的是在httpd.conf再設定一個虛擬目錄
測試設定7778這個port,內容指向E槽
Listen 7778
NameVirtualHost *:7778
<VirtualHost *:7778>
ServerName *:7778
DocumentRoot "E:/web"

用這個方式,如果是提供網址直接連接做下載動作是可以的
例如 HTTP://127.0.0.1:7778/pdf/test.pdf
但是網頁裡有部分的檔案是透過javascript用GET的方式顯示在網頁上
這就會出現
Access to XMLHttpRequest at '7778port新的檔案連結' from origin '原本80port網站' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
無法跨來源請求

參考了這個網站
https://riptutorial.com/zh-TW/apache/example/19826/%E5%95%9F%E7%94%A8cors
我在httpd.conf的區塊裡設定了
Header set Access-Control-Allow-Origin "原本網站"
但還是一樣無法獲得資料

請問這是我設定錯誤了嗎?
要如何設定才是正確的

看更多先前的討論...收起先前的討論...
ckp6250 iT邦好手 1 級 ‧ 2020-04-28 20:05:08 檢舉
把 E:/web Mount 到網頁目錄底下,做為一個子資料夾,可以嗎?
淺水員 iT邦大師 6 級 ‧ 2020-04-29 16:51:03 檢舉
「原本網站」的寫法是什麼?可以檢查一下:
1. http 跟 https
2. port
這些沒有完全一樣的話也會視為不同來源。
PS. 另外也可以用開發工具看一下回應的 header 是不是正確。
回覆ckp6250:測試拿顆硬碟切出空間放到網頁目錄下的資料夾,這方法可以,謝謝
回覆淺水員:因為port不同,所以被判斷不同來源
CORS的做法還在找,搞不定的話就用ckp6250的方式,謝謝
淺水員 iT邦大師 6 級 ‧ 2020-05-01 01:13:19 檢舉
我是嘗試過是可行的,所以才想說你的問題不知道在哪邊。
因此才說出「用開發工具看一下回應的 header 是不是正確」。
例如:chrome 的 F12 看一下 network,點選用 ajax 發出的請求,查看 header 是不是有 Access-Control-Allow-Origin,以及內容是否正確。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
黃彥儒
iT邦高手 1 級 ‧ 2020-04-29 00:15:30

你有注意到這段並處理它嗎?

上述一些是“預檢”請求所必需的。某些HTTP客戶端(即現代瀏覽器) 在您所需的請求之前執行請求,以查看他們是否有權在服務器上發出實際請求。有關預檢請求的更多信息,請參閱https://en.wikipedia.org/wiki/Cross-origin_resource_sharing 。

我要發表回答

立即登入回答